2013-03-26 109 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