PHP pThreads IIS:浏览器中的意外输出
PHP pThreads IIS: unexpected output in browser
我正在尝试使用 PHP pThreads in a IIS 7 PHP 5.6 x86 (thread safe) environment. I've created a github issue 使 php 脚本 运行 多线程,但我没有收到回复,尽管这里的其他一些编码人员可能也有过同样的经历问题。
PHP 运行 正常,不需要 pThreads 的脚本可以正常执行。但是,当我向我的脚本添加一些多线程代码时,只有非多线程代码块在浏览器中执行 除非 我在执行代码之前调用 phpinfo .例如:
<?php
class AsyncOperation extends Thread {
public function run(){
echo 'hello world';
}
}
$thread = new AsyncOperation();
if($thread->start()) {
$thread->join();
}
?>
在浏览器中没有输出(虽然仍然是响应代码 200)。
但是下面的代码 with phpinfo 首先调用 有效:
<?php
phpinfo();
class AsyncOperation extends Thread {
public function run(){
echo 'hello world';
}
}
$thread = new AsyncOperation();
if($thread->start()) {
$thread->join();
}
?>
所有 phpinfo 内容的预期输出,然后是 hello world。我还注意到发送 phpinfo(64)
不会回显 hello world,但是 phpinfo 的所有其他有效参数都会导致打印 hello world。
我还尝试了从命令行 运行ning 原始(没有 phpinfo)脚本,并注意到控制台中回显了 "hello world"。这让我相信这是一个 IIS7 配置错误,但这并没有解释调用 phpinfo 是如何让它工作的?
另外我要注意,错误日志中也没有任何内容,系统设置为记录所有错误。
与krakjoe mentioned in your issue一样,当不同的线程使用相同的输出缓冲区时会发生奇怪的事情。
可能最好遵循 JakeFalcor's advice 并首先将线程的输出存储在内存中,然后从主线程回显它。
class AsyncOperation extends Thread {
public $output;
public function run(){
$this->output = 'hello world';
}
}
$thread = new AsyncOperation();
if($thread->start()) {
$thread->join();
echo $thread->output;
}
另请参阅:ob_start()
我正在尝试使用 PHP pThreads in a IIS 7 PHP 5.6 x86 (thread safe) environment. I've created a github issue 使 php 脚本 运行 多线程,但我没有收到回复,尽管这里的其他一些编码人员可能也有过同样的经历问题。
PHP 运行 正常,不需要 pThreads 的脚本可以正常执行。但是,当我向我的脚本添加一些多线程代码时,只有非多线程代码块在浏览器中执行 除非 我在执行代码之前调用 phpinfo .例如:
<?php
class AsyncOperation extends Thread {
public function run(){
echo 'hello world';
}
}
$thread = new AsyncOperation();
if($thread->start()) {
$thread->join();
}
?>
在浏览器中没有输出(虽然仍然是响应代码 200)。
但是下面的代码 with phpinfo 首先调用 有效:
<?php
phpinfo();
class AsyncOperation extends Thread {
public function run(){
echo 'hello world';
}
}
$thread = new AsyncOperation();
if($thread->start()) {
$thread->join();
}
?>
所有 phpinfo 内容的预期输出,然后是 hello world。我还注意到发送 phpinfo(64)
不会回显 hello world,但是 phpinfo 的所有其他有效参数都会导致打印 hello world。
我还尝试了从命令行 运行ning 原始(没有 phpinfo)脚本,并注意到控制台中回显了 "hello world"。这让我相信这是一个 IIS7 配置错误,但这并没有解释调用 phpinfo 是如何让它工作的?
另外我要注意,错误日志中也没有任何内容,系统设置为记录所有错误。
与krakjoe mentioned in your issue一样,当不同的线程使用相同的输出缓冲区时会发生奇怪的事情。
可能最好遵循 JakeFalcor's advice 并首先将线程的输出存储在内存中,然后从主线程回显它。
class AsyncOperation extends Thread {
public $output;
public function run(){
$this->output = 'hello world';
}
}
$thread = new AsyncOperation();
if($thread->start()) {
$thread->join();
echo $thread->output;
}
另请参阅:ob_start()