ホームページ > バックエンド開発 > PHPチュートリアル > PHP マルチスレッド クラスと使用例、php マルチスレッドの例_PHP チュートリアル

PHP マルチスレッド クラスと使用例、php マルチスレッドの例_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:12:17
オリジナル
914 人が閲覧しました

PHP マルチスレッド クラスと使用例、PHP マルチスレッドの例

この記事の例では、PHP マルチスレッド クラスとその使用法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

一般的に言えば、PHP のマルチスレッド機能は WEB サーバーを通じて実装できます。もちろん、マルチスレッドを深く理解している人なら誰でも、WEB サーバーによるマルチスレッドがマルチスレッドの効果の一部を模倣できるに過ぎないことを知っています。本当の意味でのマルチスレッドではありません。

しかし、何があっても、マルチスレッドと同様の機能が必要な場合は、このクラスを使用できます。

コードをコピーします コードは次のとおりです:
/**
* @title: PHP多線程类(スレッド)
* @バージョン: 1.0
*
* PHP多線程应用例:
* require_once 'thread.class.php';
* $thread = 新しいスレッド();
* $thread->addthread('action_log','a');
* $thread->addthread('action_log','b');
* $thread->addthread('action_log','c');
* $thread->runthread();
*
* 関数 action_log($info) {
* $log = 'log/' 。 microtime() 。 '。ログ';
* $txt = $info 。 「ルンルン」 。 '始まる ' 。 Date('h:i:s', time()) 。 (double)microtime() 。 "rn";
* $fp = fopen($log, 'w');
* fwrite($fp, $txt);
* fclose($fp);
* }
*/
クラススレッド {
var $hooks = 配列(); var $args = 配列(); 関数スレッド() {
}
関数 addthread($func)
{
$args = array_slice(func_get_args(), 1); $this->フック[] = $func; $this->args[] = $args; true を返します。 }
関数 runthread()
{
if(isset($_GET['flag']))
{
$flag = intval($_GET['flag']); }
if($flag || $flag === 0)
{
call_user_func_array($this->hooks[$flag], $this->args[$flag]); }
それ以外は
{
for($i = 0, $size = count($this->hooks); $i {
$fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']); if($fp)
{
$out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn"; $out .= "ホスト: {$_SERVER['HTTP_HOST']}rn"; $out .= "接続: 閉じるrnrn"; fputs($fp,$out); fclose($fp); }
}
}
}
}

使用方法、コードは次のとおりです:



コードをコピーします

コードは次のとおりです:

$thread = new thread(); $thread->addthread('func1','info1'); $thread->addthread('func2','info2'); $thread->addthread('func3','info3'); $thread->runthread();

説明:

addthread() はスレッド関数を追加するためのもので、最初のパラメータは関数名であり、後続のパラメータ (オプション) は指定された関数に渡されるパラメータです。
runthread() はスレッドを実行する関数です。

PHP の例:curl を使用してマルチスレッドの画像ダウンロードを実装する
実際、これは、curl を使用して PHP によって実装されたマルチスレッド クラスであり、このクラスを使用してマルチスレッド タスクを実行することもできます。コードは次のとおりです。 コードをコピーします
コードは次のとおりです:
クラスcurl_multi{
プライベート $url_list=array(); プライベート $curl_setopt=array(
'CURLOPT_RETURNTRANSFER' => 1,//結果は変数に返されます
'CURLOPT_HEADER' => 0,//HTTP ヘッダーを返す必要があるかどうか
'CURLOPT_NOBODY' => 0,//返されたコンテンツが必須かどうか
'CURLOPT_FOLLOWLOCATION' => 0,//自動追跡
'CURLOPT_TIMEOUT' => 6//タイムアウト時間 (秒)
); 関数 __construct($秒=30){
set_time_limit($秒); }
/*
* URLを設定
* @list 配列
*/
パブリック関数 setUrlList($list=array()){
$this->url_list=$list; }
/*
*パラメータを設定します
* @cutPot 配列
*/
パブリック関数 setOpt($cutPot){
。 }
/*
* 実行
* @return 配列
*/
パブリック関数execute(){
$mh=curl_multi_init(); foreach($this->url_list as $i=>$url){
$conn[$i]=curl_init($url); foreach($this->curl_setopt as $key =>$val){
curl_setopt($conn[$i],preg_replace('/(CURLOPT_w{1,})/ie','$0',$key),$val);                                                                                         curl_multi_add_handle($mh,$conn[$i]);                                                                          $active=false; する { $mrc=curl_multi_exec($mh,$active); }while($mrc == CURLM_CALL_MULTI_PERFORM);
while($active および $mrc == CURLM_OK){
If(curl_multi_select($mh) != -1){
する{ $mrc=curl_multi_exec($mh,$active); }while($mrc == CURLM_CALL_MULTI_PERFORM);                                                                                                                                                                  $res=array(); foreach($this->url_list as $i =>$url){
$res[$i]=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]); curl_multi_remove_handle($mh,$conn[$i]);// リソースを解放します
                                                                         curl_multi_close($mh); $res を返す; }
}

PHP は、マルチスレッドのダウンロード クラスの例を使用してリモート イメージをダウンロードします。コードは次のとおりです。


コードをコピーします

コードは次のとおりです:
$curl_mul=新しいcurl_multi(); $curl_mul->setUrlList(array('http://www.bkjia.com/img/logo.jpg','http://www.bkjia.com/img/logo.jpg','http:// www.bkjia.com/img/logo.jpg')); $a=$curl_mul->実行(); $i=1; foreach($a として $v){
$filename=$i.'.gif'; $fp2=@fopen($filename,'a'); fwrite($fp2,$v); fclose($fp2); $i++; }


この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。




http://www.bkjia.com/PHPjc/920982.html
www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/920982.html

技術記事 PHP マルチスレッド クラスと使用例、php マルチスレッドの例 この記事では、PHP マルチスレッド クラスと使用例について説明します。参考のためにみんなで共有してください。具体的な分析は以下の通りです: 一般的にはWEBサービスを通じて行うことができます...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート