php exec 输出被修剪

标签 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

但是当通过

输出到网络时
<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() 调用中的临时文件

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

...然后通过调用 file_get_contents() 将其转储到屏幕上

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

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

关于php exec 输出被修剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3554679/

相关文章:

javascript - Jquery不显示按钮

python - python中的异步执行

Java运行时执行

php - Node 服务器屏幕截图 无法在实时 ubuntu 服务器上工作

php - 在 Opencart admin 'Order Info' 页面上添加自定义字段

php - 抽象 try/catch PHP - strip 错误处理

c - popen() 替代方案

shell - 在同一个 shell golang 中运行多个 Exec 命令

python - Python3.3中的exec发生了什么?

php - 直接从Google Drive上传到亚马逊S3