正在修剪php exec输出

正在修剪php exec输出,php,exec,Php,Exec,在php中使用exec时,我又遇到了另一个问题 我的操作系统是suse linux,我使用的是PHP5.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

在php中使用exec时,我又遇到了另一个问题
我的操作系统是suse linux,我使用的是PHP5.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
但当通过

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

为什么php会在我不希望的情况下自动删除我的输出?

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

检查JFEServer是否已启动

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

检查JFEServer是否已启动


php没有修剪您的输出,而是浏览器修剪了。通过右键单击->在浏览器上查看页面源代码来检查原始输出。

这是因为PHP无法分配足够大的缓冲区供您与exec一起使用。最好是在两者之间添加一个步骤:将输出通过管道传输到
exec()
调用中的临时文件

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

…然后通过调用
file\u get\u contents()

示例:
var\u dump(文件获取内容('/tmp/mytmpfilename.txt')


编辑:或者,如果有大量数据要输出,比如数千行数据,您可以使用file()。

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

在TTY会话中,ps不会修剪输出,但在其他情况下(取决于
TERM
变量),ps会修剪输出。您还可以通过添加
-ww
将其显式设置为unlimited


ps
手册页是我在这方面的关键。

我知道这有点旧,但现在面临这个问题。有没有办法增加缓冲区以避免发送到临时文件?我曾尝试在php.ini中增加输出缓冲区,但没有用。
<div>Checking whether JFEServer has been started</div>
<div><pre><?php passthru( 'ps -ef | grep java', $result ); ?></pre></div>
<br />
<div>Checking whether JFEServer has been started</div>
<div><pre><?php passthru( 'ps -efww | grep java', $result ); ?></pre></div>
<br />