我在 php 中使用 exec 又遇到了另一个麻烦
我的操作系统是 suse linux,我使用的是 php 5.1.2
不知何故,当我使用 exec() 时,我的输出被修剪
in 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
但是当通过输出到网络时
<div>Checking whether JFEServer has been started</div>
<div><pre><?php exec('ps -ef | grep java',$output,$result);
print_r($output); ?></pre>
</div>
</br>
我在网络上的输出
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
)
为什么 php 会自动修剪掉我的输出,即使我不希望如此?
这是因为 PHP 无法分配足够大的缓冲区供您与 exec 一起使用。最好的办法是在两者之间添加一个步骤:将输出通过管道传输到您的临时文件中exec()
call
例子:exec('ps -ef | grep java > /tmp/mytmpfilename.txt')
...然后通过调用将其转储到屏幕上file_get_contents()
例子:var_dump(file_get_contents('/tmp/mytmpfilename.txt'));
编辑:或者,如果有很多数据要输出,例如几千行,您可以使用 file() 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)