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又关闭了通道,因此异步脚本未能完全执行。

发表评论

您的电子邮箱地址不会被公开。