不同的行为php pthreads在控制台和浏览器中

时间:2014-01-12 20:25:59

标签: php pthreads

我使用php和pthreads编写应用程序,我注意到它无法正常工作。为了隔离错误,我减少了代码,现在我有了这段代码,并且我已经检查过它通过控制台执行它的行为不同于网络浏览器,我找不到原因,我我在这里寻求帮助。代码是:

<?php
echo "beforethread<br/>";

class AsyncOperation extends Thread
{
    private $sum;

    public function __construct()
    {
        $this->sum = 5;
    }

    public function run()
    {           
        echo "insidethread<br/>";
    }       
}

$thread = new AsyncOperation();
$thread->start();   
$thread->join();        
?>

通过控制台我得到:

beforethread
insidethread

并通过网络浏览器:

insidethread
beforethread

我无法理解php是否逐行执行为什么通过Web浏览器代码行为不正确。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

您不应该从响应请求的线程以外的任何线程在Web环境中编写标准输出。这是不安全的,至少你会遇到乱码输出和最坏的分段错误(因为你从另一个线程填充stdout的缓冲区,这是不允许的,zend没有办法抽象它)。

即使在控制台,如果你想了解你的输出,你应该在写入stdout时使用互斥锁。