2013-03-26 72 views
4
不工作

我从http://windows.php.net/downloads/pecl/releases/pthreads/下载的PHP Pthreads dll文件,并使它在php.ini如下:并行线程在PHP

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(); 

当我执行代码我得到以下错误:

Fatal error: Class 'Thread' not found in C:\htdocs\threads\AsyncOperation.php on line 2 Call Stack: 0.0008 333464 1. {main}() C:\htdocs\threads\AsyncOperation.php:0

回答

12

有两个问题她e:

1)首先必须正确查找dll文件位置。 dll文件应该放在如下:

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

在php.ini文件

extension=php_pthreads.dll 

2)必须寻找PHP和DLL文件的版本只php_pthreads.dll应该启用。

我的PHP是VC6 build和使用的DLL文件是VC9。这就是为什么模块没有安装。我通过使用“php -m”来了解这种差异。

由于没有VC6版本的dll文件,我使用了VC9版本的PHP并使用pthreads,程序运行完美。

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

+3

+1为解决问题后不放弃问题:)。 – 2013-03-27 09:09:34

+0

@Radu Murzea:谢谢。 – Cindrella 2013-03-27 09:17:21

+0

@cindrella好的。你拯救了我的一天。由于VC PHP扩展的构建不匹配,我一直无法工作得到最近4天的PHP线程工作。非常感谢您指出。 – webblover 2014-03-05 05:29:22

4

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

LoadFile "c:/not_default_php5/pthreadVC2.dll" 

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

c:/apache_home/bin/pthreadVC2.dll 
-1

我发现a solution为我工作:

你应该先确认您已经下载正确的软件包针对具体系统(PHP版本,64/32位系统)。

之后,你应该在多个地方包括相关的文件。把它们放在每个地方都是非常重要的,否则它就无法工作。

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

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

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/10569560) – sheilak 2015-12-15 13:08:55

+0

你是对的。在上面。 – Mapisto 2015-12-15 13:23:09