Php shell_exec在运行grep时返回不一致的结果
我希望有人能启发我,并解释以下行为 在php中使用shell_exec时,以下代码在通过php在shell中直接运行以及通过Apache在网页上运行时会给出不同的结果。我并不是期望值(cpu、进程计数、ram等)与此完全相同,这是不可能的。问题是,一些行(顶部的summy)完全丢失了 这个例子很简单,所以应该可以在apache/phe服务器上复制 php代码如下所示:Php shell_exec在运行grep时返回不一致的结果,php,apache,grep,Php,Apache,Grep,我希望有人能启发我,并解释以下行为 在php中使用shell_exec时,以下代码在通过php在shell中直接运行以及通过Apache在网页上运行时会给出不同的结果。我并不是期望值(cpu、进程计数、ram等)与此完全相同,这是不可能的。问题是,一些行(顶部的summy)完全丢失了 这个例子很简单,所以应该可以在apache/phe服务器上复制 php代码如下所示: <?php $command = 'top -b -n1'; $commandoutput = shell_exe
<?php
$command = 'top -b -n1';
$commandoutput = shell_exec($command);
echo strlen($commandoutput);
echo ":";
$command = 'top -b -n1 | grep -e "^\s*[a-Z]"';
$commandoutput = shell_exec($command);
echo strlen($commandoutput);
?>
但当我在网页()中运行完全相同的代码时,我得到的结果是:
8147:0
如果我打印变量$commandoutput,很容易看到缺少了什么。不知何故,顶部的顶部被忽略了。由于某些原因,以下行在通过grep传输后未包含在网页中
top - 23:17:13 up 29 days, 9:20, 3 users, load average: 0.67, 0.85, 0.72
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 4.4%sy, 0.0%ni, 89.5%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 507452k total, 453176k used, 54276k free, 41024k buffers
Swap: 407544k total, 40524k used, 367020k free, 287916k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
我不认为这是一个权限问题,因为当不使用grep时,结果是正确的。
grep有什么魔法能干扰shell_exec。我无法理解shell_exec如何根据我运行脚本的方式返回不同的结果
有人能解释一下发生了什么,或者至少能给我指明正确的方向吗
其他信息:
另一个例子:
在上面的示例中,通过apache运行代码使grep无法正确匹配,导致行数少于预期
如果我把正则表达式颠倒过来,匹配我不想要的行
top-b-n1 | grep-v-e“^\s*[0-9]”
这一次,当我浏览网页时,我看到太多的行。我能看到的to案例之间的唯一联系是以下内容。Grep匹配在两个测试中都失败了,但由于我在第二个案例中反转了匹配,它现在返回每一行,而不是任何内容
我仍然不知道为什么会这样。top-列出了不同的用户、不同的权限、不同的流程。。。。是的,你也在使用不同的外壳。结果并不是不一致的-它们在您的系统配置中是内在一致的。我并不希望值(cpu、进程计数等)完全相同-行完全丢失。没有grep命令,一切都可以工作。我看不出不同的权限、不同的用户或不同的流程如何影响我通过grep传输结果。不同的shell可能会给我带来问题,我只是不明白为什么。添加了一个额外的测试示例,其中我使用grep进行反向匹配。
top - 23:17:13 up 29 days, 9:20, 3 users, load average: 0.67, 0.85, 0.72
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 4.4%sy, 0.0%ni, 89.5%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 507452k total, 453176k used, 54276k free, 41024k buffers
Swap: 407544k total, 40524k used, 367020k free, 287916k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND