【发布时间】:2014-01-25 17:18:11
【问题描述】:
请阅读此问题后,不要说它是复制的。我已经在网上搜索过,但没有一个解决方案适合我。
我在做什么:->
我通过在本地主机上运行 apache 服务器通过 php 获取源文件(例如 .c)。我将该文件保存在“/code/”目录中,并使用 php 中的 proc_open() 编译和执行该源文件。现在我想要等待主php脚本直到“proc_open()”创建的进程终止,所以我使用了“pcntl_waitpid()”。但我认为使用“pcntl_waitpid()”存在问题,因为“pcntl_waitpid()”之后的脚本没有执行。
由“pcntl_waitpid()”创建的进程从“/code/input.txt”文件中获取输入并将输出提供给“/code/output.txt”文件,因此出于重定向目的,我使用 proc_open(),这样我就可以轻松重定向流。
我的机器配置:-
操作系统 -> Ubuntu 12.04 LT
PHP 5.3.10
APACHE 2.2.22
在本地主机上运行
权限:-
/代码 -> 777
主php文件所在的文件夹-> 777(我知道777由于安全原因不好,但是因为我在本地服务器上运行脚本,所以我对这些权限没有问题。)
我想要什么:- 谁能告诉我任何方式,以便我可以停止主 php 脚本,直到 proc-open() 创建的进程终止,或者是否有人可以告诉我其他方式来满足我的重定向要求?
这是部分代码:
$descriptors = array(
2 => array("pipe","w")
);
$process = proc_open($cmd,$descriptors,$pipes,$code);
sleep(2);
if(is_resource($process))
{
$status = proc_get_status($process);
$pid = $status ["pid"];
echo getmypid()."<br />";
echo $pid;
if(pcntl_waitpid($pid,$child_status) == -1)
{
fclose($pipes[2]);
proc_close($process);
exit("Sorry!Unable to compile the source_file.\n");
}
while(!file_exists("/code/test"))
{
proc_close($process);
echo stream_get_contents($pipes[2]),"\n";
fclose($pipes[2]);
exit("Sorry!Unable to compile the source_file.\n");
}
echo "Compiled Successfully!\n";
echo "Running test cases...\n";
fclose($pipes[2]);
proc_close($process);
}
else
{
exit("Sorry!Unable to compile the source_file.\n");
}
谢谢!
【问题讨论】:
标签: php