我通过php move_uploaded_file
函数上传一个文件,然后该文件作为java程序的参数。当java程序执行时,它在终端中输出进度。java程序的输出是perl脚本的输入,perl脚本也执行相同的操作。我在我的php网站中将它们全部作为shell_exec函数执行,并将它们打印在屏幕上
echo "Running java ..... ";
$output=shell_exec("java -jar abc.jar ".( $_FILES['uploaded']['name']));
echo "<pre>$output</pre>";
echo "running perl .....";
$output=shell_exec("perl abc.pl outputfromjava.txt");
echo "<pre>$output</pre>";
shell命令运行正常,但java和perl的输出没有显示在我的网站上。我尝试在java和perl执行后刷新我的代码中的页面,但它随后也刷新了上传。
现在输出为
Running java ....
Running Perl ....
我应该如何编写我的php,使输出是
Running Java...
Progress1 //from java output
progress2 //from java output
Running Perl....
Progress1 //from perl output
progress2 //from perl output
谢谢
3条答案
按热度按时间brgchamk1#
使用
ob_end_flush
禁用输出缓冲,并使用proc_open
而不是shell_exec
启动进程,因此您可以完全控制文件描述符,并且不需要等待进程完成以获取输出。当您使用proc_open
启动进程时,从其STDOUT和STDERR读取并将其输出到浏览器,可能使用flush
以确保您的输出不会保存在任何缓冲区中。zbsbpyhn2#
这是我的解决方案:(在Windows机器+ wamp服务器上测试)
h4cxqtbf3#
尝试
> file.txt
然后读取文件。:)