【PHP8.x】CURLINFO_PRIMARY_PORT定数の使い方
CURLINFO_PRIMARY_PORT定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
CURLINFO_PRIMARY_PORT定数は、PHPのcURL拡張機能において、実行されたcURL転送に関する詳細な情報を取得する際に、特に接続先のプライマリポート番号を表す定数です。この定数は、cURLセッションの情報を取得するためのcurl_getinfo()関数と組み合わせて使用されます。
curl_getinfo()関数は、すでに実行されたcURLセッションに関する様々な情報を取得するために利用される重要な関数です。その際、どの種類の情報を取得したいかを指定するために、CURLINFO_PRIMARY_PORTのような定数を使用します。具体的には、curl_getinfo()関数の第二引数にCURLINFO_PRIMARY_PORTを渡すことで、PHPはcURLが実際に接続したリモートサーバーのポート番号を整数値として返します。
例えば、Webサーバーの標準ポートである80番やHTTPSの443番など、cURLが接続に成功したエンドポイントのポート番号をプログラム内で確認したい場合にこの定数が役立ちます。ネットワーク接続のデバッグ、ログ記録、あるいは接続先の詳細情報の確認といったシナリオで非常に有用です。この定数を利用することで、システムエンジニアはcURLセッションの挙動をより詳細に把握し、問題解決やシステム監視に活用することができます。
構文(syntax)
1<?php 2$ch = curl_init("http://www.example.com"); 3curl_exec($ch); 4$primaryPort = curl_getinfo($ch, CURLINFO_PRIMARY_PORT); 5curl_close($ch); 6?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
この定数は、接続されたプライマリポートの番号を整数型で返します。
サンプルコード
PHP curl_infoでプライマリポートを取得する
1<?php 2 3/** 4 * 指定されたURLへのCURL接続で使用されたプライマリポート番号を取得します。 5 * 6 * @param string $url 情報を取得したいURL。 7 * @return int|null プライマリポート番号。取得に失敗した場合はnull。 8 */ 9function getPrimaryPortInfo(string $url): ?int 10{ 11 // CURLセッションを初期化 12 $ch = curl_init(); 13 14 if ($ch === false) { 15 echo "CURLセッションの初期化に失敗しました。\n"; 16 return null; 17 } 18 19 // CURLオプションを設定 20 // 接続先URL 21 curl_setopt($ch, CURLOPT_URL, $url); 22 // 戻り値として転送内容を文字列で取得する(画面出力しない) 23 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 24 // タイムアウトを設定(秒) 25 curl_setopt($ch, CURLOPT_TIMEOUT, 10); 26 // SSL証明書の検証をスキップ (本番環境では非推奨) 27 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 28 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 29 30 // CURLセッションを実行 31 $response = curl_exec($ch); 32 33 // エラーチェック 34 if (curl_errno($ch)) { 35 echo 'CURLエラー: ' . curl_error($ch) . "\n"; 36 curl_close($ch); 37 return null; 38 } 39 40 // CURLINFO_PRIMARY_PORT定数を使用して、プライマリポート番号を取得 41 $primaryPort = curl_getinfo($ch, CURLINFO_PRIMARY_PORT); 42 43 // CURLセッションを終了 44 curl_close($ch); 45 46 return $primaryPort; 47} 48 49// サンプル使用例 50$targetUrl = 'https://www.example.com'; 51$port = getPrimaryPortInfo($targetUrl); 52 53if ($port !== null) { 54 echo "URL: " . $targetUrl . "\n"; 55 echo "プライマリポート番号: " . $port . "\n"; 56} else { 57 echo "プライマリポート番号の取得に失敗しました。\n"; 58} 59 60$targetUrl2 = 'http://localhost'; // ローカルホストのWebサーバーがポート80で動作している場合 61$port2 = getPrimaryPortInfo($targetUrl2); 62 63if ($port2 !== null) { 64 echo "URL: " . $targetUrl2 . "\n"; 65 echo "プライマリポート番号: " . $port2 . "\n"; 66} else { 67 echo "プライマリポート番号の取得に失敗しました。\n"; 68} 69 70?>
このPHPコードは、指定されたURLへHTTP/HTTPS接続を行う際に実際に使用された「プライマリポート番号」を取得する方法を示すものです。CURLINFO_PRIMARY_PORTは、PHPのCURL拡張機能で使用される定数で、CURLセッションが通信に利用したポート番号(例えばHTTP接続では80番、HTTPS接続では443番など)を取得する際にcurl_getinfo()関数と組み合わせて利用されます。
コードではまずcurl_init()でCURLセッションを開始し、curl_setopt()関数で接続先URLやデータ取得方法、タイムアウトなどの詳細な設定を行います。getPrimaryPortInfo関数は、接続先URLを表す文字列を引数$urlとして受け取ります。設定後、curl_exec()で実際に通信を実行し、問題がなければcurl_getinfo()にCURLINFO_PRIMARY_PORT定数を渡すことで、そのURLとの通信に用いられたポート番号を整数値として取得します。最後にcurl_close()でセッションを終了します。この関数の戻り値は、成功した場合はポート番号(int)、失敗した場合はnullとなります。通信エラーが発生した場合に備えて、エラーチェックとメッセージ出力も実装されています。
CURLINFO_PRIMARY_PORTは、CURL接続で実際に通信に使われた「プライマリ」ポート番号を取得する際に利用します。CURLOPT_RETURNTRANSFERは、CURLの実行結果を画面に出力せず、変数として取得するために必須の設定です。この設定がないと結果が直接出力されてしまうので注意が必要です。
サンプルコード内のSSL証明書検証を無効にする設定(CURLOPT_SSL_VERIFYPEER、CURLOPT_SSL_VERIFYHOST)は、セキュリティ上のリスクを伴うため、本番環境では絶対に避け、常に有効にするか、適切な証明書設定を行ってください。開発時の一時的な使用にとどめるべきです。
また、CURLセッションの初期化や実行後には、curl_init()の戻り値やcurl_errno()で必ずエラーチェックを行い、問題が発生した場合は適切なエラー処理を実装することが重要です。最後に、CURLセッションが終了したら、curl_close()を呼び出して使用したリソースを確実に解放するようにしてください。これにより、メモリリークや不要な接続残りを防ぎ、システムの安定稼働に繋がります。
PHP cURLでプライマリポートを取得する
1<?php 2 3/** 4 * 指定されたURLにcURLリクエストを行い、ターゲットのプライマリポート番号を取得して表示します。 5 * システムエンジニアを目指す初心者向けに、cURLの基本的な使い方と 6 * CURLINFO_PRIMARY_PORT定数の利用例を示します。 7 * 8 * このコードを実行するには、PHPにcURL拡張がインストールされ、有効になっている必要があります。 9 * (cURL拡張が有効かどうかは、`phpinfo()` 関数で確認できます。) 10 * 11 * @param string $url リクエストを行うターゲットURL (例: 'http://example.com') 12 * @return void 13 */ 14function getPrimaryPortInfo(string $url): void 15{ 16 // 1. cURLセッションを初期化します。 17 // これは、cURL操作のハンドル(識別子)を作成する最初のステップです。 18 $ch = curl_init(); 19 20 // cURLが初期化に失敗した場合のチェック 21 if ($ch === false) { 22 echo "cURLセッションの初期化に失敗しました。" . PHP_EOL; 23 return; 24 } 25 26 // 2. cURLオプションを設定します。 27 // CURLOPT_URL: リクエストを送信するURLを指定します。 28 // CURLOPT_RETURNTRANSFER: trueに設定すると、curl_exec()が結果を文字列として返すようになります。 29 // falseの場合、結果は直接出力されます。 30 curl_setopt($ch, CURLOPT_URL, $url); 31 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 32 33 // 3. cURLリクエストを実行し、サーバーからのレスポンスを取得します。 34 $response = curl_exec($ch); 35 36 // 4. cURLリクエストの実行中にエラーが発生したか確認します。 37 if (curl_errno($ch)) { 38 // エラーが発生した場合、エラーメッセージを表示します。 39 echo "cURL エラー (" . curl_errno($ch) . "): " . curl_error($ch) . PHP_EOL; 40 } else { 41 // 5. curl_getinfo()関数とCURLINFO_PRIMARY_PORT定数を使用して、 42 // リクエストのターゲットポート番号を取得します。 43 // CURLINFO_PRIMARY_PORTは、整数型のポート番号を返します。 44 $primaryPort = curl_getinfo($ch, CURLINFO_PRIMARY_PORT); 45 46 // 取得した情報を表示します。 47 echo "ターゲットURL: {$url}" . PHP_EOL; 48 echo "取得されたプライマリポート: {$primaryPort}" . PHP_EOL; 49 50 // レスポンスの最初の数文字を表示して、正常に接続できたことを示します (任意) 51 // echo "レスポンスの冒頭: " . substr((string)$response, 0, 100) . "..." . PHP_EOL; 52 } 53 54 // 6. cURLセッションを閉じます。 55 // これにより、使用されたリソースが解放されます。 56 curl_close($ch); 57} 58 59// サンプル使用例: 60// getPrimaryPortInfo関数を呼び出し、異なるURLでプライマリポート情報を取得します。 61// HTTPの場合、通常は80番ポートが使用されます。 62getPrimaryPortInfo('http://example.com'); 63 64echo PHP_EOL; // 出力を見やすくするための改行 65 66// HTTPSの場合、通常は443番ポートが使用されます。 67getPrimaryPortInfo('https://www.google.com'); 68 69echo PHP_EOL; // 出力を見やすくするための改行 70 71// ローカル環境で特定のポートを使用しているウェブサーバーがある場合、その情報を取得できます。 72// 例: getPrimaryPortInfo('http://localhost:8080'); // ポート8080で実行中のウェブサーバー
このPHPコードは、指定されたURLに対してcURLリクエストを行い、その接続に使用されたターゲットサーバーのプライマリポート番号を取得・表示するものです。システムエンジニアを目指す初心者の方に、PHPでのcURLの基本的な使い方と、接続情報の取得方法を理解していただくことを目的としています。
コードを実行するには、PHPにcURL拡張機能がインストールされ、有効になっている必要があります。これはphpinfo()関数を実行することで確認できます。
まず、curl_init()関数でcURLセッションを初期化し、リクエストのハンドルを取得します。次に、curl_setopt()関数を用いて、リクエストを送信するURLや、実行結果を文字列として返す設定などを行います。その後、curl_exec()で実際にHTTPリクエストを実行します。
リクエストの実行後、curl_getinfo()関数とCURLINFO_PRIMARY_PORT定数を組み合わせることで、通信に利用されたプライマリポート番号を取得します。CURLINFO_PRIMARY_PORTは、この情報を示す整数型のポート番号を返します。取得したポート番号は画面に表示され、最後にcurl_close()でcURLセッションのリソースを解放します。
このコードのgetPrimaryPortInfo関数は、引数としてリクエスト対象のURL(文字列型)を受け取ります。戻り値はvoidで、処理結果を直接出力する形式です。これにより、HTTP通信であれば80番ポート、HTTPS通信であれば443番ポートといった、接続先のポート情報が確認できます。
このサンプルコードを実行するには、まずPHPにcURL拡張がインストールされ有効になっていることが必須です。phpinfo()関数で確認できますので、事前にご確認ください。cURL操作ではネットワーク通信を伴うため、curl_errno()やcurl_error()を用いてエラーを適切に処理し、原因を特定する習慣をつけましょう。また、cURLセッション開始後は、必ずcurl_close()でリソースを解放することが重要です。CURLINFO_PRIMARY_PORTは、リクエスト先のプライマリポート番号を整数で取得できる定数です。HTTP通信では通常80番、HTTPSでは443番ポートが使われることを覚えておくと理解が深まります。