我试图从一个php脚本中执行一个perl脚本。我已经使用了各种方法,比如exec、popen和proc_open,但是我还有几个问题要解决,而好的老谷歌并没有给我答案。
我需要在php文件中运行.pl脚本(将一个变量传递给脚本,这个变量是一个数字),但不要让php脚本等待.pl完成(在服务器上运行.pl可能需要4-5个小时)。我不期望从perl脚本返回任何输出(perl脚本将其输出记录到mysql数据库),所以我只需要它在服务器上运行,让php脚本继续运行。
在运行apache、php和mysql的Windows机器上运行时,有一些障碍需要克服。
我想我已经看到了linux的解决方案,但是它需要留在Windows机器上。
我正在使用以下代码尝试proc_open方法(proc_open行上的35是我需要传递给perl脚本的测试id):
$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("file","./error.log","a")
) ;
proc_close(proc_open('perl perlscript.pl 35', $descriptorspec, $pipes));
$i = 0;
while ($i < 1000) {
echo ++$i;
}
现在,这段代码确实执行了perl脚本,但是放在它后面的while循环(只是为了测试)永远不会执行(我没有等待perl脚本完成,看它是否完成),因为它必须等待.pl完成。