php exec 输出被修剪

twe*_*kmy 5 php exec

我在 php 中使用 exec 时又遇到了另一个麻烦,
我的操作系统是 suse linux,我正在使用 php 5.1.2

不知何故,当我使用 exec() 时,我的输出被修剪

在Linux中

~ -> ps -ef | grep java
root      3548     1  0 Aug05 ?        00:00:01 /usr/java/jdk1.5.0_13//bin/java -server -Djava.awt.headless=true -Xms512m -Xmx512m -XX:NewSize=224m -XX:MaxNewSize=256m -XX:SurvivorRatio=8 -XX:+UseParallelGC -jar /jfe-server.jar start
psinl    14811     1  0 09:12 ?        00:00:01 /usr/java/jdk1.5.0_13//bin/java -server -Djava.awt.headless=true -Xms512m -Xmx512m -XX:NewSize=224m -XX:MaxNewSize=256m -XX:SurvivorRatio=8 -XX:+UseParallelGC -jar jfe-server.jar start
psinl    18164 18080  0 16:20 pts/1    00:00:00 grep java
Run Code Online (Sandbox Code Playgroud)

但是当通过输出到网络时

<div>Checking whether JFEServer has been started</div>
<div><pre><?php exec('ps -ef | grep java',$output,$result);
print_r($output); ?></pre>
</div>
</br>
Run Code Online (Sandbox Code Playgroud)

我在网络上的输出

Checking whether JFEServer has been started

Array
(
    [0] => root      3548     1  0 Aug05 ?        00:00:01 /usr/java/jdk1.5.0_13//bin/java
    [1] => psinl    14811     1  0 09:13 ?        00:00:01 /usr/java/jdk1.5.0_13//bin/java
    [2] => psinl    18069 14271  0 16:20 ?        00:00:00 sh -c ps -ef | grep java
    [3] => psinl    18071 18069  0 16:20 ?        00:00:00 grep java
)
Run Code Online (Sandbox Code Playgroud)

为什么 php 会自动修剪掉我的输出,即使我不希望如此?

小智 1

您可以使用 passthru,它将命令的输出直接传递到客户端浏览器。

<div>Checking whether JFEServer has been started</div>
<div><pre><?php passthru( 'ps -ef | grep java', $result ); ?></pre></div>
<br />
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,您应该查看ps的文档,如果它测试标准输出终端类型(例如文件/管道/终端)。如果这样做,如果无法确定实际的终端宽度,则可能会将其修剪为某个默认宽度。在我的基于 Debian 的服务器上确实如此。在我的机器上正确的命令是:

<div>Checking whether JFEServer has been started</div>
<div><pre><?php passthru( 'ps -efww | grep java', $result ); ?></pre></div>
<br />
Run Code Online (Sandbox Code Playgroud)