PHP用POPEN非同步執行,碰見ECHO時會終止
阿新 • • 發佈:2021-02-10
技術標籤:laravel
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又關閉了通道,因此非同步指令碼未能完全執行。