我试图从 php 脚本中执行 perl 脚本。我已经使用各种方法(例如 exec、popen 和 proc_open)进行了这项工作,但是我有几个问题需要解决,而老 Google 并没有给我答案。
我需要从 php 文件中运行 .pl 脚本(将一个变量传递给脚本,该脚本是一个数字),但停止 php 脚本等待 .pl 完成(.pl 可能需要 4-5 小时在服务器上运行)。我不期望 perl 脚本有任何返回输出(perl 脚本将其输出记录到 mysql db)所以我只需要它在服务器上运行并让 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 完成.