【PHP8.x】CURLINFO_REDIRECT_TIME_T定数の使い方
CURLINFO_REDIRECT_TIME_T定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
CURLINFO_REDIRECT_TIME_T定数は、PHPのCURL拡張機能において、HTTPリクエストが実行された際に発生したリダイレクト処理にかかった時間に関する情報を取得するために使用する定数です。具体的には、Webサイトにアクセスした際、サーバーの指示によって自動的に別のURLへ転送される「リダイレクト」と呼ばれる処理が行われることがあります。この定数をcurl_getinfo()関数とともに使用することで、そのリダイレクト処理が開始されてから完了するまでの期間を、秒単位の整数値で正確に把握できます。
この情報は、Webアプリケーションのパフォーマンス分析や、ネットワーク通信の効率を評価する際に非常に有用です。例えば、Webサイトの応答速度が遅いと感じた場合、リダイレクトにどれくらいの時間がかかっているかを確認することで、改善すべきポイントを特定できます。従来のCURLINFO_REDIRECT_TIME定数が時間を浮動小数点数(秒未満の詳細な値を含む)で提供するのに対し、CURLINFO_REDIRECT_TIME_T定数は、よりシンプルでプログラムで扱いやすい秒単位の整数値として時間を提供します。これにより、複雑な小数点以下の処理を考慮することなく、直感的にリダイレクト時間を扱えるメリットがあります。
構文(syntax)
1<?php 2$optionValue = CURLINFO_REDIRECT_TIME_T; 3?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP cURLでHTTPコードとリダイレクト時間を取得する
1<?php 2 3/** 4 * 指定されたURLへのHTTPリクエストを実行し、 5 * HTTPステータスコードとリダイレクトにかかった時間を取得して表示します。 6 * 7 * システムエンジニアを目指す初心者向けに、cURLを使った基本的なWebリクエストと 8 * その結果から情報を取得する方法を示します。 9 * 10 * @param string $url 情報を取得するターゲットURL 11 */ 12function getUrlResponseAndRedirectInfo(string $url): void 13{ 14 // cURLセッションを初期化します。 15 // これがWebリクエストを行うための準備ステップです。 16 $ch = curl_init(); 17 18 // cURLオプションを設定します。 19 // どのようなリクエストを行うか、結果をどう扱うかをここで指示します。 20 curl_setopt_array($ch, [ 21 CURLOPT_URL => $url, // リクエスト先のURL 22 CURLOPT_RETURNTRANSFER => true, // 実行結果を文字列として返すようにする 23 CURLOPT_HEADER => false, // レスポンスヘッダーを含めない 24 CURLOPT_FOLLOWLOCATION => true, // 3xxリダイレクトがあった場合に自動的に追跡する 25 CURLOPT_TIMEOUT => 10, // リクエストのタイムアウトを10秒に設定 26 CURLOPT_SSL_VERIFYPEER => true, // SSL証明書の検証を有効化 (セキュリティのために推奨) 27 CURLOPT_SSL_VERIFYHOST => 2, // ホスト名の検証を有効化 (セキュリティのために推奨) 28 ]); 29 30 // cURLセッションを実行し、Webサーバーからの応答を取得します。 31 $response = curl_exec($ch); 32 33 // cURL実行中にエラーが発生したか確認します。 34 if (curl_errno($ch)) { 35 // エラーが発生した場合、エラーメッセージを表示します。 36 echo "cURLエラーが発生しました: " . curl_error($ch) . PHP_EOL; 37 } else { 38 // HTTPステータスコードを取得します。 39 // これはWebサーバーがリクエストに対して返した状態を示す数値です (例: 200 OK, 404 Not Found)。 40 // キーワード「CURLINFO_RESPONSE_CODE」に関連。 41 $httpCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); 42 43 // リダイレクトにかかった時間をマイクロ秒単位で取得します。 44 // リファレンス情報「CURLINFO_REDIRECT_TIME_T」に関連。 45 // PHP 7.3.0 以降で利用可能で、リダイレクト処理に要した時間が整数で返されます。 46 $redirectTimeMicroseconds = curl_getinfo($ch, CURLINFO_REDIRECT_TIME_T); 47 48 // 取得したマイクロ秒を秒に変換し、小数点以下3桁に丸めて表示します。 49 // `false` が返される可能性も考慮します。 50 $redirectTimeSeconds = $redirectTimeMicroseconds !== false 51 ? round($redirectTimeMicroseconds / 1_000_000, 3) 52 : 'N/A'; 53 54 echo "対象URL: {$url}" . PHP_EOL; 55 echo "HTTPステータスコード: {$httpCode}" . PHP_EOL; 56 echo "リダイレクト時間: {$redirectTimeSeconds} 秒" . PHP_EOL; 57 58 // レスポンス内容の一部も必要に応じて表示できますが、ここでは省略します。 59 // echo "レスポンスの最初の100文字: " . substr($response, 0, 100) . "..." . PHP_EOL; 60 } 61 62 // cURLセッションを終了し、リソースを解放します。 63 curl_close($ch); 64} 65 66// 関数を呼び出して、GoogleのWebサイト情報を取得します。 67// Googleはリダイレクトが発生する可能性があるため、リダイレクト時間の確認に適しています。 68getUrlResponseAndRedirectInfo("https://www.google.com/"); 69echo PHP_EOL; 70 71// リダイレクトが発生しない一般的なWebサイトの例です。 72getUrlResponseAndRedirectInfo("https://example.com/"); 73echo PHP_EOL; 74 75// 存在しないURLへのリクエストの例です。 76// HTTPステータスコードが404などになることが期待されます。 77getUrlResponseAndRedirectInfo("https://invalid.example.com/nonexistent");
このPHPサンプルコードは、指定されたURLへのHTTPリクエストを実行し、Webサーバーからの応答情報(HTTPステータスコードやリダイレクトにかかった時間)を取得して表示する方法を、システムエンジニアを目指す初心者向けに解説しています。
getUrlResponseAndRedirectInfo関数は、情報を取得したいターゲットURLを文字列型の$url引数として受け取ります。この関数は結果をコンソールに表示するのみで、特定の値を返さないため、戻り値はvoid型です。関数内では、まずcURLライブラリを使ってWebリクエストを行うための準備(セッションの初期化)を行います。次に、リクエスト先のURL、リダイレクトの自動追跡、タイムアウト時間など、リクエストの振る舞いを細かく設定します。
リクエストの実行後、エラーがなければcurl_getinfo関数を使用して、Webサーバーからの詳細情報を取得します。CURLINFO_RESPONSE_CODEは、Webサーバーがリクエストに対して返したHTTPステータスコード(例: 200 OK, 404 Not Foundなど)を取得する際に利用されます。また、CURLINFO_REDIRECT_TIME_Tは、リクエストがリダイレクトされた場合に、そのリダイレクト処理にかかった合計時間をマイクロ秒単位の整数で取得できます。この定数はPHP 7.3.0以降で利用可能です。取得されたHTTPステータスコードとリダイレクト時間は、整形されてコンソールに出力されます。このコードは、プログラムからWebサービスと連携するcURLの基本的な使い方と、Web通信の結果から必要な情報を得る方法を学ぶための良い例です。
このサンプルコードでは、cURLを使ったWebリクエストの基本的な流れと、リクエスト結果から情報を取得する方法を示しています。まず、curl_init()でセッションを初期化し、curl_setopt_array()で各種オプションを設定します。特にCURLOPT_FOLLOWLOCATIONをtrueにすることで、リダイレクトがあった場合に自動的に追跡し、その最終的な応答を取得できます。セキュリティのために、CURLOPT_SSL_VERIFYPEERとCURLOPT_SSL_VERIFYHOSTは必ず有効にして利用しましょう。
CURLINFO_REDIRECT_TIME_Tはリダイレクト処理にかかった時間をマイクロ秒単位で返しますが、リダイレクトが発生しなかった場合や古いPHPバージョンではfalseが返る可能性があるため、その場合の処理を適切に記述することが重要です。また、CURLINFO_RESPONSE_CODEでHTTPステータスコードを取得できます。curl_exec()の実行後には、curl_errno()とcurl_error()を使って必ずエラーチェックを行い、問題の早期発見に努めてください。最後にcurl_close()で必ずリソースを解放するのを忘れないようにしましょう。
PHP cURL: HTTPステータスコードとリダイレクト時間を取得する
1<?php 2 3/** 4 * 指定されたURLからHTTPステータスコードとリダイレクトにかかった時間を取得します。 5 * システムエンジニアの初心者が、Webリクエストの結果を分析する際の基本的な情報を得るのに役立ちます。 6 * 7 * @param string $url 情報を取得するURL。 8 * @return void 9 */ 10function getUrlRequestInfo(string $url): void 11{ 12 // cURLセッションを初期化します。 13 // cURLはPHPでHTTPリクエストを送信するための強力なライブラリです。 14 $ch = curl_init(); 15 16 // cURLオプションを設定します。 17 // CURLOPT_URL: リクエストを送信するURL。 18 curl_setopt($ch, CURLOPT_URL, $url); 19 // CURLOPT_FOLLOWLOCATION: HTTPヘッダーの"Location:"フィールドに従ってリダイレクトを自動的に追跡します。 20 // これを設定しないと、リダイレクトが発生した場合にリダイレクト先の情報ではなく、元のURLのリダイレクト指示の情報しか得られません。 21 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 22 // CURLOPT_RETURNTRANSFER: curl_exec() が結果を文字列として返すようにします。 23 // これがないと、curl_exec() は直接結果を出力してしまいます。 24 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 25 26 // cURLセッションを実行し、レスポンスを取得します。 27 $response = curl_exec($ch); 28 29 // エラーが発生した場合は、エラーメッセージを表示して処理を終了します。 30 if (curl_errno($ch)) { 31 echo "cURLエラー: " . curl_error($ch) . "\n"; 32 curl_close($ch); 33 return; 34 } 35 36 // curl_getinfo() を使用して、cURLセッションに関する情報を取得します。 37 // キーワード: CURLINFO_HTTP_CODE - 最後に受信したHTTPステータスコード(例: 200 OK, 404 Not Found)。 38 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 39 // リファレンス情報: CURLINFO_REDIRECT_TIME_T - リダイレクトにかかった合計時間(マイクロ秒単位)。 40 // この値は、CURLOPT_FOLLOWLOCATION が有効な場合に意味を持ちます。 41 $redirectTimeMicroseconds = curl_getinfo($ch, CURLINFO_REDIRECT_TIME_T); 42 43 // cURLセッションを閉じ、リソースを解放します。 44 curl_close($ch); 45 46 // 取得した情報を表示します。 47 echo "--- URL リクエスト情報 --- \n"; 48 echo "対象URL: " . $url . "\n"; 49 echo "HTTPステータスコード: " . $httpCode . "\n"; 50 // マイクロ秒を秒に変換して表示すると、より読みやすくなります。 51 echo "リダイレクト時間: " . sprintf("%.4f", $redirectTimeMicroseconds / 1_000_000) . " 秒\n"; 52 // 実際に取得されたレスポンスの一部を表示することもできますが、今回は情報取得に焦点を当てます。 53 // echo "レスポンスの一部: " . substr($response, 0, 100) . "...\n"; 54} 55 56// サンプルとして、GoogleのURLに対して関数を実行します。 57// Googleは通常、HTTPからHTTPSへのリダイレクトを伴うため、 58// CURLINFO_REDIRECT_TIME_T の値が0以外になる可能性があります。 59getUrlRequestInfo('http://www.google.com'); 60 61echo "\n"; 62 63// リダイレクトがない可能性のある別のURLでも試してみます。 64getUrlRequestInfo('https://example.com');
このサンプルコードは、PHPのcURL機能を利用して、指定されたURLに対するHTTPリクエストを実行し、その結果からWebサーバーの応答であるHTTPステータスコードと、リダイレクトにかかった合計時間を取得・表示する方法を示しています。システムエンジニアの初心者がWebリクエストの挙動を理解し、問題発生時の情報収集を行うのに役立ちます。
getUrlRequestInfo関数は、情報を取得したいWebページのURLを$url引数として受け取ります。この関数は直接値を返さず(戻り値はvoid)、取得した情報をコンソールに出力します。
内部では、まずcurl_init()でcURLセッションを開始し、curl_setopt()でリクエスト先のURL設定や、HTTPリダイレクトを自動的に追跡するよう(CURLOPT_FOLLOWLOCATION)オプションを設定します。CURLOPT_FOLLOWLOCATIONが有効な場合、リダイレクトの連鎖が発生しても最終的なページの情報を得られます。
その後、curl_exec()で実際にHTTPリクエストを送信し、curl_getinfo()関数を用いてセッションの詳細情報を取得します。具体的には、CURLINFO_HTTP_CODEでWebサーバーから最後に受信したHTTPステータスコードを取得し、CURLINFO_REDIRECT_TIME_Tでリダイレクト処理に要した合計時間(マイクロ秒単位)を取得します。これらの情報を取得後、curl_close()でセッションを閉じ、取得結果を分かりやすく整形して表示します。
CURLINFO_REDIRECT_TIME_Tは、リダイレクトを追跡する設定であるCURLOPT_FOLLOWLOCATIONをtrueにした場合にのみ、リダイレクト時間の計測結果が得られます。この設定がないと、リダイレクトが発生しても期待する時間は取得できませんのでご注意ください。cURLセッションはcurl_init()で初期化したら、処理の最後に必ずcurl_close()で閉じてリソースを適切に解放してください。また、ネットワーク通信ではエラーが発生する可能性があるため、curl_errno()でエラーの有無を常に確認し、適切にエラーハンドリングを行うことが重要です。CURLINFO_HTTP_CODEはWebリクエストの成否を示す大切な情報であり、主要なコードの意味を理解しておくと、問題解決に役立ちます。CURLINFO_REDIRECT_TIME_TはPHP 8以降で導入された定数ですので、古いPHPバージョンでは利用できません。