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

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

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

作成日: 更新日:

基本的な使い方

CURLINFO_FILETIME_T定数は、PHPのcURL拡張機能において、ファイルの時間情報がどのようなデータ型で扱われるかを示す定数です。cURL拡張機能は、HTTPやFTPなど様々なプロトコルを通じてネットワーク通信を行い、リモートのファイルやウェブページから情報を取得する際に利用されます。

この定数 CURLINFO_FILETIME_T は、直接コード内で設定や取得に使うものではなく、主に curl_getinfo() 関数を通じて得られるリモートリソースの時間情報の形式を定義するために存在します。具体的には、curl_getinfo()CURLINFO_FILETIME オプションを指定してリモートファイルの最終更新日時を取得すると、その値は「Unixタイムスタンプ」という整数形式で返されますが、CURLINFO_FILETIME_T はそのデータ型がtime_t(Unixタイムスタンプ)であることを示しています。Unixタイムスタンプは、1970年1月1日00:00:00 UTCからの経過秒数です。

したがって、CURLINFO_FILETIME_T は、CURLINFO_FILETIME オプションで取得されるファイル時刻がUnixタイムスタンプであることを開発者に間接的に伝える役割を持ちます。この定数自体を直接利用することは稀ですが、cURLが返す時間データの形式を正確に理解し、PHPの日付・時刻関数と適切に連携させる上で、その背景となる型情報を示す重要なものです。

構文(syntax)

1<?php
2$ch = curl_init();
3curl_setopt($ch, CURLOPT_URL, "https://example.com");
4curl_exec($ch);
5$filetime = curl_getinfo($ch, CURLINFO_FILETIME_T);
6curl_close($ch);
7?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP cURLでリモートファイル更新時刻を取得する

1<?php
2
3/**
4 * 指定されたURLのリモートファイルの最終更新タイムスタンプを取得します。
5 *
6 * この関数は、cURL拡張機能を使用してリモートサーバーのファイル情報を取得し、
7 * 特にCURLINFO_FILETIME_T定数を使って最終更新日時 (Unixタイムスタンプ) を抽出します。
8 * CURLINFO_FILETIME_Tは、CURLOPT_FILETIMEオプションが有効な場合に機能します。
9 *
10 * @param string $url ファイルタイムスタンプを取得する対象のURL。
11 * @return int|false 成功した場合はUnixタイムスタンプ (秒単位)、失敗した場合はfalse。
12 */
13function getRemoteFileLastModifiedTimestamp(string $url): int|false
14{
15    // cURLセッションを初期化します。
16    // これはHTTPリクエストを行うための準備です。
17    $ch = curl_init();
18
19    // cURLの初期化に失敗した場合、エラーメッセージを表示して終了します。
20    if ($ch === false) {
21        error_log("cURLセッションの初期化に失敗しました。");
22        return false;
23    }
24
25    // cURLオプションを設定します。
26    // 各オプションは、HTTPリクエストの動作を細かく制御します。
27
28    // 取得したいURLを指定します。
29    curl_setopt($ch, CURLOPT_URL, $url);
30
31    // リモートファイルのタイムスタンプを取得するように設定します。
32    // このオプションがtrueでないと、CURLINFO_FILETIME_Tは有効な値を返しません。
33    curl_setopt($ch, CURLOPT_FILETIME, true);
34
35    // HTTPヘッダーのみを取得し、ファイル本体 (ボディ) はダウンロードしないようにします。
36    // タイムスタンプのみが必要な場合、これは帯域幅を節約し、高速化します。
37    curl_setopt($ch, CURLOPT_NOBODY, true);
38
39    // curl_exec()の戻り値を文字列として返すように設定します。
40    // CURLOPT_NOBODYがtrueの場合、これは空文字列になります。
41    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
42
43    // HTTPステータスコードが400以上 (クライアントエラーやサーバーエラー) の場合に
44    // cURLがエラーを発生させるようにします。
45    curl_setopt($ch, CURLOPT_FAILONERROR, true);
46
47    // HTTPリダイレクトを自動的に追跡するようにします。
48    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
49
50    // cURLセッションを実行し、HTTPリクエストを送信します。
51    curl_exec($ch);
52
53    // cURLリクエストの実行中にエラーが発生したかどうかを確認します。
54    if (curl_errno($ch)) {
55        error_log("cURLエラーが発生しました: " . curl_error($ch));
56        // エラーが発生した場合、cURLセッションを閉じます。
57        curl_close($ch);
58        return false;
59    }
60
61    // CURLINFO_FILETIME_T定数を使用して、リモートファイルの最終更新タイムスタンプを取得します。
62    // PHP 8では、CURLINFO_FILETIME_TはCURLINFO_FILETIMEと同じ値を返しますが、
63    // より型安全な取得方法として推奨されます。
64    // 取得できない場合、-1が返されます。
65    $filetime = curl_getinfo($ch, CURLINFO_FILETIME_T);
66
67    // cURLセッションを終了し、関連するリソースを解放します。
68    curl_close($ch);
69
70    // タイムスタンプが取得できなかった場合 (-1 が返された場合)
71    if ($filetime === -1) {
72        error_log("リモートファイルのタイムスタンプを取得できませんでした。");
73        return false;
74    }
75
76    // 取得したUnixタイムスタンプを返します。
77    return $filetime;
78}
79
80// サンプルコードの使用例:
81// PHP公式サイトのロゴ画像ファイルのタイムスタンプを取得してみます。
82$targetUrl = "https://www.php.net/images/php.gif";
83
84echo "対象URL: " . $targetUrl . "\n\n";
85
86$timestamp = getRemoteFileLastModifiedTimestamp($targetUrl);
87
88if ($timestamp !== false) {
89    echo "リモートファイルの最終更新タイムスタンプ (Unix形式): " . $timestamp . "\n";
90    // Unixタイムスタンプを人間が読める日付形式に変換して表示します。
91    echo "リモートファイルの最終更新日時: " . date('Y-m-d H:i:s', $timestamp) . "\n";
92} else {
93    echo "エラー: ファイルタイムスタンプの取得に失敗しました。\n";
94}
95
96?>

