使用浏览器和命令行时,在PHP中执行系统命令是不同的
我必须在PHP中从特定偏移量执行Linux使用浏览器和命令行时,在PHP中执行系统命令是不同的,php,linux,Php,Linux,我必须在PHP中从特定偏移量执行Linuxmore命令,格式化结果并在浏览器中显示结果 我的上述代码是: <html> <head> <META HTTP-EQUIV=REFRESH CONTENT=10> <META HTTP-EQUIV=PRAGMA CONTENT=NO-CACHE> <title>Runtime Access log</title> </head> <body
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>
运行时访问日志
在以下方面会有什么不同:
$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&-num到more,-c到grep而不是-wc-l)
在调试过程中,在不计算2的情况下(可能使用head或tail)检查确切的输出也是有用的,因为cli和webserver用户之间可能存在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' `
我建议您删除shell管道,直接用PHP解析日志文件。更多的控制。少了很多麻烦,而且绝对更健壮 你好,瑞肯,谢谢你的回复。在这里,我的目的不是数数这些线,而是得到这些线本身。我的程序中的命令是:$moreCommand=“more+$existingWordCount/var/log/apache2/access|log | grep-v-e'.jpg'-e'.jpeg'-e'.css'-e'.js'-e'.bmp'-e'.ico'。我使用“wc-l”只是为了便于突出显示我的问题,并显示与我的命令行o/p和浏览器o/p的区别。我尝试使用-f&-num选项,但它没有起到作用。php脚本仍然忽略+linenum参数。还有其他选择吗?啊,现在我明白了。我可以在这里重现这个问题,不知道为什么会这样。在答案中添加了我能想到的唯一可行的解决方案。嗨,努法,谢谢你的回答。我必须处理的问题是,我必须显示访问日志,但是从偏移量(最后显示行的计数器)到当前光标位置。如何在php中实现这一点?你能帮我看一下示例代码片段吗?然后你可以逐行读到你想要的偏移量,跳过所有的行,然后开始处理。我不确定你所说的“光标位置”是什么意思,因为这是非交互式的。
$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' `