【发布时间】:2018-07-16 12:08:17
【问题描述】:
我有一个包含这样内容的日志文件
2018/01/14 12:27:27|get_offers|ok|1678537191|64.233.173.132|info=wifi
2018/01/14 12:27:27|get_offers|ok|1678537191|64.233.173.132|info=wifi
2018/01/14 12:27:27|get_offers|ok|1678537191|64.233.173.132|info=wifi
我正在尝试一一分别检索数据/报价/状态/号码/ IP。 我正在为此使用 PHP Yii 框架,并在运行 linux 命令的程序中使用。
命令
$dateCmd = "cat " . $file_names_str . "| awk -F '|' '{ print $1}'";
$descCmd = "cat " . $file_names_str . "| awk -F '|' '{ print $2}'";
$statusCmd = "cat " . $file_names_str . "| awk -F '|' '{ print $3}'";
$mobileCmd = "cat " . $file_names_str . "| awk -F '|' '{ print $4}'";
$ipCmd = "cat " . $file_names_str . "| awk -F '|' '{ print $5}'";
执行部分
$date = shell_exec($dateCmd);
$desc = shell_exec($descCmd);
$status = shell_exec($statusCmd);
$mobile = shell_exec($mobileCmd);
$ip = shell_exec($ipCmd);
最后我想要一个这样的数组。并编码为 JSON。以下数组包含虚拟数据。
$rec = [
[
'date' => '2018-02-01',
'desc' => 'test descrip',
'status' => 'true',
'mobile' => '2145786695',
'ip' => '127.168.0.1',
],
[
'date' => '2018-02-01',
'desc' => 'test descrip2',
'status' => 'true',
'mobile' => '2145786695',
'ip' => '127.168.0.1',
],
[
'date' => '2018-02-01',
'desc' => 'test descrip2',
'status' => 'true',
'mobile' => '2145786695',
'ip' => '127.168.0.1',
],
];
$enc = CJSON::encode($rec);
echo $enc;
但在这种情况下,它不会按我的意愿检索数据。我是 linux 新手,我只想像这张图片一样逐行获取记录。
请帮我解决这个问题。
【问题讨论】:
-
我不会像这样在 linux 和 php 之间切换:如果你有一个有效的 csv 文件,其中分隔符是
|符号,使用fgetcsv()读取和解析可能更容易它。 -
为什么这么复杂 - 为什么不在一个 PHP 脚本中完成所有事情呢?就像在这个例子中一样:stackoverflow.com/questions/14574944/…