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

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

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

作成日: 更新日:

基本的な使い方

CURLINFO_APPCONNECT_TIME定数は、PHPのcURL拡張機能において、リモートサーバーとの間でアプリケーション層の接続が確立されるまでにかかった時間をマイクロ秒単位で表す定数です。これは、ウェブサイトへのアクセスや外部APIとの連携など、ネットワークを介した通信を行う際に、その接続性能を測定するために利用されます。具体的には、TCP接続の確立に加えて、もしSSL/TLS通信(HTTPSなど)を使用している場合は、その暗号化された通信路を確立するためのSSL/TLSハンドシェイクが完了するまでの時間を含んでいます。

この定数の値は、curl_getinfo() 関数を使って取得できます。curl_getinfo($ch, CURLINFO_APPCONNECT_TIME)のように記述することで、指定したcURLセッションにおけるアプリケーション接続時間を数値で得ることが可能です。システム開発において、ネットワーク通信のボトルネックを特定したり、応答時間の遅延原因を分析したりする際に、非常に有用な情報となります。例えば、アプリケーション接続に時間がかかっている場合、SSL/TLSハンドシェイクの効率性や、サーバー側の接続処理能力に課題がある可能性を探る手がかりとなるでしょう。この情報は、通信のパフォーマンスチューニングや問題解決の際に、具体的な時間情報として役立ちます。

構文(syntax)

1<?php
2$appConnectTimeOption = CURLINFO_APPCONNECT_TIME;
3?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP cURLでHTTPコードと接続時間を取得する

1<?php
2
3/**
4 * 指定されたURLにHTTP GETリクエストを送信し、関連するcURL情報を表示します。
5 *
6 * @param string $url リクエストを送信するURL。
7 * @return void
8 */
9function getCurlRequestInfo(string $url): void
10{
11    // cURLセッションを初期化します。
12    $ch = curl_init();
13
14    // cURLオプションを設定します。
15    // アクセスするURLを設定します。
16    curl_setopt($ch, CURLOPT_URL, $url);
17    // 実行結果を文字列で返します。これを設定しないと、curl_exec()は直接出力します。
18    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
19    // HTTPヘッダー情報を結果に含めないようにします。
20    curl_setopt($ch, CURLOPT_HEADER, false);
21    // HTTPS通信時にSSL証明書の検証を行わないオプション (本番環境では非推奨)
22    // エラーになる場合に一時的に利用しますが、セキュリティ上のリスクがあります。
23    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
24    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
25
26    // cURLリクエストを実行し、レスポンスを取得します。
27    $response = curl_exec($ch);
28
29    // cURL実行中にエラーが発生したか確認します。
30    if (curl_errno($ch)) {
31        echo 'cURLエラー: ' . curl_error($ch) . PHP_EOL;
32        // エラーが発生した場合はセッションを閉じ、処理を終了します。
33        curl_close($ch);
34        return;
35    }
36
37    // curl_getinfo() を使用して、リクエストに関するさまざまな情報を取得します。
38
39    // HTTPステータスコード (例: 200 OK, 404 Not Found など) を取得します。
40    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
41
42    // アプリケーションが接続を完了するまでにかかった時間 (秒単位) を取得します。
43    // これはTCP接続確立、SSL/TLSハンドシェイク完了までの時間を含みます。
44    $appConnectTime = curl_getinfo($ch, CURLINFO_APPCONNECT_TIME);
45
46    // リクエストの開始から転送完了までにかかった合計時間 (秒単位) を取得します。
47    $totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
48
49    // 取得した情報を表示します。
50    echo "--- cURLリクエスト情報 ---" . PHP_EOL;
51    echo "URL: {$url}" . PHP_EOL;
52    echo "HTTPステータスコード: {$httpCode}" . PHP_EOL;
53    echo "アプリケーション接続時間: {$appConnectTime} 秒" . PHP_EOL;
54    echo "合計転送時間: {$totalTime} 秒" . PHP_EOL;
55
56    // レスポンスの内容の一部を表示します。
57    echo "--- レスポンス内容 (最初の200文字) ---" . PHP_EOL;
58    echo mb_substr($response, 0, 200) . (mb_strlen($response) > 200 ? '...' : '') . PHP_EOL;
59
60    // cURLセッションを閉じ、リソースを解放します。
61    curl_close($ch);
62}
63
64// サンプルとして、指定されたURLにリクエストを送信し、情報を表示します。
65// 実際のウェブサイトURLに置き換えて試すことができます。
66getCurlRequestInfo('https://www.example.com');
67
68?>

PHPのCURLINFO_APPCONNECT_TIMEは、cURL拡張機能で使用される定数です。この定数は、リモートサーバーへのTCP接続確立、さらにはSSL/TLSハンドシェイクが完了し、アプリケーションレベルでの通信が可能になるまでにかかった時間を秒単位で取得するために使われます。

