目次
phpのcurl_multiシリーズ関数の使用例
ホームページ バックエンド開発 PHPチュートリアル php_PHPチュートリアルにおけるcurl_multiシリーズ関数の使用例

php_PHPチュートリアルにおけるcurl_multiシリーズ関数の使用例

Jul 13, 2016 am 10:21 AM
curl multi php 使用 関数 シリーズ

phpのcurl_multiシリーズ関数の使用例

多くの人がphpマニュアルでは不明瞭なcurl_multiシリーズ関数に頭を悩ませていると思います。ドキュメントはほとんどなく、与えられた例は非常に単純なので理解できません。私もそれらから学びました。完全なアプリケーション例が記載されていない Web ページもたくさんあります。

  • curl_multi_add_handle
  • curl_multi_close
  • curl_multi_exec
  • curl_multi_getcontent
  • curl_multi_info_read
  • curl_multi_init
  • curl_multi_remove_handle
  • curl_multi_select

一般的に、これらの関数の使用を考えるとき、その目的は明らかに、複数の URL を 1 つずつリクエストするのではなく、同時にリクエストすることである必要があります。それ以外の場合は、curl_exec を自分でループして調整することをお勧めします。

手順は次のように要約されます:

ステップ 1:curl_multi_init を呼び出す
ステップ2: ループ内でcurl_multi_add_handleを呼び出す
この手順で注意する必要があるのは、curl_multi_add_handle の 2 番目のパラメータがcurl_init のサブハンドルであることです。
ステップ 3: 引き続き、curl_multi_exec の呼び出しを行います
ステップ4: 必要に応じてループ内でcurl_multi_getcontentを呼び出し、結果を取得します
ステップ 5: 単語ハンドルごとにcurl_multi_remove_handleを呼び出し、curl_closeを呼び出します
ステップ 6:curl_multi_close を呼び出す

これは、オンラインで見つかった簡単な例で、著者はこれをダーティ サンプルと呼んでいます (なぜダーティなのかについては後ほど説明します):

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

/*
これは、PHP 5.0.0RC1 CLI / FreeBSD 5.2.1 でテストされた、PHP からのカールマルチの簡単で汚い例です
*/

$connomains = array(
"http://www.baidu.com/"、
「http://www.google.com/」、
「http://www.jb51.net/」
);
$mh =curl_multi_init();

foreach ($connomains as $i => $url) {
$conn[$i]=curl_init($url);
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle ($mh,$conn[$i]);
}

do { $n=curl_multi_exec($mh,$active) } while ($active);

foreach ($connomains as $i => $url) {
$res[$i]=curl_multi_getcontent($conn[$i]);
curl_close($conn[$i]);
}

print_r($res);

全体の使用プロセスはほぼ次のとおりですが、この単純なコードには致命的な弱点があります。つまり、do ループで URL リクエスト全体が無限ループになり、CPU が 100% を占有してしまう可能性があります。

ここでそれを改善しましょう。ここではほとんどドキュメントのない関数curl_multi_selectを使用する必要がありますが、Cのcurlライブラリにはselectの命令がありますが、PHPのインターフェイスと使用法はCのものとは確かに異なります。

上記の do 段落を次のように変更します。

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

やります{
$mrc =curl_multi_exec($mh,$active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active および $mrc == CURLM_OK) {
If (curl_multi_select($mh) != -1) {
やります{
                                                                                                                                                                                                                                                                                                                                                                           ​                                                                                                                      }


$active は false になる前にすべての URL データが受信されるまで待機する必要があるため、ここでは、curl_multi_exec の戻り値を使用してデータが存在するかどうかを判断します。データが存在する場合は、curl_multi_exec が継続的に呼び出されます。新しいデータが到着するとすぐに起動して実行を続行できます。この場合の利点は、CPU を不必要に消費しないことです。

また: 時々遭遇するかもしれないいくつかの詳細があります:

各リクエストのタイムアウトを制御します。curl_multi_add_handle の前に、curl_setopt を通じて実行します。

コードは次のとおりです:
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

タイムアウトまたはその他のエラーがあるかどうかを判断するには、curl_multi_getcontent の前に、curl_error($conn[$i]);

を使用します。

http://www.bkjia.com/PHPjc/852812.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/852812.html技術記事 PHP のcurl_multi シリーズ関数の使用例 PHP マニュアルでは不明瞭なcurl_multi 関数群に頭を悩ませている人が多いと思います。これらの関数にはドキュメントがほとんどなく、示されている例は簡単なので理解できます。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期 Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期 Aug 29, 2024 pm 03:33 PM

Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles