pthread不在php中工作

时间:2013-03-26 10:14:32

标签: multithreading installation php

我已从PHP Pthreads下载了http://windows.php.net/downloads/pecl/releases/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'           第2行调用堆栈:0.0008 333464 1. {main}()           C:\ htdocs中\线程\ AsyncOperation.php:0

3 个答案:

答案 0 :(得分:12)

这里有两个问题:

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 build,使用的dll文件是VC9。这就是为什么模块没有安装。我通过使用“ php -m ”来了解这种差异。

由于没有VC6构建的dll文件,我使用了VC9构建的PHP并使用了pthreads,程序运行正常。

注意:以上两种解决方案解决了我的问题。但是,如果您仍然遇到错误,请检查您是否启用了调试器xdebug或zend。禁用它们然后重试。

答案 1 :(得分:4)

如果您在不同的文件夹而不是C:/ PHP5上安装了PHP,最好将 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

答案 2 :(得分:-1)

我发现a solution对我有用:

您应首先验证您是否已为您的特定系统(php版本,64/32位系统)下载了正确的软件包。

之后,您应该在多个地方包含相关文件。将它们放在所描述的每个地方都非常重要,否则它只是不会起作用。

您还应该如上所述更改您的php.ini文件(仅适用于php_pthreads.dll)。

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