以下代码在运行“php test.php”(PHP 5)的Windows 7中从命令提示符执行时有效 - 输出只是“test”。但是当php(v5)在localhost apache服务器(v2.2)上运行的任何浏览器上运行时,它都不起作用 - 即没有输出(使用直接回声,使用AJAX方法刷新AND)。该过程已成功启动(使用proc_get_status验证)(意味着对我,权限问题也可以)。似乎与管道有关。有任何想法吗?有一件众所周知的事我错过了吗?
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w")
);
$process = proc_open("java Test", $descriptorspec, $pipes, null, null,array('bypass_shell'=>true));
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($process);
?>
答案 0 :(得分:4)
可能您的apache服务器作为“系统”运行为非交互式服务。很多东西都行不通,也可能是控制台应用程序的管道。此外,您可能会遇到权限问题,因为您的控制台(它工作的地方)具有用户(您的)权限,而生成的控制台具有系统权限。
如果您确实需要管道,可以尝试以用户(而不是系统)的身份运行apache,并配置启用桌面交互的服务。