Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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 shell_exec在运行grep时返回不一致的结果_Php_Apache_Grep - Fatal编程技术网

Php shell_exec在运行grep时返回不一致的结果

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中使用shell_exec时,以下代码在通过php在shell中直接运行以及通过Apache在网页上运行时会给出不同的结果。我并不是期望值(cpu、进程计数、ram等)与此完全相同,这是不可能的。问题是,一些行(顶部的summy)完全丢失了

这个例子很简单,所以应该可以在apache/phe服务器上复制

php代码如下所示:

<?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