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

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

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

作成日: 更新日:

基本的な使い方

CURLINFO_POSTTRANSFER_TIME_T定数は、PHPのcURL拡張機能において、HTTPリクエストなどのデータ転送に関する詳細な時間情報を取得するために使用される定数です。

この定数は、curl_getinfo()関数と組み合わせて利用されます。curl_getinfo()関数にこの定数を指定することで、データ転送自体が完了した後、そのリクエストに関連するすべての後処理(例えば、接続のクリーンアップなど)が完了するまでの時間を取得することができます。

取得される時間はマイクロ秒(100万分の1秒)単位の整数値として提供されます。これは、同じ目的で利用されるCURLINFO_POSTTRANSFER_TIME定数が秒単位の浮動小数点数で時間を返すのに対し、より高精度な計測を可能にする点が特徴です。

システムエンジニアを目指す方にとって、ネットワーク通信のパフォーマンスを詳細に分析したり、リクエスト処理のどこに時間がかかっているのかを特定したりする際に、この高精度な時間情報は非常に役立ちます。例えば、特定のWebサービスへのリクエストが遅いと感じた場合に、転送後の後処理にどれくらいの時間がかかっているかを確認することで、問題の切り分けやボトルネックの特定に貢献します。

この定数を利用することで、アプリケーションの性能改善やデバッグ作業をより効果的に進めることが可能になります。

構文(syntax)

1curl_getinfo($ch, CURLINFO_POSTTRANSFER_TIME_T);

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP curl_infoで転送時間取得

1<?php
2
3/**
4 * cURL リクエストを実行し、CURLINFO_POSTTRANSFER_TIME_T 定数を使用して転送完了後の時間を取得するサンプルコード。
5 *
6 * CURLINFO_POSTTRANSFER_TIME_T は、cURL 転送が完了した時点から、
7 * 最終的なバイトが転送されるまでの時間をマイクロ秒単位で返します。
8 * これは PHP 8.0 で追加された定数です。
9 */
10function measureCurlPostTransferTime(): void
11{
12    // cURL セッションを初期化
13    $ch = curl_init();
14
15    // リクエストするURLを設定 (例として 'http://example.com' を使用)
16    // 実際にアクセス可能なURLに変更して試してください。
17    $url = 'http://example.com';
18
19    // cURL オプションを設定
20    curl_setopt($ch, CURLOPT_URL, $url);
21    // 転送結果を文字列として取得するように設定
22    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
23    // HTTPS リダイレクトを自動的に追跡するように設定
24    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
25    // リダイレクト回数の上限を設定
26    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
27    // タイムアウトを10秒に設定
28    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
29
30    echo "--- cURL リクエスト開始 ---\n";
31    echo "URL: " . $url . "\n";
32
33    // cURL リクエストを実行
34    $response = curl_exec($ch);
35
36    // エラーチェック
37    if (curl_errno($ch)) {
38        echo "エラー発生: " . curl_error($ch) . " (エラーコード: " . curl_errno($ch) . ")\n";
39    } else {
40        echo "cURL リクエスト成功。\n";
41
42        // CURLINFO_POSTTRANSFER_TIME_T 定数を使用して、転送完了後の時間を取得
43        // この値は、転送が完了してから最終バイトが転送されるまでの時間を示します(マイクロ秒単位)。
44        $postTransferTime = curl_getinfo($ch, CURLINFO_POSTTRANSFER_TIME_T);
45
46        echo "----------------------------------------\n";
47        echo "転送情報:\n";
48        echo "最終バイト転送までの時間 (マイクロ秒): " . $postTransferTime . "\n";
49        echo "----------------------------------------\n";
50
51        // 必要であれば、レスポンスの一部を表示
52        // echo "レスポンスの抜粋 (最初の200文字):\n";
53        // echo substr($response, 0, 200) . (strlen($response) > 200 ? "..." : "") . "\n";
54    }
55
56    // cURL セッションを閉じる
57    curl_close($ch);
58
59    echo "--- cURL リクエスト終了 ---\n";
60}
61
62// 関数を実行
63measureCurlPostTransferTime();
64
65?>

