PHP pthreads:致命错误:找不到类'Thread'

时间:2014-04-07 00:06:55

标签: php multithreading pthreads

我在我的网络服务器上使用php5.5。现在我想使用pthreads。这是我的php配置:http://dd19010.kasserver.com/infophp.php55

实施此代码后......

 <?php

class AsyncOperation extends Thread
{
    public function __construct($threadId)
    {
        $this->threadId = $threadId;
    }

    public function run()
    {
        printf("T %s: Sleeping 3sec\n", $this->threadId);
        sleep(3);
        printf("T %s: Hello World\n", $this->threadId);
    }
}

$start = microtime(true);
for ($i = 1; $i <= 5; $i++) {
    $t[$i] = new AsyncOperation($i);
    $t[$i]->start();
}
echo microtime(true) - $start . "\n";
echo "end\n";

?>

......问题是这个错误:致命错误:Class&#39; Thread&#39; 中找不到。 我是否必须包含一些 include_once 或类似的内容才能使其正常工作? 我该怎么办?

6 个答案:

答案 0 :(得分:6)

您好我遇到了这个问题,并设法解决了这个问题。

首先,请考虑PHP的VC版本和VC版本的扩展。我在http://windows.php.net/downloads/pecl/releases/pthreads/附加了版本VC14的扩展名pthreads.dll,但我的PHP VC版本是VC11。寻找较低版本以匹配PHP的VC版本。

第二次,也许你错过了PHP页面的第3步。它声明您需要将pthreadVC2.dll复制到其他文件夹。这是完整的说明。

  1. 使用phpinfo()找出你的'PHP Extension Build'版本。您可以使用此功能 - http://localhost/?phpinfo=1

  2. 下载与您的php版本(32位或64位)和php扩展版本(当前使用的VC11)匹配的pthread。使用此链接进行下载 - http://windows.php.net/downloads/pecl/releases/pthreads/

  3. 提取拉链 -   将php_pthreads.dll移动到'bin \ php \ ext \'目录。   将pthreadVC2.dll移动到'bin \ php \'目录。   将pthreadVC2.dll移动到'bin \ apache \ bin'目录。   将pthreadVC2.dll移动到'C:\ windows \ system32'目录。

  4. 打开php \ php.ini并添加   延长= php_pthreads.dll

  5. 参考:https://secure.php.net/manual/en/pthreads.installation.php

答案 1 :(得分:5)

您的phpinfo显示您已禁用线程安全的php。你需要安装一个使用pthreads线程安全的php版本。这可能会或可能不会解决您当前的问题。

您可能还需要将pthreadsVC2.dll复制到Web服务的bin目录中。

/etc/php55/fpm/

您正在寻找包含php.ini的文件夹。

确保php.ini文件中添加了以下行:

extension=php_pthreads.dll

答案 2 :(得分:2)

1)创建一个php文件
的phpinfo(); - &GT;运行
示例:信息
PHP版本:5.6.31
编译器:MSVC11(Visual C ++ 2012)
架构:x64

2)访问网站:
http://windows.php.net/downloads/pecl/releases/pthreads/
例2.0.9文件
编译:VC11
架构:x64
php_pthreads-2.0.9- 5.6 -ts- vc11 - x64 .zip下载。

3)解压缩php_pthreads.dll和pthreadVC2.dll。
wamp \ bin \ php \ php 5.6 .31 \ ext \ - &gt; 复制php_pthreads.dll
wamp \ bin \ php \ php 5.6 .31 \ - &gt; 复制pthreadVC2.dll
wamp \ bin \ apache \ apache2.4.27 \ bin - &gt; 复制pthreadVC2.dll

4)现在编辑php.ini
wamp \ bin \ apache \ apache2.4.27 \ bin \ php.ini \ - &gt; 添加扩展名= php_pthreads.dll
wamp \ bin \ php \ php 5.6 .31 \ php.ini \ - &gt; 添加扩展名= php_pthreads.dll

5)现在重启Wamp

答案 3 :(得分:1)

我正在使用WAMP,发现 pthreadVC2.dll 应该转到Apache文件夹:

  

C:\瓦帕\ BIN \阿帕奇\ apache2.4.9 \ BIN

README.md中的内容不同,您不需要将其放在PHP文件夹中,但 php_pthreads.dll 仍应该转到:

  

C:\瓦帕\ BIN \ PHP中\ php5.5.12 \分机

在此之后,搜索此文件:

  

C:\瓦帕\ BIN \阿帕奇\ apache2.4.9 \ BIN \ php.ini中

对于;extension=php_pgsql.dll并在其后的新行中添加extension=php_pthreads.dll(是的,它是Apache文件夹中的bin \ php.ini,而不是PHP文件夹中的bin \ php.ini)。

退出WAMP并再次启动它。您现在应该在 PHP&gt;下的WAMP菜单中看到PHP扩展,新的 php_pthreads 扩展名。

答案 4 :(得分:0)

我认为你需要在php.ini文件中包含扩展名,因为我无法在配置中看到它。您可以看到每个库都有自己的部分,如MySQL,但线程没有。我没有使用线程,但这应该是一个很好的起点。

答案 5 :(得分:0)

默认情况下,PHP中没有实现线程,根据你的phpinfo,它似乎没有被加载。查看有关如何设置/配置模块的PHP manual