4

我已经从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();

当我执行代码时,出现以下错误:

致命错误:在第 2 行的 C:\htdocs\threads\AsyncOperation.php 中找不到类“线程”调用堆栈:0.0008 333464 1. {main}() C:\htdocs\threads\AsyncOperation.php:0

4

3 回答 3

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

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

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

于 2013-03-27T09:07:56.830 回答
4

如果您将 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
于 2013-09-06T19:09:27.407 回答
-1

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

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

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

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

我一直在 Windows 7 64 位系统上将它与 WAMP 一起使用。

于 2015-12-15T12:38:26.593 回答