このPHPサンプルコードは、cURL拡張機能を用いて、指定されたURLのリモートファイルの最終更新タイムスタンプを取得する方法を示しています。特にCURLINFO_FILETIME_Tは、curl_getinfo()関数と組み合わせて使用される定数で、リモートサーバーのファイル更新日時をUnixタイムスタンプ(秒単位)として抽出するために利用されます。

getRemoteFileLastModifiedTimestamp関数は、タイムスタンプを取得したい対象のURLを引数 $url として受け取ります。関数内部では、まずcURLセッションを初期化し、CURLOPT_FILETIMEオプションをtrueに設定することで、ファイルのタイムスタンプ取得を有効化しています。この設定がなければ、CURLINFO_FILETIME_Tは有効な値を返しません。また、CURLOPT_NOBODYtrueに設定することで、ファイル本体をダウンロードせずにヘッダー情報のみを取得し、効率的な処理を実現しています。

curl_exec()でHTTPリクエストが実行された後、curl_getinfo()関数とCURLINFO_FILETIME_T定数を使って、取得した最終更新タイムスタンプが抽出されます。PHP 8では、この定数はより型安全な値の取得方法として推奨されます。取得に成功した場合はUnixタイムスタンプ(整数)が戻り値として返され、何らかの理由で取得に失敗した場合はfalseが返されます。この機能により、リモートファイルの状態確認やキャッシュ管理などの基本的な処理をシステムエンジニアの初心者が理解し、実装する上で役立ちます。

このサンプルコードは、リモートファイルの最終更新日時を効率的に取得する方法を示しています。CURLINFO_FILETIME_T定数を利用する際は、必ずCURLOPT_FILETIMEオプションをtrueに設定してください。この設定がないとタイムスタンプは取得できず、-1が返されるため、取得結果の確認が重要です。curl_initで開始したcURLセッションは、処理の成功・失敗にかかわらず、curl_closeで確実にリソースを解放してください。curl_exec実行時のエラーや、タイムスタンプが-1であった場合の適切なエラーハンドリングも不可欠です。また、CURLOPT_NOBODYオプションをtrueにすると、ファイル本体をダウンロードせずヘッダー情報のみでタイムスタンプを取得できるため、ネットワーク負荷を軽減できます。

PHP cURLでHTTPコードとファイルタイムを取得する

