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

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

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

作成日: 更新日:

基本的な使い方

CURLINFO_TOTAL_TIME_T定数は、PHPのcURL拡張機能において、ネットワークリクエストの総実行時間を取得するために使用される定数です。この定数は、HTTPやFTPなどのプロトコルを用いた外部サーバーとの通信処理が、開始されてから完了するまでの合計時間を測定するために利用されます。

システムエンジニアを目指す初心者の方々にとって、ネットワーク通信のパフォーマンスを理解することは非常に重要です。CURLINFO_TOTAL_TIME_T定数を使用すると、curl_getinfo()関数と組み合わせて、具体的な処理時間を数値として取得できます。特に注目すべきは、この定数が返す時間がマイクロ秒単位の整数値であるという点です。従来のCURLINFO_TOTAL_TIME定数が秒単位の浮動小数点数で時間を提供していたのに対し、CURLINFO_TOTAL_TIME_Tはより詳細で精密な時間情報を得られるため、小数点以下の小さな時間の差異まで正確に把握したい場合に非常に有用です。

例えば、Webサービスの応答速度を計測したり、特定のAPI呼び出しにかかる時間を詳細に分析したりする際に、この高精度な時間情報が役立ちます。PHP 8環境において、ネットワーク処理のパフォーマンスを厳密に評価する必要がある場面で、CURLINFO_TOTAL_TIME_T定数は強力なツールとなります。システムのボトルネック特定や最適化作業において、正確な時間測定は不可欠な要素であるため、この定数の使い方を習得することは、効率的なシステム開発に繋がります。

構文(syntax)

1<?php
2
3$ch = curl_init('http://example.com');
4curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
5curl_exec($ch);
6$totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME_T);
7curl_close($ch);
8
9echo "Total time taken: " . $totalTime . " microseconds.";
10
11?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

この定数は、cURL転送全体にかかった時間を秒単位のマイクロ秒で表す整数値を返します。

サンプルコード

cURL合計実行時間を取得する

1<?php
2
3/**
4 * 指定されたURLへのcURLリクエストを実行し、その合計実行時間を測定して表示します。
5 *
6 * この関数は、ウェブサイトへの接続、データ転送、処理にかかった
7 * 全体の時間をマイクロ秒単位で取得するために CURLINFO_TOTAL_TIME_T 定数を使用します。
8 * システムエンジニアを目指す初心者の方は、外部サービスとの通信性能を
9 * 測定する基本的な方法として理解してください。
10 *
11 * @param string $url リクエストを送信するターゲットURL。
12 * @return void
13 */
14function measureCurlTotalTime(string $url): void
15{
16    // cURLセッションを初期化します。
17    // curl_init() は新しいcURLセッションハンドルを返します。
18    $ch = curl_init();
19
20    // cURLハンドルの初期化に失敗した場合のチェック
21    if ($ch === false) {
22        echo "エラー: cURLセッションの初期化に失敗しました。\n";
23        return;
24    }
25
26    // cURLオプションを設定します。
27    // CURLOPT_URL: リクエストを送信するURLを設定します。
28    curl_setopt($ch, CURLOPT_URL, $url);
29    // CURLOPT_RETURNTRANSFER: curl_exec() がレスポンスを文字列として返すように設定します。
30    // これを true にしないと、レスポンスは直接出力されます。
31    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
32
33    // 注意: 開発・テスト目的でSSL証明書の検証を無効にすることがありますが、
34    // 本番環境ではセキュリティ上のリスクがあるため推奨されません。
35    // 実際の運用では、信頼できるCA証明書を使用するなど、より安全な方法を選択してください。
36    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
37    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
38
39    echo "URL: {$url} へのcURLリクエストを実行中...\n";
40
41    // cURLリクエストを実行します。
42    // 実行に失敗すると false を返します。
43    $response = curl_exec($ch);
44
45    // cURLリクエストのエラーチェック
46    if ($response === false) {
47        echo "cURLエラーが発生しました: " . curl_error($ch) . "\n";
48    } else {
49        // curl_getinfo() を使用して、cURLリクエストに関する情報を取得します。
50        // CURLINFO_TOTAL_TIME_T は、cURLリクエストの合計実行時間をマイクロ秒単位で返します。
51        // これはPHP 7.0以降で利用可能で、より高精度な時間計測に適しています。
52        $totalTimeMicroseconds = curl_getinfo($ch, CURLINFO_TOTAL_TIME_T);
53
54        // マイクロ秒を秒に変換して、より人間が理解しやすい形式で表示します。
55        $totalTimeSeconds = $totalTimeMicroseconds / 1_000_000;
56
57        echo "cURLリクエストが成功しました。\n";
58        echo "合計実行時間: " . number_format($totalTimeSeconds, 6) . " 秒 ({$totalTimeMicroseconds} マイクロ秒)\n";
59        // 必要に応じて、取得したレスポンスの冒頭部分などを表示することもできます。
60        // echo "レスポンスの先頭100文字: " . substr($response, 0, 100) . "...\n";
61    }
62
63    // cURLセッションを閉じ、リソースを解放します。
64    curl_close($ch);
65}
66
67// この関数を呼び出して、特定のURLへのリクエスト時間を測定します。
68// 例として、Googleのホームページを使用します。
69measureCurlTotalTime("https://www.google.com");
70
71// 別のURLで試すこともできます。
72// measureCurlTotalTime("https://www.example.com");
73
74?>

このサンプルコードは、PHPのcURL機能を利用して、指定されたURLへのHTTPリクエストの合計実行時間を測定し表示するものです。measureCurlTotalTime関数は、引数としてリクエスト対象の$url(文字列)を受け取り、測定結果をコンソールに出力するため、戻り値はありません(void)。

