并行线程不能在PHP工作(pthread not working in php)

2019-07-23 11:51发布

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

Answer 1:

这里有两个问题:

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构建和程序可以正常使用。

注:以上两种解决方案解决了我的问题。 但是,如果你仍然得到错误,请检查您是否已经启用了XDebug或Zend的调试器。 禁用它们,然后再试一次。



Answer 2:

如果您已经安装在不同的文件夹,PHP,而不是C:/ PHP5,这是好事,pthreadVC2.dll到httpd.conf。 否则, 并行线程扩展模块无法找到它。

LoadFile "c:/not_default_php5/pthreadVC2.dll"

注:如果添加的LoadFile后,仍然阿帕奇无法找到DLL,只是删除的LoadFile线和复制DLL到Apache bin文件夹。

c:/apache_home/bin/pthreadVC2.dll


Answer 3:

我发现一个解决方案是为我工作:

你应该先确认你已经下载了合适的包为您的特定的系统(PHP版本,64/32位系统)。

在这之后,你应该包括在多个地方的相关文件。 把它们放在因为否则它是不会工作描述的每一个地方,这是非常重要的。

以上(仅适用于php_pthreads.dll)所描述的你也应该改变你的php.ini文件。

我已经在Windows 7 64位系统上使用此与WAMP。



文章来源: pthread not working in php