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

【PHP8.x】getlastmod()関数の使い方

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

作成日: 更新日:

基本的な使い方

getlastmod関数は、現在実行されているPHPスクリプトファイルの最終更新時刻を取得する関数です。この関数は、ウェブサーバー上で動作するPHPスクリプトがいつ最後に更新されたかを確認したい場合に非常に役立ちます。例えば、ウェブサイトの訪問者に対して、ページのフッターに「このページはYYYY年MM月DD日に更新されました」といった形で最終更新日を表示する際や、スクリプトのキャッシュがまだ有効であるかどうかの判断基準として利用する場面が考えられます。

この関数は引数を必要としません。実行されると、現在のスクリプトファイルが最後に変更された日時をUNIXタイムスタンプ形式で返します。UNIXタイムスタンプとは、1970年1月1日0時0分0秒(UTC)からの経過秒数を表す数値のことで、プログラミングにおいて日付や時刻を内部的に扱う際によく用いられる形式です。取得したタイムスタンプは、PHPのdate()関数などを用いることで、「2023-10-27 10:30:00」のような人間が読みやすい日付と時刻の文字列に簡単に変換できます。もし、何らかのシステム的な問題により最終更新時刻の取得に失敗した場合、この関数はブール値のfalseを返します。そのため、関数の戻り値がfalseでないことを確認することで、処理が成功したかどうかを判断し、適切にエラーハンドリングを行うことが重要です。getlastmod関数は、ウェブコンテンツの鮮度をユーザーに伝えたり、サーバーサイドでのファイル管理や更新状況のトラッキングを行う上で、シンプルながらも非常に便利な機能を提供します。

構文(syntax)

1<?php
2$lastModificationTime = getlastmod();
3?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int|false

指定されたファイルが最後に変更されたUnixタイムスタンプ(1970年1月1日午前0時0分0秒からの経過秒数)を返します。ファイルが存在しない、または読み込み権限がない場合はfalseを返します。

サンプルコード

PHP getlastmod() で最終更新日時を取得する

1<?php
2
3/**
4 * 現在実行中のスクリプトファイルの最終更新日時を取得し、
5 * HTTPのLast-Modifiedヘッダーとして設定するサンプルコード。
6 */
7
8// 現在のスクリプトファイルの最終更新日時(Unixタイムスタンプ)を取得します。
9// 取得に失敗した場合は false を返します。
10$lastModifiedTimestamp = getlastmod();
11
12// 最終更新日時の取得が成功したかを確認します。
13if ($lastModifiedTimestamp !== false) {
14    // HTTPヘッダーで使用する形式(RFC 7231 / HTTP-date 形式)に日時をフォーマットします。
15    // GMT(グリニッジ標準時)でフォーマットすることが推奨されます。
16    $httpLastModifiedDate = gmdate('D, d M Y H:i:s T', $lastModifiedTimestamp);
17
18    // Last-Modified HTTPヘッダーを設定します。
19    // これにより、ブラウザやプロキシがページのキャッシュ状態を判断できるようになります。
20    header('Last-Modified: ' . $httpLastModifiedDate);
21
22    // HTTP 200 OK のステータスコードを明示的に設定することもできます(オプション)。
23    // header('HTTP/1.1 200 OK');
24
25    // ページの内容を出力します。
26    echo '<h1>現在のページの最終更新日時</h1>';
27    echo '<p>このPHPスクリプトファイルは ';
28    // ユーザーが見やすい形式で日時を出力します(ローカルタイムゾーン)。
29    echo date('Y年m月d日 H時i分s秒', $lastModifiedTimestamp);
30    echo ' に最終更新されました。</p>';
31    echo '<p>設定されたHTTPヘッダー: <code>Last-Modified: ' . htmlspecialchars($httpLastModifiedDate) . '</code></p>';
32} else {
33    // 最終更新日時の取得に失敗した場合の処理。
34    // 通常、Webサーバーがスクリプトファイルの情報を取得できない場合に発生します。
35    header('HTTP/1.1 500 Internal Server Error'); // エラーを示すステータスコード
36    echo '<h1>エラー: 最終更新日時を取得できませんでした。</h1>';
37    echo '<p>ファイルの情報が読み取れないか、存在しない可能性があります。</p>';
38}
39
40?>

PHP 8のgetlastmod関数は、現在実行中のPHPスクリプトファイルの最終更新日時をUnixタイムスタンプ形式で取得します。この関数は引数を取らず、成功時には整数値(Unixタイムスタンプ)を、失敗時にはfalseを返します。

サンプルコードでは、このgetlastmod関数を使用してスクリプトファイルの最終更新日時を取得し、その情報をHTTPのLast-ModifiedヘッダーとしてWebブラウザに伝える方法を示しています。まず、getlastmod()で最終更新日時を取得し、取得に成功したかどうかをfalseと比較して判断します。

取得に成功した場合、取得したUnixタイムスタンプをgmdate関数でHTTPヘッダーに適したGMT(グリニッジ標準時)形式の日付文字列にフォーマットします。その後、header()関数を使ってLast-Modifiedヘッダーを設定し、ブラウザがページのキャッシュ状態を適切に管理できるよう促します。ページの内容として、ユーザーが見やすい形式に変換した最終更新日時も表示しています。

