1. 程式人生 > 其它 >PHP用POPEN非同步執行,碰見ECHO時會終止

PHP用POPEN非同步執行,碰見ECHO時會終止

技術標籤: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又關閉了通道,因此非同步指令碼未能完全執行。