1<?php
2
3/**
4 * 指定されたURLに対してcURLリクエストを送信し、
5 * HTTPステータスコードとファイルの最終変更時刻(ファイルタイム)を取得して表示します。
6 *
7 * この関数は、cURLが提供する情報取得機能の一部(curl_getinfo)を初心者向けに示します。
8 * CURLINFO_HTTP_CODEはHTTPレスポンスの状態を示し、
9 * CURLINFO_FILETIME_Tはリモートリソースの最終変更タイムスタンプを示します。
10 *
11 * @param string $url リクエストを送信するターゲットURL。
12 * @return void
13 */
14function fetchCurlInfoExample(string $url): void
15{
16    // cURLセッションを初期化します。
17    $ch = curl_init();
18
19    if ($ch === false) {
20        echo "cURLセッションの初期化に失敗しました。\n";
21        return;
22    }
23
24    // ターゲットURLを設定します。
25    curl_setopt($ch, CURLOPT_URL, $url);
26
27    // レスポンスのコンテンツを文字列として取得し、直接出力しないようにします。
28    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
29
30    // HTTPリダイレクトを自動的に追跡するように設定します。
31    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
32
33    // リクエストを実行します。
34    // 実際のレスポンスボディは $response に格納されますが、ここでは表示しません。
35    $response = curl_exec($ch);
36
37    // cURLリクエスト中にエラーが発生したかを確認します。
38    if (curl_errno($ch)) {
39        echo "cURLエラーが発生しました: " . curl_error($ch) . "\n";
40    } else {
41        // キーワードにも含まれる CURLINFO_HTTP_CODE を使って、HTTPステータスコードを取得します。
42        // 例: 200 (OK), 404 (Not Found), 500 (Internal Server Error) など。
43        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
44        echo "HTTPステータスコード: " . $httpCode . "\n";
45
46        // リファレンス情報にある CURLINFO_FILETIME_T を使って、リモートファイルの最終変更時刻を取得します。
47        // この値はUnixタイムスタンプで返されます。不明な場合は -1 が返されます。
48        $fileTime = curl_getinfo($ch, CURLINFO_FILETIME_T);
49
50        if ($fileTime !== -1) {
51            echo "ファイルのタイムスタンプ (Unix時間): " . $fileTime . "\n";
52            // タイムスタンプを読みやすい日付時刻形式に変換して表示します。
53            echo "最終変更日時: " . date('Y-m-d H:i:s', $fileTime) . "\n";
54        } else {
55            echo "ファイルのタイムスタンプは取得できませんでした。\n";
56        }
57    }
58
59    // cURLセッションを閉じ、リソースを解放します。
60    curl_close($ch);
61}
62
63// 実際の使用例: アクセス可能な任意のURLを指定してください。
64// 例としてGoogleのホームページを使用します。
65$targetUrl = 'https://www.google.com';
66
67echo "URL: " . $targetUrl . " へのcURLリクエスト情報を取得します。\n";
68fetchCurlInfoExample($targetUrl);
69
70echo "\n別のURL (例: 存在しないURL) の情報を取得します。\n";
71$invalidUrl = 'https://www.example.com/non_existent_page_12345';
72fetchCurlInfoExample($invalidUrl);
73
74?>

このPHPサンプルコードは、cURLライブラリを使用して指定されたURLの情報を取得し、HTTPステータスコードとファイルの最終変更時刻を表示する方法を示しています。

まず、curl_init()関数でcURLセッションを初期化し、curl_setopt()関数でアクセス先のURLや、レスポンスを直接出力せずに文字列として取得する設定、リダイレクトを自動で追跡する設定などを行います。

次に、curl_exec()関数で実際のHTTPリクエストを実行します。リクエスト中にエラーが発生した場合はcurl_errno()curl_error()でエラー情報を表示します。

リクエストが成功した場合、curl_getinfo()関数を用いて様々な情報を取得します。CURLINFO_HTTP_CODE定数を引数に渡すと、HTTPステータスコード(例: 200 OK, 404 Not Foundなど)が取得できます。一方、CURLINFO_FILETIME_T定数を引数に渡すと、リモートファイルの最終変更時刻がUnixタイムスタンプ形式で返されます。この定数自体に引数はなく、curl_getinfo()の挙動を制御するものです。取得できない場合は-1が戻り値として返されるため、その場合は情報が取得できなかった旨を表示します。取得できたタイムスタンプはdate()関数で人間が読みやすい形式に変換して表示します。

最後に、curl_close()関数でcURLセッションを閉じ、リソースを解放しています。この一連の処理により、ウェブサイトのリソースに関する重要な情報を効率的に取得できることを示しています。

このサンプルコードでは、curl_getinfo()を使ってHTTPステータスコードとファイルのタイムスタンプを取得しています。CURLINFO_FILETIME_Tでファイルの最終変更時刻を取得できない場合、値が-1で返されるため、取得可否の確認が重要です。取得できたUnixタイムスタンプは、date()関数で読みやすい日付時刻形式に変換すると良いでしょう。cURL操作では、curl_exec()の実行後に必ずcurl_errno()でエラーが発生していないか確認し、処理の最後にはcurl_close()でリソースを確実に解放する習慣が大切です。これらのエラーハンドリングとリソース管理は、安定したプログラム作成に不可欠な要素となります。

関連コンテンツ

関連IT用語

関連プログラミング言語