我必须从特定偏移量在PHP中执行Linux more
命令,格式化结果并在浏览器中显示结果。
我的上述代码是:
<html>
<head>
<META HTTP-EQUIV=REFRESH CONTENT=10>
<META HTTP-EQUIV=PRAGMA CONTENT=NO-CACHE>
<title>Runtime Access log</title>
</head>
<body>
<?php
$moreCommand = "more +3693 /var/log/apache2/access_log | grep -v -e '.jpg' -e '.jpeg' -e '.css' -e '.js' -e '.bmp' -e '.ico'| wc -l";
exec($moreCommand, $accessDisplay);
echo "<br/>No of lines are : $accessDisplay[0] <br/>";
?>
</body>
</html>
浏览器的输出为:行数为:3428(这是错误的)
使用命令行执行相同的命令时会产生不同的输出。我的代码片段是:
<?php
$moreCommand = "more +3693 /var/log/apache2/access_log | grep -v -e '.jpg' -e '.jpeg' -e '.css' -e '.js' -e '.bmp' -e '.ico'| wc -l";
exec($moreCommand, $accessDisplay);
echo "No of lines are : $accessDisplay[0] \n";
?>
命令行的输出为:行数为:279(这是正确的)
在命令行中直接执行相同的命令时,输出为279。
我无法理解为什么浏览器中同一命令的输出错误。它实际上给出了行的字数,忽略了偏移参数。
答案 0 :(得分:1)
我建议您删除shell管道并直接在PHP中解析日志文件。更多的控制。麻烦少得多,而且更加强大。
答案 1 :(得分:0)
有什么区别:
$moreCommand = "more -f -99999 +3693 /var/log/apache2/access_log | grep -v -e '.jpg' -e '.jpeg' -e '.css' -e '.js' -e '.bmp' -e '.ico' -c"
( - f&amp; -num to more,-c to grep而不是| wc -l)
在调试中,检查确切的输出而不计算2(可能使用头部或尾部)也是有用的,因为cli和amp;之间可能存在shell差异。网络服务器用户。
好的,这是错误的,可以重现更多而不是'+',替代方案:
$moreCommand = "tail --lines=`wc -l /var/log/apache2/access_log | awk '{print $1 - 3693}' | grep -v -e '.jpg' -e '.jpeg' -e '.css' -e '.js' -e '.bmp' -e '.ico' `