我在 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)