Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】CURLINFO_LOCAL_PORT定数の使い方

CURLINFO_LOCAL_PORT定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

CURLINFO_LOCAL_PORT定数は、PHPのcURL拡張機能において、ネットワーク転送に関する情報を取得するために用いられる定数の一つです。この定数は、curl_getinfo()関数と組み合わせて使用することで、直前のcURL転送でクライアント側が実際に通信に使用したローカルポート番号を取得する役割を持っています。

具体的には、ウェブサイトへのHTTPリクエストやファイル転送など、cURLが行うあらゆるネットワーク通信において、その通信が発信元となるクライアントのどのポートから行われたかという情報を提供します。例えば、あるWebアプリケーションが外部のAPIサーバーに接続する際、この定数を利用することで、その接続がクライアントマシンのどのポート番号を使用して確立されたかを確認できます。

この情報は、ネットワーク接続の問題をデバッグする際に非常に有用です。例えば、ファイアウォールの設定ミスやポートの競合などにより、意図しないポートが使用されている場合や、接続が確立されない場合に、通信の具体的な経路や状態を特定する手助けとなります。システム管理者や開発者が、サーバー間の通信状況を詳細に把握し、トラブルシューティングを行う上で欠かせない情報を提供する定数です。

構文(syntax)

1$localPortOption = CURLINFO_LOCAL_PORT;

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

ローカル側で接続に使用されたポート番号を整数で返します。

サンプルコード

PHP curl_infoでローカルポートを取得する

1<?php
2
3/**
4 * 指定されたURLに対してcURLリクエストを実行し、
5 * 通信に使用されたローカルポート番号を取得します。
6 *
7 * @param string $url リクエストを送信するURL。
8 * @return int|false ローカルポート番号、またはエラーの場合はfalse。
9 */
10function get_curl_local_port_info(string $url)
11{
12    // cURLセッションを初期化します。
13    $ch = curl_init();
14
15    // cURLオプションを設定します。
16    // リクエスト先のURLを指定します。
17    curl_setopt($ch, CURLOPT_URL, $url);
18    // サーバーからの応答を文字列として取得するように設定します。
19    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
20    // HTTPリダイレクトを自動的に追跡するように設定します。
21    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
22    // タイムアウトを10秒に設定します。
23    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
24
25    // cURLセッションを実行し、サーバーからの応答を取得します。
26    $response = curl_exec($ch);
27
28    // cURL実行中にエラーが発生したかチェックします。
29    if (curl_errno($ch)) {
30        error_log('cURLエラー: ' . curl_error($ch));
31        curl_close($ch);
32        return false;
33    }
34
35    // CURLINFO_LOCAL_PORT 定数を使用して、通信に使用されたローカルポート番号を取得します。
36    $localPort = curl_getinfo($ch, CURLINFO_LOCAL_PORT);
37
38    // cURLセッションを閉じます。
39    curl_close($ch);
40
41    // 取得したローカルポート番号を返します。
42    return $localPort;
43}
44
45// 関数の使用例:
46// テスト用のURL (実際にはアクセス可能なURLを指定してください)
47$targetUrl = 'http://example.com';
48
49echo "ターゲットURL: " . $targetUrl . PHP_EOL;
50
51// 指定したURLへのcURLリクエストで使われたローカルポート情報を取得します。
52$port = get_curl_local_port_info($targetUrl);
53
54if ($port !== false) {
55    echo "cURLリクエストに使用されたローカルポート番号: " . $port . PHP_EOL;
56} else {
57    echo "ローカルポート情報の取得に失敗しました。" . PHP_EOL;
58}
59
60?>

このPHPサンプルコードは、cURLというツールを使って特定のURLにHTTPリクエストを送信し、その通信に使用された「ローカルポート番号」を取得する方法を示しています。ローカルポート番号とは、リクエストを送信するあなたのコンピューターが一時的に使用する通信の窓口番号のことです。

get_curl_local_port_info関数では、まずcurl_init()でcURLセッションを初期化し、curl_setopt()でアクセス先のURLやデータの取得方法などの設定を行います。設定後、curl_exec()で実際にリクエストを実行し、サーバーからの応答を受け取ります。通信が成功したかを確認し、エラーがなければcurl_getinfo()関数を使用します。このcurl_getinfo()の第二引数にCURLINFO_LOCAL_PORT定数を指定することで、確立された通信が使用したローカルポート番号を整数として取得できるのです。最後にcurl_close()でセッションを閉じ、取得したポート番号を返します。

