【PHP8.x】SplFileInfo::getMTime()メソッドの使い方
getMTimeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getMTimeメソッドは、ファイルやディレクトリの最終更新時刻(Modification Time)を取得するメソッドです。このメソッドは、PHPの標準ライブラリ(Standard PHP Library、通称SPL)に含まれるSplFileInfoクラスに属しており、ファイルシステムに関する詳細な情報をオブジェクト指向的に効率良く扱うための機能を提供します。具体的には、対象のファイルが最後に書き込まれたり変更されたりした日時をUNIXタイムスタンプという整数値で返します。UNIXタイムスタンプとは、1970年1月1日0時0分0秒(協定世界時、UTC)からの経過秒数を表す数値であり、この値をdate()関数などのPHPのタイムスタンプ操作関数と組み合わせることで、人間が理解しやすい形式の日時に変換することができます。
このメソッドを利用することで、ファイルがいつ更新されたのかを確認したり、複数のファイルの更新順序を比較したりすることが可能になります。例えば、ウェブサイトのキャッシュファイルの有効期限を判断したり、設定ファイルの変更を監視したりするような場面で非常に役立ちます。
ファイルが存在しない場合や、アクセス権がないなどの理由で最終更新時刻の取得に失敗した場合には、このメソッドはfalseを返します。そのため、メソッドの返り値をチェックし、falseでないことを確認してから処理を進めることが重要です。ファイルシステムの健全性を確認したり、アプリケーションの動作を制御したりする上で、getMTimeメソッドは不可欠な基本的な機能の一つと言えるでしょう。
構文(syntax)
1<?php 2$fileInfo = new SplFileInfo('path/to/your/file.txt'); 3$lastModifiedTime = $fileInfo->getMTime(); 4?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int|false
SplFileInfo::getMTime() は、ファイルの最終更新時刻をUnixタイムスタンプ(1970年1月1日午前0時からの経過秒数)として整数で返します。ファイルが存在しない場合や読み取り権限がない場合は false を返します。
サンプルコード
PHP: SplFileInfo::getMTime でファイルの最終更新日時を取得する
1<?php 2 3/** 4 * SplFileInfo::getMTime メソッドの動作を示すサンプルコードです。 5 * ファイルの最終更新日時(UNIXタイムスタンプ)を取得する方法を示します。 6 * 7 * @return void 8 */ 9function demonstrateSplFileInfoGetMTime(): void 10{ 11 // 一時ファイルを作成するためのパスを決定します。 12 // sys_get_temp_dir() はシステムの一時ディレクトリのパスを返します。 13 // tempnam() は指定されたディレクトリに一意なファイル名を生成し、ファイルを作成します。 14 $tempFilePath = tempnam(sys_get_temp_dir(), 'example_'); 15 16 if ($tempFilePath === false) { 17 echo "エラー: 一時ファイルの作成に失敗しました。\n"; 18 return; 19 } 20 21 // 作成した一時ファイルに内容を書き込みます。 22 // これによりファイルの最終更新日時が記録されます。 23 if (file_put_contents($tempFilePath, "このファイルはテスト用です。\n") === false) { 24 echo "エラー: 一時ファイルへの書き込みに失敗しました。\n"; 25 // 失敗した場合でもファイルを削除を試みます。 26 unlink($tempFilePath); 27 return; 28 } 29 30 echo "一時ファイルを作成しました: " . $tempFilePath . "\n"; 31 32 // SplFileInfo オブジェクトを作成します。 33 // このオブジェクトを通じてファイルの情報にアクセスします。 34 $fileInfo = new SplFileInfo($tempFilePath); 35 36 // getMTime メソッドを呼び出して、ファイルの最終更新タイムスタンプを取得します。 37 // 成功した場合はUNIXタイムスタンプ(整数)、失敗した場合は false を返します。 38 $mtime = $fileInfo->getMTime(); 39 40 if ($mtime === false) { 41 echo "エラー: ファイルの最終更新タイムスタンプを取得できませんでした。\n"; 42 } else { 43 // 取得したUNIXタイムスタンプを人間が読みやすい日付形式に変換します。 44 $formattedMtime = date('Y-m-d H:i:s', $mtime); 45 echo "ファイルの最終更新日時: " . $formattedMtime . " (UNIXタイムスタンプ: " . $mtime . ")\n"; 46 } 47 48 // テスト後に作成した一時ファイルを削除します。 49 if (unlink($tempFilePath)) { 50 echo "一時ファイルを削除しました: " . $tempFilePath . "\n"; 51 } else { 52 echo "エラー: 一時ファイルの削除に失敗しました: " . $tempFilePath . "\n"; 53 } 54} 55 56// 関数を実行して、SplFileInfo::getMTime の動作を確認します。 57demonstrateSplFileInfoGetMTime(); 58 59?>
PHP 8のSplFileInfo::getMTimeメソッドは、指定したファイルの最終更新日時をUNIXタイムスタンプ形式で取得するために使用されます。このメソッドはPHPのファイルシステム操作をオブジェクト指向的に扱うためのSplFileInfoクラスに属しており、ファイルに関する様々な情報にアクセスできます。
getMTimeメソッドは引数を必要としません。戻り値としては、処理が成功した場合にはファイルの最終更新日時を示す整数値のUNIXタイムスタンプを返します。もしファイルが存在しない、またはアクセス権がないなどの理由で情報の取得に失敗した場合はfalseを返します。
サンプルコードでは、まずシステムの一時ディレクトリにファイルを作成し、内容を書き込むことでそのファイルの最終更新日時を記録しています。次に、作成した一時ファイルのパスを使ってSplFileInfoオブジェクトを生成し、そのオブジェクトからgetMTimeメソッドを呼び出しています。取得されたUNIXタイムスタンプは、date関数を利用して「年-月-日 時:分:秒」といった人間が読みやすい形式に変換して表示しています。この機能は、ファイルの更新状況を確認し、ログの記録やキャッシュの無効化など、ファイルの最終更新日時に基づく処理を実装する際に役立ちます。
SplFileInfo::getMTime メソッドは、ファイルの最終更新日時をUNIXタイムスタンプ(整数)で返しますが、取得に失敗すると false を返します。そのため、戻り値が false でないかを === false のように厳密に確認するエラーハンドリングが必須です。取得した値はUNIXタイムスタンプですので、そのままでは読みにくいため、date() 関数などを利用して「YYYY-MM-DD HH:MM:SS」のような人間が読みやすい形式に変換して表示すると良いでしょう。また、ファイル作成や書き込み、削除といった操作は、エラーが発生する可能性があるため、常に成功したかを確認し、エラー時には適切な対処を行う習慣が重要です。特に一時ファイルを扱う場合は、処理完了後に必ず削除するよう注意してください。