Pthread不能在php中工作


pthread not working in php

我已经从http://windows.php.net/downloads/pecl/releases/pthreads/下载了PHP Pthreads dll文件,并在PHP .ini中启用了它,如下所示:

extension=pthreadVC2.dll
extension=php_pthreads.dll

我使用了下面的示例代码:

<?php
class AsyncOperation extends Thread 
{
    public function __construct($arg){
        $this->arg = $arg;
    }
    public function run(){
        if($this->arg){
            printf("Hello %s'n", $this->arg);
        }
    }
}
$thread = new AsyncOperation("World");
if($thread->start())
    $thread->join();
当我执行代码时,我得到以下错误:

致命错误:在C:'htdocs'threads'AsyncOperation.php中找不到类'Thread'on line 2 Call Stack: 0.0008 333464{主要}()C: '根' ' AsyncOperation.php线程:0

有两个问题:

1)首先必须寻找正确的dll文件位置。DLL文件应按如下方式放置:

C:'PHP5'pthreadVC2.dll
C:'PHP5'ext'php_pthreads.dll

和在php.ini文件中只有php_pthreads.dll应该被启用为

extension=php_pthreads.dll

2)必须查找PHP和dll文件的版本

我的PHP是VC6构建和使用的dll文件是VC9。这就是模块没有被安装的原因。我是通过使用"php -m"来了解这种差异的。

由于没有VC6构建的dll文件,我使用VC9构建的PHP和使用pthreads,程序工作完美。

注:以上两个解决方案解决了我的问题。但是如果仍然出现错误,请检查是否启用了xdebug或zend调试器。

如果PHP安装在不同的文件夹而不是C:/PHP5,最好将pthreadVC2.dll添加到httpd.conf中。否则,pthreads扩展模块找不到它。

LoadFile "c:/not_default_php5/pthreadVC2.dll"

注意:如果在添加LoadFile后,Apache仍然找不到DLL,只需删除LoadFile行并将DLL复制到Apache bin文件夹。

c:/apache_home/bin/pthreadVC2.dll

我找到了一个适合我的解决方案:

你应该首先验证你已经下载了适合你的特定系统的包(php版本,64/32位系统)。

之后,您应该将相关文件包含在多个位置。把它们放在每一个描述的地方是非常重要的,否则它将无法工作。

您还应该像上面描述的那样修改php.ini文件(仅针对php_pthreads.dll)。

我一直在Windows 7 64位系统上使用WAMP。