2010-08-24 76 views
3

我又有另一个麻烦,在PHP中使用EXEC
我的操作系统是的SUSE Linux,我使用PHP 5.1.2PHP EXEC输出被修剪

不知怎的,当我使用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 

但是当经由

<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已经自动修剪掉我的输出,即使我不希望它?

回答

1

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

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

如果没有帮助,你应该考虑的ps的文件,如果测试标准输出的终端类型(例如文件/管材/终端)。如果这样做,如果它不能确定实际的终端宽度,它可能会将其修剪到某个默认宽度。在我的基于debian的服务器上它有。在我的机器上正确的命令是:

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

php没有减少你的输出,浏览器。在浏览器上右击 - >查看页面源,检查原始输出。

+0

不,不是,我测试过了。 – rlcabral 2012-07-04 17:33:27

1

这是因为PHP只是不能分配足够大的缓冲区供您使用exec。最好的办法是在添加工序之间:输出在exec()通话管到一个临时文件

例如:exec('ps -ef | grep java > /tmp/mytmpfilename.txt')

...然后转储拿出来与调用屏幕file_get_contents()

例如:var_dump(file_get_contents('/tmp/mytmpfilename.txt'));

编辑:另外,如果有一个LOT数据要输出,比如几千行值,你可以使用file()。

1

我不得不添加-w标志来在Centos 6.2上加倍我的ps输出。当然,这只是有时需要的,特别是在从脚本运行的会话中。

在TTY会话,PS不会调整输出,但在其他情况下(取决于TERM变量,它将。您也可以明确其加入-ww设置为无限制。

ps手册页对我来说这个钥匙