このサンプルコードは、PHPのcURL拡張機能を利用してWebリクエストを実行し、その転送に関する詳細な時間を取得する方法を示しています。特にPHP 8.0で導入されたCURLINFO_POSTTRANSFER_TIME_T定数の使い方を学べます。

まず、curl_init()関数でcURLセッションを開始します。次に、curl_setopt()関数でリクエストするURL、転送結果を文字列で受け取る設定(CURLOPT_RETURNTRANSFER)、タイムアウト時間など、cURLの挙動を詳細に設定します。設定が完了したら、curl_exec()関数を使って実際にWebリクエストを実行し、ターゲットのサーバーからデータを取得します。

リクエストが正常に完了した後、curl_getinfo()関数を使用します。この関数の第二引数にCURLINFO_POSTTRANSFER_TIME_T定数を指定すると、cURL転送が完了した時点から、実際に最後のバイトが転送されるまでの時間をマイクロ秒単位で取得できます。これは、サーバーがレスポンスをすべて送信し終えてから、そのデータが完全にクライアントに届くまでの時間を測定する際に役立つ情報です。

最後に、curl_close()関数を呼び出してcURLセッションを終了し、使用したリソースを適切に解放します。このコードを通じて、Webリクエストの実行方法だけでなく、その詳細なパフォーマンス情報を取得する技術を習得できます。

このサンプルコードはPHP 8.0以降でのみ動作しますので、実行環境のPHPバージョンを確認してください。また、PHPにcURL拡張モジュールがインストールされ、有効になっている必要があります。サンプルで設定しているURLは単なる例ですので、実際にデータを取得したい有効なURLに必ず変更して試してください。通信エラーなどが発生した際のために、curl_errno()curl_error()によるエラーチェックは常に重要です。CURLINFO_POSTTRANSFER_TIME_Tは転送完了から最終バイト転送までの時間をマイクロ秒で示しており、これはリクエスト全体の処理時間とは異なる特定の測定値であることに留意してください。処理終了後にはcurl_close()でセッションを適切に閉じ、リソースを解放することが大切です。

PHP cURL: HTTPステータスと転送時間を取得する

1<?php
2
3/**
4 * 指定されたURLへのcURLリクエストの転送情報とHTTPステータスコードを表示します。
5 *
6 * この関数は、ウェブページへのリクエストを実行し、
7 * その完了から最初のデータ受信が始まるまでの時間(マイクロ秒)と、
8 * サーバーから返されたHTTPステータスコードを取得して出力します。
9 * システムエンジニアを目指す初心者が、ネットワーク通信の基本的な時間情報と
10 * 応答ステータスを理解するのに役立ちます。
11 *
12 * @param string $url HTTPリクエストを送信するターゲットURL
13 * @return void
14 */
15function getCurlTransferMetrics(string $url): void
16{
17    // cURLセッションを初期化
18    $ch = curl_init();
19
20    // URLを設定
21    curl_setopt($ch, CURLOPT_URL, $url);
22    // 転送結果を文字列として取得する設定
23    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
24    // cURLがSSL証明書の検証を行う設定 (HTTPSサイトで重要)
25    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
26    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
27
28    echo "URLへのアクセス中: " . $url . PHP_EOL;
29
30    // cURLリクエストを実行
31    $response = curl_exec($ch);
32
33    // cURL実行中にエラーが発生したかチェック
34    if (curl_errno($ch)) {
35        echo 'cURLエラーが発生しました: ' . curl_error($ch) . PHP_EOL;
36        curl_close($ch);
37        return;
38    }
39
40    // 転送情報を取得
41    // CURLINFO_HTTP_CODE: HTTPステータスコード(例: 200 OK, 404 Not Foundなど)
42    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
43    // CURLINFO_POSTTRANSFER_TIME_T: 転送完了から最初のバイトが転送されるまでの時間(マイクロ秒)
44    // この値は、最後のバイトが送信されてから最初のバイトが返されるまでの時間を表します。
45    $postTransferTimeMicroseconds = curl_getinfo($ch, CURLINFO_POSTTRANSFER_TIME_T);
46
47    // 取得した情報を出力
48    echo "----------------------------------------" . PHP_EOL;
49    echo "取得情報:" . PHP_EOL;
50    echo "HTTPステータスコード: " . $httpCode . PHP_EOL;
51
52    // マイクロ秒を秒に変換して表示すると、より人間が理解しやすくなります
53    $postTransferTimeSeconds = $postTransferTimeMicroseconds / 1_000_000;
54    echo "転送完了からデータ受信開始までの時間: " . $postTransferTimeSeconds . "秒 (" . $postTransferTimeMicroseconds . "マイクロ秒)" . PHP_EOL;
55    echo "----------------------------------------" . PHP_EOL;
56
57    // cURLセッションを閉じる
58    curl_close($ch);
59}
60
61// この関数を呼び出して、特定のURLの転送情報を取得します。
62// 例として、Googleのトップページを使用しています。
63getCurlTransferMetrics("https://www.google.com");
64
65// 存在しないURLやエラーが発生するURLを試すこともできます。
66// getCurlTransferMetrics("https://nonexistent-domain-12345.com");
67// getCurlTransferMetrics("https://httpstat.us/500"); // 500 Internal Server Errorを返すURL

