curl_multi_setopt は、PHP の cURL 拡張機能に含まれる関数で、cURL マルチハンドルのオプションを設定するために使用されます。この関数を使用することで、複数の cURL 転送を同時に管理する際の様々な動作を制御することができます。
関数のシグネチャ:
bool curl_multi_setopt ( resource $mh , int $option , mixed $value )
主な特徴と使用方法:
- 機能:
- cURL マルチハンドルの動作を制御するオプションを設定します。
- 個々の cURL ハンドルではなく、マルチハンドル全体に適用されるオプションを設定します。
- パラメータ:
- $mh: curl_multi_init() で作成された cURL マルチハンドル
- $option: 設定するオプション(CURLMOPT_* 定数を使用)
- $value: オプションに設定する値
- 戻り値:
- 成功時は true
- 失敗時は false
- 主なオプション:
- CURLMOPT_PIPELINING: HTTP/1.1 パイプラインまたは HTTP/2 マルチプレキシングを有効/無効にする
- CURLMOPT_MAXCONNECTS: キャッシュする同時接続の最大数
- CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE: チャンク転送のペナルティサイズ
- CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE: コンテンツ長のペナルティサイズ
- CURLMOPT_MAX_HOST_CONNECTIONS: ホストごとの最大同時接続数
- CURLMOPT_MAX_PIPELINE_LENGTH: パイプラインの最大長
- CURLMOPT_MAX_TOTAL_CONNECTIONS: 同時接続の最大総数
- 使用例:
$mh = curl_multi_init();
// HTTP/2 マルチプレキシングを有効にする
curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
// ホストごとの最大同時接続数を5に設定
curl_multi_setopt($mh, CURLMOPT_MAX_HOST_CONNECTIONS, 5);
// 同時接続の最大総数を10に設定
curl_multi_setopt($mh, CURLMOPT_MAX_TOTAL_CONNECTIONS, 10);
// ... ハンドルの追加と実行
- 注意点:
- 全てのオプションが全てのシステムやlibcurlのバージョンでサポートされているわけではありません。
- 一部のオプションは、libcurlがそれらをサポートするようにビルドされている場合にのみ利用可能です。
- メリット:
- パフォーマンスの最適化: 接続数やパイプラインの制御により、リソース使用を最適化できます。
- 柔軟な設定: 様々なシナリオに応じて cURL の動作を細かく調整できます。
curl_multi_setopt は、複数の cURL 転送を同時に管理する際に、その動作を細かく制御するための強力なツールです。特に大規模なウェブスクレイピングや並列API呼び出しなど、多数の HTTP リクエストを効率的に処理する必要がある場合に非常に有用です。