我是PHP的新手。
我正在尝试编写一个PHP脚本,它将获取源代码(比如“test.c”),它将编译代码并运行该代码。运行可执行文件(“test.c - > test”) ),它将从其他文件中获取输入并将输出提供给其他文件。然后我将从输出文件中读取。
我编译了(“gcc -g test.c -o test”)并通过在PHP中使用“proc_open()”创建进程来运行(“./ test”)文件。早先我遇到了一个问题,我的主要PHP脚本在没有等待子进程终止的情况下运行(将创建一个可执行文件,我希望主PHP只有在创建可执行文件时才能进一步运行。)。正如我所说,我想等待主PHP脚本,直到子进程终止,所以我在谷歌搜索并找到使用“pcntl_wait()”的解决方案,但现在的问题是,当我使用“pcntl_wait()”,脚本后面的“pcntl_wait( )“没有运行。我无法弄清楚问题。
现在我的问题是,是否有任何方法可以让主要的PHP脚本在孩子进程终止之前等待?
如果有人有兴趣看我如何使用“pcntl_wait()”那么我会感谢她/他。这是我的代码的一部分:
$cwd = "/code/";
chmod("/code/test.c",0777);
switch($xtension)
{
case "c" : $cmd = "gcc -g test.c -o test -lm ";
break;
case "cpp" : $cmd = "g++ -g test.cpp -o test";
break;
case "java" : $cmd = "javac test.java";
}
$descriptors = array(
2 => array("pipe","w")
);
$process = proc_open($cmd,$descriptors,$pipes,$code);
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");
}
**/*AFTER IT NOTHING IS RUNNING*/**
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");
}