[PHP]curl_multi_init() 関数:並列リクエストの世界への扉を開く

PHP

今回は、並列処理の世界への入り口となる curl_multi_init() 関数について詳しく解説していきます。

curl_multi_init() とは?

curl_multi_init() 関数は、cURL マルチハンドルセッションを初期化するための PHP 関数です。この関数を使用することで、複数の cURL 転送を並列に実行するための準備が整います。

基本的な使い方

curl_multi_init() 関数の基本的な構文は非常にシンプルです:

resource curl_multi_init ( void )

この関数は引数を取らず、新しい cURL マルチハンドルリソースを返します。

使用例

実際に curl_multi_init() を使用する例を見てみましょう:

// cURL マルチハンドルを初期化
$mh = curl_multi_init();

// 複数の URL を設定
$urls = [
    'https://api.example.com/data1',
    'https://api.example.com/data2',
    'https://api.example.com/data3'
];

$channels = [];

// 各 URL に対して cURL ハンドルを作成し、マルチハンドルに追加
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $channels[] = $ch;
}

// リクエストを実行
$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

// 結果を取得
foreach ($channels as $ch) {
    $result = curl_multi_getcontent($ch);
    echo "結果: " . $result . "\n";
    curl_multi_remove_handle($mh, $ch);
}

// マルチハンドルを閉じる
curl_multi_close($mh);

curl_multi_init() の特徴

  1. リソース作成:新しい cURL マルチハンドルリソースを作成します。
  2. 並列処理の基盤:複数の cURL ハンドルを管理するための基盤を提供します。
  3. メモリ効率:個別の cURL セッションを作成するよりも効率的です。

プロのテクニック

  1. エラーチェック:
$mh = curl_multi_init();
if ($mh === false) {
    die('cURL マルチハンドルの初期化に失敗しました');
}

リソース管理:

function create_multi_handle() {
    static $mh = null;
    if ($mh === null) {
        $mh = curl_multi_init();
    }
    return $mh;
}

オプション設定:

curl_multi_setopt($mh, CURLMOPT_MAXCONNECTS, 10);

注意点

  • リソース解放:使用後は必ず curl_multi_close() でリソースを解放しましょう。
  • 再利用:一度閉じたマルチハンドルは再利用できません。新しい処理には新しいマルチハンドルを作成してください。
  • PHP バージョン:PHP 5.5.0 以降で利用可能です。

まとめ

curl_multi_init() 関数は、PHP で並列 HTTP リクエストを実行するための第一歩です。この関数を使いこなすことで、複数のリクエストを効率的に処理し、アプリケーションのパフォーマンスを大幅に向上させることができます。

並列リクエストの世界への扉を開き、高速で効率的な PHP アプリケーションの新たな可能性を探求しましょう!

タイトルとURLをコピーしました