wampserver には、2 つの別々の場所に php.ini があることに気付きました。1 つは /wamp/bin/php/php5... ディレクトリにあり、もう 1 つは /wamp/bin/apache/apache.../bin ディレクトリにあります (「...」はバージョン番号を表します)。 . 2 つのファイルは同一である必要があります。なぜなら、wampserver の全体的な起動手順によって、明らかに両方とも異なる時間にロードされるからです。
(注: 私はこれを最近発見したばかりで、wampserver で凝ったことをするのは「時代遅れ」である可能性があります。おそらく、他の誰もが両方のファイルを長い間扱ってきたので、この単純なことがうまくいくかどうかはわかりません。あなたの問題を解決してください; 私はここに来て、マルチスレッド処理に関する情報を自分で探しました. :)
もう1つ。このページによると: www.php.net/manual/en/pthreads.requirements.php pthreads を機能させるには、PHP を "--enable-zts" でコンパイルする必要があります。wampserver の PHP 部分がそのようにコンパイルされたという証拠を見つけることができませんでした。
(数か月後) すぐにスレッド処理を行う必要はないと判断したので、実際に必要になるまで、他のことを続けました。WampServer にコンパイルされた PHP のバージョンは、"pthread" 拡張機能をサポートしていると言えますが、最初にいくつかのセットアップ作業が必要です。私が見た指示では、(ダウンロードして解凍した後に) いくつかの .dll ファイルを特定の場所に配置することが言及されていましたが、それは私にとってはうまくいきませんでした。それらを \Windows\System32 ディレクトリにコピーするとうまくいきました。(それらを \apache...\bin ディレクトリに置くこともできます。そこには他の php .dll ファイルがいくつかあります。)
その後、あなたがしたのと同じように、別のスレッドで実際に何かを行うために、「スレッド」クラスを拡張する「クラス」を定義する必要があります。Thread クラスの「run()」関数は「抽象」であり、拡張クラスで実際の関数として「実現」する必要があります。次に、「new」演算子は、実際に使用するために、その指定されたクラスのオブジェクトである「インスタンス」を作成できます。必要なクラスは次のとおりです。
//Purpose: Use another thread to run the code in another php file, after a delay
class xT extends Thread
{ var $fil, $tim;
function savWhatWhen($f="", $t=0)
{ $this->fil = $f; //save What, file to process
$this->tim = $t; //save When, delay before processing file
return;
}
function run()
{ ini_set('max_execution_time', 600); //600 seconds = 10 minutes
sleep($this->tim); //do a delay; beware of max-exec-time!
include($this->fil); //load file-to-process, and process it
return;
} }
その「savWhatWhen()」関数は、基本的な Thread クラスのこの拡張用に特別に作成されました。そのクラスを使用するためのコードを次に示します。
$TH = new xT(); //prepare a separate Thread
$TH->savWhatWhen("d:/wamp/myscripts/test.php", 45);//file-name and delay time
$TH->start(); //after delay, process file
//the code that does this can terminate, while OTHER thread is doing a delay
このコードをコピーする場合は、php.ini の「open_basedir」設定で、指定したファイルへのアクセスが許可されていることを確認する必要があることに注意してください。
さらに数か月後: 多くの作業が行われているため、pthread オブジェクトの使用に多くの時間を費やしていません。pthread を実際に自分が望んでいた方法で使用できるかどうか疑問に思うほどの特異性に遭遇しました。1. 最初の php ファイルが AJAX によって呼び出され、何かを実行します。2. Web サーバー上の PHP プロセッサがそれを行います。3. 様々なデータがブラウザにエコーされることになっています。4. 最初の php ファイルは別のスレッドの作成を呼び出し、終了します。5. ブラウザはエコーされたデータをまだ受信していません! 6. Web サーバー上の PHP プロセッサは、2 番目のスレッドに委譲された作業を実行します。7. 2 番目のスレッドが終了すると、ブラウザはエコー データを受け取ります。
この記事を書いている時点で、私は何かを見逃していると思っています。おそらく、最初のスレッドが終了したときに、強力な「フラッシュ」処理を実行する必要があります。これにより、ブラウザーがエコーされたデータを受信し、サーバー上の PHP プロセッサが処理を行っている間にユーザーが処理を実行できるようになります。