Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用浏览器和命令行时,在PHP中执行系统命令是不同的_Php_Linux - Fatal编程技术网

使用浏览器和命令行时,在PHP中执行系统命令是不同的

使用浏览器和命令行时,在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

我必须在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>

运行时访问日志

在以下方面会有什么不同:

$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' `