提供されたサンプルコードでは、まずcurl_init()でcURLセッションを初期化し、curl_setopt()でアクセスするURLや応答形式などの詳細な設定を行っています。その後、curl_exec()を実行してHTTP GETリクエストを送信し、ウェブサーバーからの応答を取得します。

リクエスト実行後、curl_getinfo()関数にCURLINFO_APPCONNECT_TIME定数を指定することで、前述のアプリケーション接続完了までの時間を数値として正確に取得し、画面に表示しています。これにより、ウェブアプリケーションが実際にデータを送受信できるようになるまでの接続パフォーマンスを具体的に把握できます。

また、キーワードとして挙げられているCURLINFO_HTTP_CODE定数も同じくcurl_getinfo()と共に使用され、HTTPステータスコード(例えば「200 OK」や「404 Not Found」など)を取得するために利用されます。これらの定数を通じて取得される各種情報は、ウェブアプリケーションのパフォーマンス分析やデバッグ作業において、接続状態やレスポンスの状況を詳細に理解するための重要な指標となります。この定数自体は特定の整数値を持ち、curl_getinfo関数にどの情報を取得したいかを伝える「指示」として機能します。

PHPのcURLを利用する際は、HTTPS通信におけるSSL証明書の検証を安易に無効化しないでください。これはセキュリティ上の重大なリスクとなるため、本番環境では必ず検証を有効にしてください。リクエスト実行後は、curl_errno()curl_error()で必ずエラーが発生していないか確認し、適切なエラーハンドリングを実装することが重要です。また、処理の最後にはcurl_close()を呼び出し、cURLセッションのリソースを確実に解放してください。CURLINFO_APPCONNECT_TIMEは接続にかかる時間を、CURLINFO_HTTP_CODEはHTTPステータスコードを示し、これらは通信状況の把握やパフォーマンス分析に役立ちます。これらの情報を活用することで、より堅牢なプログラムを作成できます。

PHP cURL接続時間取得:appconnect_time

1<?php
2
3/**
4 * CURLINFO_APPCONNECT_TIME を使用して cURL 接続情報を取得するサンプル関数です。
5 *
6 * この関数は、指定された URL への cURL リクエストを実行し、
7 * 特にアプリケーションレベルでの接続確立にかかった時間(appconnect_time)を含む
8 * 様々な接続パフォーマンス情報を表示します。
9 *
10 * phpinfo() の出力で 'curl' セクションを確認すると、cURL 拡張機能が有効になっているか、
11 * そのバージョンなどの詳細情報を視覚的に確認できます。
12 *
13 * @param string $url 接続情報を取得したい URL。
14 * @return void
15 */
16function displayCurlConnectionInfo(string $url): void
17{
18    // cURL 拡張機能がロードされているか確認します。
19    // ロードされていない場合、php.ini 設定で有効にする必要があります。
20    if (!extension_loaded('curl')) {
21        echo "エラー: cURL 拡張機能がロードされていません。\n";
22        echo "php.ini の設定を確認するか、phpinfo() の出力で cURL セクションが存在するか確認してください。\n";
23        return;
24    }
25
26    // cURL セッションを初期化します。
27    $ch = curl_init();
28
29    // セッション初期化が失敗した場合はエラーを出力して終了します。
30    if ($ch === false) {
31        echo "エラー: cURL セッションの初期化に失敗しました。\n";
32        return;
33    }
34
35    // cURL オプションを設定します。
36    // CURLOPT_URL: リクエストを送信する URL を設定します。
37    curl_setopt($ch, CURLOPT_URL, $url);
38    // CURLOPT_RETURNTRANSFER: curl_exec() の戻り値を文字列として取得するように設定します。
39    // これを true にしないと、レスポンスが直接出力されます。
40    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
41    // CURLOPT_SSL_VERIFYPEER と CURLOPT_SSL_VERIFYHOST:
42    // 本番環境ではセキュリティのため true に設定すべきですが、
43    // サンプルコードとして動作の安定性を優先する場合は一時的に false にすることもあります。
44    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
45    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
46
47    // cURL リクエストを実行します。
48    $response = curl_exec($ch);
49
50    // cURL リクエスト中にエラーが発生したか確認します。
51    if (curl_errno($ch)) {
52        echo "cURL エラー (" . curl_errno($ch) . "): " . curl_error($ch) . "\n";
53    } else {
54        // cURL セッションに関する様々な情報を取得します。
55        // curl_getinfo() は、接続時間、転送速度など、多くのパフォーマンス情報を含む連想配列を返します。
56        // CURLINFO_APPCONNECT_TIME は、その情報のキー 'appconnect_time' に対応します。
57        // これは、TCP 接続が確立し、SSL/SSH のハンドシェイクが完了するまでの時間を秒単位で示します。
58        $info = curl_getinfo($ch);
59
60        echo "--- cURL 接続情報 ---\n";
61        echo "URL: " . ($info['url'] ?? 'N/A') . "\n";
62        echo "HTTP ステータスコード: " . ($info['http_code'] ?? 'N/A') . "\n";
63        echo "名前解決時間 (namelookup_time): " . sprintf('%.4f', $info['namelookup_time'] ?? 0.0) . " 秒\n";
64        echo "接続時間 (connect_time): " . sprintf('%.4f', $info['connect_time'] ?? 0.0) . " 秒\n";
65        echo "アプリ接続時間 (appconnect_time): " . sprintf('%.4f', $info['appconnect_time'] ?? 0.0) . " 秒\n"; // CURLINFO_APPCONNECT_TIME の値
66        echo "プリトランスファー時間 (pretransfer_time): " . sprintf('%.4f', $info['pretransfer_time'] ?? 0.0) . " 秒\n";
67        echo "リダイレクト時間 (redirect_time): " . sprintf('%.4f', $info['redirect_time'] ?? 0.0) . " 秒\n";
68        echo "開始トランスファー時間 (starttransfer_time): " . sprintf('%.4f', $info['starttransfer_time'] ?? 0.0) . " 秒\n";
69        echo "合計時間 (total_time): " . sprintf('%.4f', $info['total_time'] ?? 0.0) . " 秒\n";
70
71        // レスポンス本文は非常に長くなる可能性があるため、ここでは表示しません。
72        // 必要であれば、以下のようにコメントを外して確認できます。
73        // echo "\n--- レスポンス本文(一部)---\n";
74        // echo substr($response, 0, 500) . (strlen($response) > 500 ? '...' : '') . "\n";
75    }
76
77    // cURL セッションを閉じ、リソースを解放します。
78    curl_close($ch);
79}
80
81// --- 実行例 ---
82// 実際にアクセス可能な HTTPS の URL を指定してください。
83// CURLINFO_APPCONNECT_TIME は特に HTTPS (SSL/TLS ハンドシェイク) 接続の場合に意味を持ちます。
84displayCurlConnectionInfo('https://www.php.net');
85
86// HTTP 接続の場合、appconnect_time は 0 または connect_time とほぼ同じ値になることがあります。
87// displayCurlConnectionInfo('http://example.com');

