php用popen异步执行,碰见echo时会终止
php程序中,我们常用popen来异步执行,但是如果异步脚本中有echo输出,则会在此行终止。
下面举例:
异步执行run.php
<?php for ($i = 0; $i < 5; $i++) { file_put_contents(__DIR__ . '/a.txt', FILE_APPEND); echo $i . "\r\n"; } echo "finish\r\n";
在命令行中执行脚本


输出正常。a.txt中内容也正常。
但是如果php中用popen来异步执行,就会出现异常终止。
<?php pclose(popen("php run.php&", "r"));
执行后,a.txt中内容只有一行。

也就是在碰见第一个echo的时候就终止了。如果注释掉echo这一行,这脚本可以顺利异步执行成功。
我想可能时popen打开了一个通道,如果有内容输出时,而pclose又关闭了通道,因此异步脚本未能完全执行。