この関数の引数$urlには、アクセスしたいウェブサイトのURLを文字列で渡します。戻り値は、通信に使用されたローカルポート番号を整数(int)で返しますが、もし通信に失敗した場合はfalseが返されます。システムエンジニアにとって、ネットワーク通信の詳細を理解する上で、このような情報の取得はトラブルシューティングやセキュリティ分析に役立ちます。

このサンプルコードは、cURL通信に使用されたクライアント側のローカルポート番号を取得する方法を示しています。初心者が特に注意すべき点は、CURLINFO_LOCAL_PORTが取得するのは、アクセス先のサーバーポートではなく、プログラムを実行している自身の環境(クライアント)が通信に利用した一時的なポート番号であるという点です。ネットワーク通信処理ではエラーが頻繁に発生するため、curl_errno()curl_error()を用いた適切なエラーハンドリングが非常に重要です。また、curl_init()で確保したリソースは、処理の終了時に必ずcurl_close()で解放し、リソースリークを防ぐようにしてください。関数の戻り値がエラー時にfalseとなるため、その値のチェックも忘れずに行う必要があります。テスト実行時は、実際にアクセス可能なURLを使用するようにしてください。

PHP cURL: HTTPコードとローカルポートを取得する

1<?php
2
3/**
4 * 指定されたURLへのHTTPリクエストを実行し、その結果からHTTPステータスコードと
5 * ローカルポート番号などのCURL情報を取得して表示します。
6 *
7 * システムエンジニアを目指す初心者向けに、CURLライブラリの基本的な使い方と
8 * 特定の情報を取得する方法を示します。
9 *
10 * @param string $url リクエストを送信するターゲットURL
11 * @return void
12 */
13function getCurlInformation(string $url): void
14{
15    // 1. cURL セッションを初期化します。
16    // curl_init() は新しい cURL セッションを初期化し、ハンドルを返します。
17    $ch = curl_init();
18
19    // 初期化に失敗した場合はエラーメッセージを表示して終了します。
20    if ($ch === false) {
21        echo "エラー: cURL セッションの初期化に失敗しました。\n";
22        return;
23    }
24
25    // 2. cURL オプションを設定します。
26    // CURLOPT_URL: リクエストの送信先URLを設定します。
27    curl_setopt($ch, CURLOPT_URL, $url);
28    // CURLOPT_RETURNTRANSFER: curl_exec() の戻り値を、取得したデータを含む文字列にします。
29    // これを設定しない場合、データは直接出力されます。
30    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
31    // CURLOPT_HEADER: ヘッダー情報もレスポンスに含めるかどうかを設定します。
32    // 今回はボディだけあれば十分なのでfalse。
33    curl_setopt($ch, CURLOPT_HEADER, false);
34    // CURLOPT_FOLLOWLOCATION: HTTPヘッダーの"Location:"フィールドを再帰的にフォローします。
35    // リダイレクトに対応するために設定します。
36    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
37    // CURLOPT_SSL_VERIFYPEER: SSL証明書の検証を行うかどうかを設定します。
38    // 本番環境ではtrueにすべきですが、開発やテストで一時的にfalseにすることも。
39    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
40
41    // 3. cURL リクエストを実行します。
42    // curl_exec() は、設定されたオプションに基づいて cURL セッションを実行します。
43    $response_body = curl_exec($ch);
44
45    // リクエストの実行に失敗した場合、エラーメッセージを表示して終了します。
46    if ($response_body === false) {
47        echo "エラー: cURL リクエストの実行に失敗しました。\n";
48        echo "詳細: " . curl_error($ch) . "\n"; // 具体的なエラーメッセージを表示
49        curl_close($ch); // セッションを閉じます
50        return;
51    }
52
53    // 4. cURL セッションから情報を取得します。
54    // curl_getinfo() を使用して、実行後の様々な情報を取得できます。
55
56    // キーワードに関連するCURLINFO_HTTP_CODEを取得します。
57    // これは、リクエストに対する最後のHTTPステータスコード (例: 200 OK, 404 Not Found) です。
58    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
59
60    // リファレンス情報に関連するCURLINFO_LOCAL_PORTを取得します。
61    // これは、接続に使用されたローカルIPアドレスのポート番号です。
62    $local_port = curl_getinfo($ch, CURLINFO_LOCAL_PORT);
63
64    // その他の役立つ情報も取得できます (例として)
65    $total_time = curl_getinfo($ch, CURLINFO_TOTAL_TIME); // リクエストにかかった総時間
66    $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); // レスポンスのContent-Type
67
68    // 取得した情報を表示します。
69    echo "--- cURL リクエスト結果 --- \n";
70    echo "ターゲットURL: " . $url . "\n";
71    echo "HTTP ステータスコード (CURLINFO_HTTP_CODE): " . $http_code . "\n";
72    echo "使用されたローカルポート番号 (CURLINFO_LOCAL_PORT): " . $local_port . "\n";
73    echo "リクエスト総時間: " . round($total_time, 2) . "秒\n";
74    echo "Content-Type: " . ($content_type ?: '不明') . "\n";
75    echo "-------------------------- \n";
76
77    // レスポンスボディは長い場合があるので、一部だけ表示するか、表示しないことも可能です。
78    // echo "\nレスポンスボディの一部:\n";
79    // echo substr($response_body, 0, 500) . (strlen($response_body) > 500 ? '...' : '') . "\n";
80
81    // 5. cURL セッションを閉じます。
82    // リソースを解放するために、必ずセッションを閉じます。
83    curl_close($ch);
84}
85
86// 実行例: Googleのウェブサイトを対象に情報を取得します。
87// 実際のウェブサイトを使用することで、動作を確認できます。
88$target_url = "https://www.google.com";
89getCurlInformation($target_url);
90
91echo "\n別の実行例: 存在しないURLへのリクエスト(エラーハンドリングの確認)\n";
92$invalid_url = "https://this-is-a-non-existent-domain-12345.com";
93getCurlInformation($invalid_url);
94
95?>

