概述
案例:对public/log文件夹下的日志文件进行格式化,并导入到excel中
log文件夹下有1.txc,2.txt,34.txt,56.txt
txt文件内容格式为:
2023-01-02-18-59-13��192.168.146.211:1025�յ�����:Tin 25.4_C . Tamb .7.3_C Tout 25.6_C OK curr: 3.25
2023-01-02-18-59-13��192.168.146.219:1025�յ�����:Tin 25.2_C Tamb 26.7_C Tout 25.1_C OK curr: 2.14
2023-01-02-18-59-13��192.168.146.212:1025�յ�����:Tin 25.3_C Tamb. 27.1_C Tout 25.5_C OK curr: 2.88
2023-01-02-18-59-13��192.168.146.218:1025�յ�����:Tin 25.5_C Tamb 28.4_C Tout 25.2_C OK curr: 3.04
2023-01-02-18-59-13��192.168.146.208:1025�յ�����:Tin 25.2_C Tamb 26.6_C Tout 25.2_C OK curr: 2.94
2023-01-02-18-59-13��192.168.146.216:1025�յ�����:Tin 25.2_C Tamb 26.3_C Tout 25.1_. " OK curr: 2.26
2023-01-02-18-59-13��192.168.146.224:1025�յ�����:Tin 25.5_C Tamb .26.8_C Tout 25.3.C OK curr: 2.26
2023-01-02-18-59-13��192.168.146.209:1025�յ�����:Tin 25.1_C Tamb 27.7.C Tout 25.3_C OK curr: 3.54
php代码 根据ip地址筛选 获取日期,时间,ip地址,tin,tamb,tout,curr
public function aaa(Request $request)
{
$fileName = $request->param('ip','','trim'); //筛选需要的ip
// $file = 'public/log/1.txt';
$dir = 'public/log/';
$files = $this->listDirFiles($dir); //获取文件夹下所有文件
$arrfile = explode(';', $files); //数组化
$arrs = array();
//循环文件内容,得到想要的数据
for ($j = 0; $j < count($arrfile); $j++){
$file = $dir.$arrfile[$j];
if (file_exists($file)) {
$content = file_get_contents($file);
if (empty($content)) {
echo "文件内容为空";
} else {
//读取文件内容 并数组化内容
$content = mb_convert_encoding($content, 'UTF-8', 'ASCII,UTF-8,GB2312,GBK,BIG5');
$array = explode("rnrn", $content);
for ($i = 0; $i < count($array); $i++) {
if (substr($array[$i], 0, 1) == '"') {
$arr[$i]['date'] = substr($array[$i], 1, 10);
$time = substr($array[$i], 12, 8);
$arr[$i]['time'] = str_replace('-', ':', $time);
$arr[$i]['ip'] = substr($array[$i], 23, 15);
$tin = substr($array[$i], 62, 4);
$arr[$i]['tin'] = (float)$tin;
$tamb = substr($array[$i], 82, 4);
$arr[$i]['tamb'] = (float)$tamb;
$tout = substr($array[$i], 102, 4);
$arr[$i]['tout'] = (float)$tout;
$curr = substr($array[$i], 143, 4);
$arr[$i]['curr'] = (float)$curr;
if ($arr[$i]['tin'] < 15 || $arr[$i]['tamb'] < 15 || $arr[$i]['tout'] < 15 || $arr[$i]['ip'] != $fileName) {
unset($arr[$i]);
}
} else {
$arr[$i]['date'] = substr($array[$i], 0, 10);
$time = substr($array[$i], 11, 8);
$arr[$i]['time'] = str_replace('-', ':', $time);
$arr[$i]['ip'] = substr($array[$i], 22, 15);
$tin = substr($array[$i], 61, 4);
$arr[$i]['tin'] = (float)$tin;
$tamb = substr($array[$i], 81, 4);
$arr[$i]['tamb'] = (float)$tamb;
$tout = substr($array[$i], 101, 4);
$arr[$i]['tout'] = (float)$tout;
$curr = substr($array[$i], 142, 4);
$arr[$i]['curr'] = (float)$curr;
if ($arr[$i]['tin'] < 15 || $arr[$i]['tamb'] < 15 || $arr[$i]['tout'] < 15 || $arr[$i]['ip'] != $fileName) {
unset($arr[$i]);
}
}
}
}
}
if (!empty($arrs)){
$arrs = array_merge($arrs,$arr);
}else{
$arrs = $arr;
}
}
//导入数据到数据表格中
$titleArr = ['日期', '时间', 'IP', 'Tin', 'Tamb', 'Tout', 'Curr'];
$filedArr = ['date', 'time', 'ip', 'tin', 'tamb', 'tout', 'curr'];
Csv::simpleCsv($titleArr, $filedArr, $fileName.'.csv', $arrs);
}
//获取文件夹下的所有文件
function listDirFiles($dirPath)
{
$arrfile = '';
if($dir = opendir($dirPath)){
while(($file = readdir($dir))!== false){
if(!is_dir($dirPath.$file))
{
if ($arrfile == ''){
$arrfile = $file;
}else{
$arrfile = $arrfile.';'.$file;
}
}
}
}
return $arrfile;
}
//导出数据到excel中:
<?php
/**
* @Author Quincy 2019/1/5 下午6:21
* @Note 操作csv文件类
*/
namespace lib;
class Csv
{
/**
* @Author Quincy 2019/1/5 下午6:22
* @Note 导出并下载csv文件 先设置csv相关的Header头, 然后打开 PHP output流, 渐进式的往output流中写入数据, 写到一定量后将系统缓冲冲刷到响应中
* @param $query object 模型构造对象
* @param $titleArr array 标题数组
* @param $filedArr array 字段数组
* @param $csvName string 文件名
* @param array $extraData
*/
public static function downCsv($query, $titleArr, $filedArr, $csvName, $extraData = array())
{
set_time_limit(0);
header('Content-Type: application/vnd.ms-txt');
header('Content-Disposition: attachment;filename=' . $csvName);
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'a'); //打开output流
mb_convert_variables('GBK', 'UTF-8', $titleArr);
fputcsv($fp, $titleArr); //将数据格式化为CSV格式并写入到output流中
$query->chunk(10000, function ($data) use ($fp, $filedArr, $extraData) {
$fieldNameCount = count($filedArr);
foreach ($data as $row) {
$rowData = [];
for ($i = 0; $i < $fieldNameCount; $i++) {
if (substr_count($filedArr[$i], '@') >= 1) {
$arr = explode('@', $filedArr[$i]);
$name = $arr[0];
$relation = $arr[1];
$str = $row[$relation][$name];
} else if (substr_count($filedArr[$i], 'extra_') >= 1) {
$str = $extraData[$filedArr[$i]];
} else {
$str = $row[$filedArr[$i]] ? $row[$filedArr[$i]] : '';
}
$rowData[] = $str;
}
mb_convert_variables('GBK', 'UTF-8', $rowData);
fputcsv($fp, $rowData);
}
//释放变量的内存
$data = null;
//刷新输出缓冲到浏览器 必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
ob_flush();
flush();
});
//释放变量内存
$rowData = null;
fclose($fp);
exit();
}
public static function simpleCsv($coulumnName, $fieldName, $csvName, $data)
{
set_time_limit(0);
header('Content-Type: application/vnd.ms-txt');
header('Content-Disposition: attachment;filename=' . $csvName);
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'a'); //打开output流
// mb_convert_variables('GBK', 'UTF-8', $coulumnName);
fputcsv($fp, $coulumnName); //将数据格式化为CSV格式并写入到output流中
foreach ($data as $row) {
$rowData = [];
for ($i = 0; $i < count($fieldName); $i++) {
$rowData[] = $row[$fieldName[$i]];
}
// mb_convert_variables('GBK', 'UTF-8', $rowData);
fputcsv($fp, $rowData);
}
//释放变量的内存
unset($data);
//刷新输出缓冲到浏览器 必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
ob_flush();
flush();
fclose($fp);
exit();
}
}
最后
以上就是糊涂牛排为你收集整理的php对 特定文件进行格式化后导入到excel中的全部内容,希望文章能够帮你解决php对 特定文件进行格式化后导入到excel中所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复