【PHP8.x】CURLINFO_REFERER定数の使い方
CURLINFO_REFERER定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
CURLINFO_REFERER定数は、PHPのcURL拡張機能で、cURLセッションから情報を取得するために使用される識別子を表す定数です。
この定数は、curl_getinfo()関数と組み合わせて使用し、直前のcURLリクエストでWebサーバーへ送信されたReferer(リファラー)ヘッダの文字列情報を取得します。Refererヘッダとは、HTTPリクエストの参照元URLを示す情報です。
CURLINFO_REFERER定数を用いることで、PHPスクリプトが発行したHTTPリクエストで実際に送信されたReferer情報をプログラムで確認可能になります。これは、アプリケーションが意図したReferer情報を正しく送信しているかのデバッグや、Web通信におけるリクエストの参照元を把握する際に役立ちます。
取得される情報は常に文字列形式で提供され、Webサービスとの連携における正確性の確認などに活用されます。
構文(syntax)
1<?php 2$ch = curl_init(); 3$info = curl_getinfo($ch, CURLINFO_REFERER); 4curl_close($ch);
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP cURLでHTTPレスポンスコードを取得する
1<?php 2 3/** 4 * cURLリクエストを実行し、HTTPレスポンスコードなどの情報を取得します。 5 * 6 * この関数は、指定されたURLに対してGETリクエストを行い、 7 * オプションでリファラーを設定し、curl_getinfo() を使用して 8 * HTTPステータスコードや最終的なURLといった情報を取得する方法を示します。 9 * 10 * システムエンジニアを目指す初心者向けに、ウェブAPIとの連携や外部リソースの取得において 11 * 重要なステータス確認の基本を学習できます。 12 * 13 * @param string $url リクエストを送信するURL。 14 * @param string $referer オプションでリクエストヘッダに含めるリファラーURL。 15 * @return array リクエストの結果を含む連想配列。 16 * 'success' (bool): リクエストが成功したか。 17 * 'message' (string): 結果メッセージ。 18 * 'http_code' (int): HTTPレスポンスステータスコード。 19 * 'effective_url' (string): リダイレクト後の最終的なURL。 20 * 'error' (string, optional): エラーメッセージ(エラー時のみ)。 21 */ 22function fetchUrlInfo(string $url, string $referer = ''): array 23{ 24 // cURLハンドルの初期化 25 $ch = curl_init(); 26 27 // cURLオプションの設定 28 curl_setopt($ch, CURLOPT_URL, $url); // リクエスト先のURLを設定 29 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 戻り値を文字列で受け取る (ブラウザに出力しない) 30 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // HTTPリダイレクトを自動的に追跡する 31 curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // 追跡するリダイレクトの最大数を設定 32 curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 接続タイムアウトを10秒に設定 33 curl_setopt($ch, CURLOPT_USERAGENT, 'PHP cURL Client'); // ユーザーエージェントを設定 34 35 // リファラーが指定されている場合、CURLOPT_REFERERを設定します。 36 // これは、リクエストヘッダに Referer フィールドを追加し、 37 // どのページからリクエストが来たかを示すために使用されます。 38 if (!empty($referer)) { 39 curl_setopt($ch, CURLOPT_REFERER, $referer); 40 } 41 42 // cURLリクエストの実行 43 $responseBody = curl_exec($ch); 44 45 // cURL実行中のエラーをチェック 46 if (curl_errno($ch)) { 47 $errorMsg = curl_error($ch); 48 curl_close($ch); 49 return [ 50 'success' => false, 51 'message' => 'cURLリクエスト中にエラーが発生しました。', 52 'http_code' => 0, 53 'effective_url' => '', 54 'error' => $errorMsg 55 ]; 56 } 57 58 // curl_getinfo() を使用して、リクエストに関する情報を取得します。 59 // CURLINFO_RESPONSE_CODE は、取得したHTTPステータスコード (例: 200, 404, 500) を示します。 60 $httpCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); 61 // CURLINFO_EFFECTIVE_URL は、リダイレクト後に実際にアクセスされた最終的なURLを示します。 62 $effectiveUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 63 64 // cURLハンドルのクローズ 65 curl_close($ch); 66 67 return [ 68 'success' => true, 69 'message' => 'URLからの情報取得に成功しました。', 70 'http_code' => $httpCode, 71 'effective_url' => $effectiveUrl, 72 // 'response_body' => $responseBody, // 実際にはレスポンスボディも取得できるが、表示を簡潔にするためコメントアウト 73 ]; 74} 75 76// --- サンプル使用例 --- 77$targetUrl = 'https://httpbin.org/get'; // テスト用のEchoサーバーURL 78$sampleReferer = 'https://my-php-application.com/home'; 79 80echo "--- cURL情報取得サンプル ---\n\n"; 81 82echo "ターゲットURL: " . $targetUrl . "\n"; 83echo "送信リファラー: " . $sampleReferer . "\n\n"; 84 85$result = fetchUrlInfo($targetUrl, $sampleReferer); 86 87if ($result['success']) { 88 echo "取得結果:\n"; 89 echo " HTTPステータスコード (CURLINFO_RESPONSE_CODE): " . $result['http_code'] . "\n"; 90 echo " 最終的なURL (CURLINFO_EFFECTIVE_URL): " . $result['effective_url'] . "\n"; 91 if ($result['http_code'] >= 200 && $result['http_code'] < 300) { 92 echo " ステータス: リクエストは成功しました。\n"; 93 } else { 94 echo " ステータス: 警告 - HTTPコード: " . $result['http_code'] . " は成功範囲外です。\n"; 95 } 96} else { 97 echo "エラー発生:\n"; 98 echo " メッセージ: " . $result['message'] . "\n"; 99 echo " 詳細: " . $result['error'] . "\n"; 100} 101 102echo "\n--- エラー発生時の例 (存在しないドメイン) ---\n\n"; 103$invalidUrl = 'http://this-domain-does-not-exist-123456789.com'; 104echo "ターゲットURL: " . $invalidUrl . "\n"; 105$errorResult = fetchUrlInfo($invalidUrl); 106 107if (!$errorResult['success']) { 108 echo "エラー発生:\n"; 109 echo " メッセージ: " . $errorResult['message'] . "\n"; 110 echo " 詳細: " . $errorResult['error'] . "\n"; 111} 112 113?>
このPHPサンプルコードは、cURL拡張機能を使って外部のURLにHTTPリクエストを送信し、その結果の情報を取得する方法を示しています。システムエンジニアを目指す初心者の方々が、ウェブAPIとの連携や外部リソースの取得において、通信の成功やエラーを正確に判断する基本を学ぶのに役立ちます。
関数 fetchUrlInfo は、引数としてリクエスト先のURLと、オプションでリクエスト元を示す $referer(リファラーURL)を受け取ります。curl_setopt を使用して、リクエスト先のURL設定(CURLOPT_URL)、レスポンス内容を文字列で取得する設定(CURLOPT_RETURNTRANSFER)、HTTPリダイレクトの自動追跡(CURLOPT_FOLLOWLOCATION)など、様々なオプションを細かく設定できます。特に、CURLOPT_REFERERを設定することで、どのページからリクエストが送信されたかを示すリファラー情報をHTTPヘッダに含めることができます。
リクエスト実行後、curl_getinfo 関数を使って、CURLINFO_RESPONSE_CODE(HTTPステータスコード)やCURLINFO_EFFECTIVE_URL(リダイレクト後の最終URL)などの詳細な情報を取得します。戻り値は、リクエストの成功可否、メッセージ、HTTPステータスコード、最終URLを含む連想配列で提供され、取得した情報をプログラムで容易に利用できるようになっています。これにより、外部リソースの可用性確認や、エラー発生時の適切な処理といった実践的なシナリオに対応するための基礎が身につきます。
PHPのcURL拡張にはCURLINFO_REFERERという定数は存在しません。サンプルコードで使用されているCURLOPT_REFERERは、リクエストヘッダにリファラー情報を設定するオプションであり、これらは異なるものですので混同しないよう注意が必要です。ウェブ通信は不安定なため、curl_exec実行後は必ずcurl_errnoでエラーをチェックし、適切なエラー処理を実装してください。また、処理完了後にはcurl_closeでcURLリソースを解放することが重要です。CURLINFO_RESPONSE_CODEで取得できるHTTPステータスコードは、外部API連携時の成否判断に不可欠です。CURLOPT_TIMEOUTなどの適切なオプション設定は、通信の安全性と堅牢性を高めます。
PHP curl_infoでリファラを取得する
1<?php 2 3/** 4 * cURLリクエストを実行し、CURLINFO_REFERER定数を使用して設定されたリファラ情報を取得します。 5 * 6 * この関数は、CURLINFO_REFERER定数の使い方をシステムエンジニアを目指す初心者向けに示します。 7 * CURLINFO_REFERERは、curl_setopt()関数でCURLOPT_REFERERオプションによって 8 * 最後に設定されたリファラヘッダの値を取得するために使用されます。 9 * 10 * @param string $targetUrl リクエストを送信するターゲットURL。 11 * @param string $customReferer cURLリクエストに設定するカスタムリファラURL。 12 * @return void 13 */ 14function demonstrateCurlInfoReferer(string $targetUrl, string $customReferer): void 15{ 16 // 1. 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 // CURLOPT_RETURNTRANSFER: trueに設定すると、curl_exec()が結果を文字列で返します。 28 // CURLOPT_REFERER: リクエストのHTTPヘッダに'Referer'として送信するURLを設定します。 29 curl_setopt($ch, CURLOPT_URL, $targetUrl); 30 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 31 curl_setopt($ch, CURLOPT_REFERER, $customReferer); 32 33 // 3. cURLセッションを実行し、レスポンスを取得します。 34 $response = curl_exec($ch); 35 36 // 4. cURL実行中にエラーが発生したかチェックします。 37 if (curl_errno($ch)) { 38 echo "cURLエラー: " . curl_error($ch) . "\n"; 39 curl_close($ch); 40 return; 41 } 42 43 // 5. CURLINFO_REFERER定数を使用して、cURLが最後に使用したリファラ情報を取得します。 44 // この値は、CURLOPT_REFERERで設定された値と同じになります。 45 $obtainedReferer = curl_getinfo($ch, CURLINFO_REFERER); 46 47 // 6. cURLセッションを閉じ、リソースを解放します。 48 curl_close($ch); 49 50 // 7. 取得した情報を表示します。 51 echo "--- cURL リクエスト結果 ---\n"; 52 echo "ターゲットURL: " . $targetUrl . "\n"; 53 echo "CURLOPT_REFERER で設定したリファラ: " . $customReferer . "\n"; 54 echo "CURLINFO_REFERER で取得したリファラ: " . $obtainedReferer . "\n"; 55 echo "\n"; 56 echo "--- レスポンスの抜粋 (最初の500文字) ---\n"; 57 // レスポンスが文字列であることを確認してから部分文字列を抽出します。 58 echo (is_string($response) ? substr($response, 0, 500) : 'レスポンスを取得できませんでした。') . "...\n"; 59} 60 61// 関数を呼び出して、CURLINFO_REFERERの動作を実際に見てみましょう。 62// 注: 'http://example.com/' は広く利用可能なテスト用URLです。 63// 必要に応じて、アクセス可能な他のURLに置き換えることができます。 64$targetUrlToFetch = 'http://example.com/'; 65$myCustomReferer = 'https://my-source-website.com/initiator-page'; 66 67demonstrateCurlInfoReferer($targetUrlToFetch, $myCustomReferer); 68 69?>
このPHPサンプルコードは、cURL拡張機能でHTTPリクエストを送信する際に、リファラ情報をどのように設定し、取得するかをシステムエンジニアを目指す初心者向けに示しています。ここで主要な役割を果たすのがCURLINFO_REFERER定数です。
CURLINFO_REFERERは、curl_getinfo()関数と組み合わせて使用され、cURLリクエストで最後に使用されたリファラヘッダの値を取得するために用いられます。このリファラは、通常curl_setopt()関数を用いてCURLOPT_REFERERオプションとして事前に設定されます。
サンプルコード内のdemonstrateCurlInfoReferer関数は、まずcURLセッションを初期化し、指定されたターゲットURL($targetUrl)とカスタムリファラ($customReferer)を設定します。特に、CURLOPT_REFERERオプションに$customRefererを渡すことで、リクエストに特定のリファラ情報を付与します。リクエストの実行後、curl_getinfo($ch, CURLINFO_REFERER)を呼び出すことで、設定したリファラ情報が正確に取得できることを確認しています。本関数はこれらの処理結果をコンソールに出力するだけであり、特定の値を返さないため、戻り値はvoidです。これにより、HTTPリクエストにおけるリファラヘッダの送受信の仕組みと、CURLINFO_REFERERの具体的な利用方法を学ぶことができます。
CURLINFO_REFERERは、curl_getinfo()関数に渡して、cURLセッションで最後に設定または使用されたリファラURLの情報を取得するための定数です。リクエストを送信する際にリファラヘッダを設定するには、curl_setopt()関数でCURLOPT_REFERERオプションを使用します。これら二つの定数(CURLINFO_REFERERとCURLOPT_REFERER)の役割の違いを理解することが重要です。cURL処理では、curl_init()の成功確認、curl_exec()後のエラーチェック、そしてcurl_close()によるリソースの解放を必ず行ってください。リファレンスにある「戻り値なし」は定数そのものの情報であり、curl_getinfo()関数からは実際にリファラの文字列が返されますので、この点を混同しないよう注意が必要です。安全なコードのためにもエラーハンドリングを徹底しましょう。