php对 特定文件进行格式化后导入到excel中

案例:对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("\r\n\r\n", $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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值