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