このPHPのサンプルコードは、cURL拡張機能を使用して指定されたURLへの接続情報を取得し、表示する方法を示しています。特に、Webサイトへのアプリケーションレベルの接続(主にSSL/TLSハンドシェイク)が確立するまでにかかった時間を秒単位で示すCURLINFO_APPCONNECT_TIME定数によって参照されるappconnect_timeという値を詳しく確認できます。

コードはまず、cURL拡張機能が利用可能かを確認し、利用できない場合はエラーメッセージを表示します。次に、curl_init()でcURLセッションを初期化し、curl_setopt()で接続先のURLや、レスポンスを文字列として受け取るためのオプションを設定します。curl_exec()でHTTPリクエストを実行した後、curl_getinfo()関数を使って接続に関する様々なパフォーマンス情報を取得します。この情報には、名前解決時間、TCP接続時間、そしてCURLINFO_APPCONNECT_TIMEが示すアプリケーション接続時間などが含まれます。取得した情報は整形して画面に出力されます。最後に、curl_close()でcURLセッションを閉じ、リソースを解放します。

phpinfo()関数を実行すると、PHPの設定情報の中に「curl」セクションが存在するかどうかで、cURL拡張機能が有効になっているかや、そのバージョンを確認することができます。

このサンプルコードの関数displayCurlConnectionInfoは、接続情報を取得したいURLをstring型の引数$urlとして受け取ります。処理結果は直接画面に出力されるため、戻り値はvoidです。

このサンプルコードは、cURL拡張機能がシステムにインストールされ、PHPで有効になっていることを前提としています。有効化されていない場合は、php.iniファイルを編集し、phpinfo()関数で確認すると良いでしょう。CURLINFO_APPCONNECT_TIMEは特にHTTPS接続でSSL/TLSハンドシェイクにかかる時間を示すため、HTTPSのURLで試すとその値をより明確に確認できます。本番環境での利用では、セキュリティ保護のためCURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOSTのオプションは必ず有効(true)に設定してください。また、cURLセッションの初期化失敗や実行時のエラーチェック、そしてcurl_close()によるリソースの解放は、堅牢なアプリケーション開発において非常に重要ですので、必ず実装してください。

関連コンテンツ

関連IT用語

関連プログラミング言語