このPHPコードは、指定されたURLに対してHTTPリクエストを実行し、その通信に関する詳細な情報を取得して表示します。特に、ネットワーク通信の基本的な挙動を理解するために重要な二つの情報に焦点を当てています。

一つ目はCURLINFO_POSTTRANSFER_TIME_T定数を使用して取得される「転送完了からデータ受信開始までの時間」です。これは、cURLがサーバーへのデータの送信を終えてから、サーバーからの最初の応答データを受け取るまでの経過時間をマイクロ秒単位で示します。これにより、サーバーがリクエストを処理して応答を生成するのにかかった時間を推測する手助けとなります。

二つ目はCURLINFO_HTTP_CODE定数で取得される「HTTPステータスコード」です。これは、ウェブサーバーがリクエストに対してどのような結果を返したかを示す3桁の数字で、例えば「200」は成功、「404」はページが見つからない、「500」はサーバー内部エラーといった意味を持ちます。

コードはgetCurlTransferMetrics関数として定義されており、引数として$url(リクエスト先のURL)を受け取ります。この関数はcurl_init()でセッションを開始し、curl_setopt()で必要な設定(URLや結果の取得方法など)を行った後、curl_exec()でリクエストを実行します。エラーが発生した場合はそれを報告し、成功した場合はcurl_getinfo()関数を使って上記の情報を取得し、読みやすい形式で画面に表示します。最後にcurl_close()でセッションを閉じます。戻り値はvoidであり、結果は直接出力されます。システムエンジニアを目指す方にとって、ネットワーク通信の応答時間や結果を分析する第一歩として役立つでしょう。

このサンプルコードは、cURLを使ってウェブ通信の転送時間とHTTPステータスコードを取得する基本を示しています。CURLINFO_POSTTRANSFER_TIME_Tは、転送完了から最初のデータを受信するまでの時間をマイクロ秒で返しますので、秒に変換して表示すると理解しやすくなります。CURLINFO_HTTP_CODEは通信の成否やサーバーの状態を示す重要な情報ですので、その意味を把握しておきましょう。ネットワークのトラブルに備え、curl_errnocurl_errorで必ずエラーチェックを行い、適切な対処が必要です。また、cURLセッションの使用後はcurl_closeでリソースを忘れずに解放してください。HTTPS通信においては、CURLOPT_SSL_VERIFYPEERなどのSSL設定がセキュリティ上極めて重要ですので、本番環境では適切に有効化してください。

関連コンテンツ

関連IT用語

関連プログラミング言語