4

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

コードを実行すると、次のエラーが発生します。

致命的なエラー:クラス'スレッド'が2行目のC:\ htdocs \ threads \ AsyncOperation.phpに見つかりませんコールスタック:0.0008 333464 1. {main}()C:\ htdocs \ threads \ AsyncOperation.php:0

4

3 に答える 3

12

ここには2つの問題があります。

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ビルドとpthreadを使用しましたが、プログラムは完全に機能しています。

注:上記の2つの解決策は、私の問題を解決しました。それでもエラーが発生する場合は、デバッガーで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をApachebinフォルダーにコピーしてください。

c:/apache_home/bin/pthreadVC2.dll
于 2013-09-06T19:09:27.407 に答える
-1

私は私のために働く解決策を見つけました:

最初に、特定のシステム(phpバージョン、64/32ビットシステム)に適切なパッケージをダウンロードしたことを確認する必要があります。

その後、関連するファイルを複数の場所に含める必要があります。説明されているすべての場所に配置することが非常に重要です。そうしないと機能しません。

また、上記のようにphp.iniファイルを変更する必要があります(php_pthreads.dllの場合のみ)。

私はこれをWindows764ビットシステムのWAMPで使用しています。

于 2015-12-15T12:38:26.593 に答える