はphpのSocketメソッドを通じてphpプログラムのマルチスレッドを実現します。 PHP 自体はマルチスレッドをサポートしていないので、PHP でマルチスレッドを実装するにはどうすればよいでしょうか?考えてみれば、WEB サーバー自体がマルチスレッドをサポートしています。各訪問者は WEB ページにアクセスするときに新しいスレッドを呼び出します。これにより、WEB サーバー独自のスレッドを使用して、PHP がマルチスレッドをサポートしていないという問題を解決できます。
以下は、fsockopen() を通じてソケット接続を確立し、fputs() を使用してメッセージを送信する PHP マルチスレッド クラス コードです:
$fp=fsockopen($_SERVER['HTTP_HOST'],80,&$) errno ,&$errstr,5);
if(!$fp){
echo "$errstr ($errno)
n";
}
fputs($fp,"GET $_SERVER[PHP_SELF] ? flag=1rn");
fclose($fp);
上記のコードは単なるスレッドの操作プロセスです。このような操作をさらにいくつか実行するのがマルチスレッドです。現在の PHP のいわゆるマルチスレッド プログラムはすべてこの方式に基づいています。
完全なスレッド クラス コードを以下に示します。
/**
@title:PHP マルチスレッド クラス (スレッド)
@version:1.0
@author:axgle
*/
クラススレッド {
var $count;
関数スレッド($count=1) {
$this->count=$count;
関数_submit() {
for($i=1;$i<=$this->count;$i++) $this->_thread();
return true
}
function _thread() {
$fp=fsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5);
if(!$fp){
echo "$errstr ($errno)
n";
}
fputs($fp,"GET $_SERVER[PHP_SELF]?flag=1rn");
fclose($fp);
}
function exec($func) {
isset($_GET[' flag'])?call_user_func($func):$this->_submit();
}
}
//アプリケーション例:
$th=new thread(10);//10 スレッド
$ th ->exec('demo');// カスタム関数を実行します
function Demon() {
fopen('data/'.microtime(),'w');
?>
http://codechina.spaces.live.com/blog/cns!bca6db10a924c24!575.entry