このサンプルコードは、PHPのcURLライブラリを用いてHTTPリクエストを実行し、その結果から特定の情報を取得して表示するものです。getCurlInformation関数は、引数$urlで指定されたWebサイトへリクエストを送信し、情報を直接画面に出力するため、戻り値はvoidです。

まず、curl_init()でcURLセッションを初期化し、curl_setopt()でターゲットURLやレスポンスの扱いなどの各種オプションを設定します。例えば、CURLOPT_RETURNTRANSFERでレスポンスを文字列として取得するよう設定しています。

次に、curl_exec()で実際にリクエストを実行します。リクエストの成否にかかわらず、curl_getinfo()関数を使うことで、様々な詳細情報を取得できます。 このコードでは、キーワードにあるCURLINFO_HTTP_CODEを使用して、リクエストに対するHTTPステータスコード(例: 200 OK)を取得しています。また、リファレンス情報にあるCURLINFO_LOCAL_PORTも取得しており、これは接続に使用されたローカルIPアドレスのポート番号を整数(int)で返します。

最後に、curl_close()でセッションを確実に閉じ、使用したリソースを解放します。エラー発生時の処理も含まれており、システムエンジニアを目指す初心者がcURLの基本的な操作を学ぶのに役立つでしょう。

このサンプルコードでは、cURLセッションの初期化(curl_init)から実行、情報取得(curl_getinfo)、セッション終了(curl_close)までの一連の流れを理解することが重要です。特に、curl_init()curl_exec()の戻り値を常にチェックし、エラー発生時は適切なエラーハンドリングとcurl_close()によるリソース解放を必ず行ってください。CURLINFO_LOCAL_PORTはご自身のプログラムが通信に利用したローカル側のポート番号を示す点にご注意ください。CURLINFO_HTTP_CODEはHTTP通信の成否を示す重要なステータスコードですので、その意味を理解することが不可欠です。また、CURLOPT_SSL_VERIFYPEERfalseに設定するとセキュリティリスクが高まるため、本番環境では厳重な注意が必要です。

関連コンテンツ

関連IT用語

関連プログラミング言語