処理の流れとしては、まずcurl_init()でcURLセッションを初期化し、curl_setopt()でリクエスト先のURLや、レスポンスを文字列で受け取るための設定を行います。リクエストがcurl_exec()で実行された後、curl_getinfo()関数にCURLINFO_TOTAL_TIME_T定数を指定することで、リクエストの開始から終了までに要した全体の時間をマイクロ秒単位の整数値として取得できます。この定数は、ネットワーク接続、データ転送、サーバー応答などの全工程にかかった時間を示します。取得したマイクロ秒は、読みやすいように秒に変換されて表示されます。最終的にcurl_close()でセッションを閉じ、リソースを解放します。このコードは、システムエンジニアを目指す方が、外部サービスとの通信性能を測定する基本的な手法として理解するのに適しています。

サンプルコードではSSL検証を無効にしていますが、これは開発・テスト目的であり、本番環境ではセキュリティ上のリスクがあるため決して推奨されません。運用時には必ず有効にするか、信頼できるCA証明書を使用してください。cURL関連関数の実行結果は常に確認し、curl_error()で詳細なエラー情報を取得して適切にエラーハンドリングを行うことが重要です。また、CURLINFO_TOTAL_TIME_TはcURLリクエストの合計実行時間をマイクロ秒単位で返しますので、人間が理解しやすいよう秒単位に変換して表示することを検討してください。cURLセッションを使い終えた後は、必ずcurl_close()を呼び出してリソースを解放し、リソースリークを防ぐようにしましょう。

PHP cURL total_time_tで転送時間取得

1<?php
2
3/**
4 * 指定されたURLへのHTTPリクエストの合計転送時間を測定し表示します。
5 * CURLINFO_TOTAL_TIME_T 定数を使用して、時間をマイクロ秒単位の整数で取得します。
6 *
7 * @param string $url 測定対象のURL
8 * @return void
9 */
10function measureTotalTransferTime(string $url): void
11{
12    // cURLセッションを初期化
13    $ch = curl_init($url);
14
15    if ($ch === false) {
16        echo "エラー: cURLセッションの初期化に失敗しました。\n";
17        return;
18    }
19
20    // 転送オプションを設定
21    // CURLOPT_RETURNTRANSFER を true に設定することで、curl_exec() は結果を文字列として返します。
22    // false の場合、結果は直接出力されます。
23    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
24
25    // 転送を実行
26    $response = curl_exec($ch);
27
28    if ($response === false) {
29        // 転送中にエラーが発生した場合
30        echo "cURL転送エラー: " . curl_error($ch) . "\n";
31        curl_close($ch);
32        return;
33    }
34
35    // CURLINFO_TOTAL_TIME_T を使用して転送の合計時間をマイクロ秒単位の整数で取得します。
36    // この定数は、転送開始から完了までの時間をint型で返します。
37    // 従来の CURLINFO_TOTAL_TIME は浮動小数点数で秒単位を返します。
38    $totalTimeMicroseconds = curl_getinfo($ch, CURLINFO_TOTAL_TIME_T);
39
40    // cURLセッションを閉じる
41    curl_close($ch);
42
43    // 取得した合計時間を表示
44    echo "測定URL: " . $url . "\n";
45    echo "転送の合計時間 (マイクロ秒): " . $totalTimeMicroseconds . "\n";
46    echo "転送の合計時間 (秒): " . ($totalTimeMicroseconds / 1000000) . "\n";
47}
48
49// サンプルとして、指定したURLへのリクエスト時間を測定
50// 実際に存在するURLを指定してください。ここでは例としてGoogleを使用します。
51measureTotalTransferTime("https://www.google.com");
52
53?>

このPHPコードは、指定されたURLへのHTTPリクエストの合計転送時間を測定し、その結果を表示します。measureTotalTransferTime関数は、測定対象のURLを文字列型の引数$urlとして受け取ります。関数内部では、まずcurl_init()でcURLセッションを初期化し、curl_setopt()で転送オプションを設定します。特にCURLOPT_RETURNTRANSFERtrueにすることで、curl_exec()がHTTPレスポンスを文字列として返します。

リクエストの実行後、curl_getinfo()関数にCURLINFO_TOTAL_TIME_T定数を指定して呼び出すことで、HTTPリクエストの開始から完了までの合計時間を取得します。このCURLINFO_TOTAL_TIME_T定数は、合計転送時間をマイクロ秒単位の整数(int型)で返します。これにより、従来のCURLINFO_TOTAL_TIMEが秒単位の浮動小数点数で時間を返していたのと比較して、より詳細かつ整数で時間を扱えます。

最後に、curl_close()でcURLセッションを閉じ、取得した合計時間をマイクロ秒および秒単位で画面に表示します。この関数自体は、画面に結果を出力するだけで特定の値を返さないため、戻り値はvoid型です。

このサンプルコードは、PHP 8で追加されたCURLINFO_TOTAL_TIME_T定数を用いて、HTTPリクエストの合計転送時間をマイクロ秒単位の整数で取得する方法を示しています。初心者は、curl_initcurl_execの戻り値を必ず確認し、エラーハンドリングを怠らないことが重要です。また、cURLセッションのリソースはcurl_closeで確実に解放してください。これを忘れると、メモリリソースを無駄に消費する原因となります。CURLINFO_TOTAL_TIME_Tは従来のCURLINFO_TOTAL_TIME(秒単位の浮動小数点数)よりも高い精度で時間を扱えるため、パフォーマンス測定に適しています。取得した値はマイクロ秒なので、秒に変換するには1,000,000で割ることを覚えておきましょう。

関連コンテンツ

関連IT用語

関連プログラミング言語