我花了一些时间尝试在Windows上找到一种方式,让PHP脚本异步启动另一个脚本,并遇到了使用popen()的建议解决方案。起初它似乎没有工作,但是当我加入延迟时似乎工作得更好一些。但经过进一步调查,似乎在主要脚本结束后不久,二级进程就被杀死了。当主脚本停止时,异步PHP脚本停止
下面是启动二级脚本代码的相关位...
$cmd = <<<EOT
start "php" /b "C:\\Program Files (x86)\\iis express\\PHP\\v7.1\\php.exe" -f="$script" $args
EOT;
$p = popen($cmd, 'r');
usleep(500000);
pclose($p);
和辅助脚本的相关部分...
$fp = fopen($argv[1] . '.txt', 'w');
for ($i = 0; $i < 100; $i++) {
fwrite($fp, $i ."\n");
sleep(1);
}
fclose($fp);
这只是证明OF-概念的东西。基本上,第二个脚本打开一个文件,然后以1秒为间隔写入0到99之间的数字。
问题是它似乎没有完成。如果睡眠时间为500ms,则只能达到大约15.对于200ms,它会达到大约8,等等。
我猜测这是某种流程所有权问题。例如。当主脚本终止时,会终止子进程,但我不确定,并且已经没有什么可尝试的想法了。
(在Windows 10运行IIS)
有什么建议?
太棒了!我设法让它只用“php”工作,但实际上并不是我现在想运行的版本,而使用完整路径似乎消失了。有任何想法吗? – xtempore
不是PHP的版本?,请检查你的环境变量(路径)中分配了什么php.exe。就我个人而言,我运行Apache 7和Apache 5.5,所以当我单元测试时,我可以测试它对该版本lol – ArtisticPhoenix
如果你不知道如何改变它,你可以参考这个https:// john-dugan。 com/add-php-windows-path-variable/ – ArtisticPhoenix