もしgetlastmod()falseを返した場合、それはファイルの情報を読み取れなかったことを意味します。この場合、サンプルコードはエラーメッセージを表示し、HTTPステータスコードを500 Internal Server Errorに設定して、問題が発生したことをクライアントに通知します。これにより、Webサイトのパフォーマンス向上と適切なエラーハンドリングの両立が可能です。

getlastmod() 関数は、スクリプトの最終更新日時をUnixタイムスタンプで返しますが、取得に失敗する可能性もあるため、必ず戻り値が false でないかを確認する処理を入れてください。HTTPの Last-Modified ヘッダーを設定する際は、gmdate() 関数を使ってグリニッジ標準時(GMT)かつRFC 7231の形式で日時をフォーマットする必要があります。header() 関数は、ウェブページの内容(echo など)を出力する前に呼び出すようにしてください。もし最終更新日時が取得できない場合は、HTTP/1.1 500 Internal Server Error のように適切なエラーを返すことで、利用者に問題が伝わりやすくなります。表示用の日時とHTTPヘッダー用の日時では、推奨されるフォーマットが異なる点にも注意が必要です。

PHP getlastmod() で最終更新時刻とエラーを確認する

1<?php
2
3/**
4 * 現在のスクリプトファイルの最終更新時刻を取得し、
5 * getlastmod() が返す false の場合の処理と、関連する error_get_last() の挙動を示します。
6 *
7 * getlastmod() 関数は、通常、現在のスクリプトファイルに対しては成功するため、
8 * false を返すことは稀です。この例は、万が一 false が返された場合のエラー処理と、
9 * getlastmod() が PHP のエラーメッセージをセットしないという特性を示すものです。
10 */
11function displayCurrentScriptLastModifiedTime(): void
12{
13    // getlastmod() 関数は引数なしの場合、現在実行中のスクリプトファイルの最終更新時刻を返します。
14    // 成功した場合は Unix タイムスタンプ (int) を、失敗した場合は false を返します。
15    $lastModified = getlastmod();
16
17    if ($lastModified === false) {
18        // getlastmod() が false を返した場合(通常は非常に稀なケース)
19        echo "エラー: 現在のスクリプトファイルの最終更新時刻を取得できませんでした。\n";
20
21        // キーワード「php get last error」に関連して、error_get_last() を試みます。
22        // しかし、getlastmod() は PHP のエラーメッセージを内部的にセットしないため、
23        // この場合 error_get_last() は通常 NULL を返します。
24        $lastError = error_get_last();
25
26        if ($lastError !== null) {
27            // PHP の直近のエラー情報がある場合
28            echo "直近のPHPエラー: " . $lastError['message'] . " (ファイル: " . $lastError['file'] . ", 行: " . $lastError['line'] . ")\n";
29        } else {
30            // error_get_last() でエラー情報が検出されなかった場合
31            echo "getlastmod() 関数は、PHP のエラーメッセージを error_get_last() 用にセットしません。\n";
32        }
33    } else {
34        // 最終更新時刻が正常に取得できた場合
35        echo "現在のスクリプトファイルの最終更新時刻: " . date('Y-m-d H:i:s', $lastModified) . " (Unixタイムスタンプ: {$lastModified})\n";
36    }
37}
38
39// 関数を実行
40displayCurrentScriptLastModifiedTime();

PHPのgetlastmod()関数は、現在実行中のPHPスクリプトファイルの最終更新時刻を取得するために使用されます。この関数は引数を持ちません。処理が成功すると、ファイルの最終更新時刻をUnixタイムスタンプ(1970年1月1日 00:00:00 UTCからの経過秒数を示す整数値)として返します。もし何らかの理由で時刻の取得に失敗した場合は、falseを返します。

提供されたサンプルコードでは、まずgetlastmod()を呼び出し、その結果を変数に格納しています。もし取得が成功し、整数値(Unixタイムスタンプ)が返された場合、date()関数を使ってそのタイムスタンプを「年-月-日 時:分:秒」形式の読みやすい日付文字列に変換して表示しています。

一方、getlastmod()falseを返した場合(現在のスクリプトファイルに対する操作のため、この状況は通常非常に稀です)のエラー処理も示されています。ここでは「php get last error」のキーワードに関連してerror_get_last()関数を用いて直近のPHPエラー情報を確認していますが、getlastmod()関数は、たとえ失敗してもerror_get_last()で取得されるPHP内部のエラーメッセージをセットしない特性があります。そのため、この場合error_get_last()NULLを返し、その旨が表示されます。このサンプルは、関数の基本的な使い方に加え、戻り値の型に応じた適切なエラーハンドリングと、特定の関数がPHPのエラー報告メカニズムにどのように影響するかを示しています。

getlastmod() 関数は、現在実行中のPHPスクリプトファイルの最終更新時刻をUnixタイムスタンプ(整数)で取得します。この関数は引数なしで実行すると自身のファイル時刻を返しますが、失敗時には false を返すため、戻り値の厳密な === false チェックとエラー処理の実装が必須です。ただし、false が返されることは非常に稀なケースと理解してください。特に重要なのは、getlastmod() が失敗しても、PHPの error_get_last() 関数でエラーメッセージを取得できない点です。これは、一部の関数がPHPのエラー機構に情報をセットしない特性を持つため、エラー原因を詳細に特定できないことに注意が必要です。取得した整数値のタイムスタンプは、date() 関数などを利用して適切な日時形式に変換して表示してください。

関連コンテンツ

関連IT用語

関連プログラミング言語