【PHP8.x】FilesystemIterator::getMTime()メソッドの使い方
getMTimeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getMTimeメソッドは、FilesystemIteratorオブジェクトが現在ポイントしているファイルまたはディレクトリの最終更新時刻(Modification Time)を取得するメソッドです。
このメソッドは、ファイルシステム上の指定された項目が最後に変更された日時をUnixタイムスタンプとして返します。Unixタイムスタンプとは、1970年1月1日00:00:00協定世界時(UTC)から現在までの経過秒数を表す整数値のことです。取得したタイムスタンプは、PHPのdate()関数など他の日付・時刻関連関数と組み合わせることで、人間が読みやすい形式に変換できます。
システムエンジニアがファイルの更新状況を監視したり、ウェブアプリケーションでキャッシュの有効期限を管理したりする際に非常に有用です。例えば、ファイルの更新時刻に基づいてキャッシュをクリアするロジックを実装する際に利用されます。ファイルのアクセス権限の問題など、何らかの理由で更新時刻を取得できなかった場合は、falseが返される可能性がありますので、戻り値の確認は重要です。このメソッドを利用することで、ファイルやディレクトリのライフサイクルにおける重要な情報にプログラムからアクセスできるようになります。
構文(syntax)
1<?php 2$iterator = new FilesystemIterator(__DIR__); 3 4$iterator->rewind(); 5 6$lastModifiedTime = 0; 7 8if ($iterator->valid()) { 9 $lastModifiedTime = $iterator->getMTime(); 10}
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
FilesystemIterator::getMTime は、イテレータが現在指しているファイルまたはディレクトリの最終更新時刻をUnixタイムスタンプ(秒単位の整数)で返します。
サンプルコード
PHP FilesystemIterator::getMTimeで最終更新日時を取得する
1<?php 2 3// 動作確認用のテンポラリディレクトリとファイルを作成します。 4$tempDir = __DIR__ . '/temp_filesystem_example'; 5$tempFile = $tempDir . '/sample.txt'; 6 7// テンポラリディレクトリが存在しない場合、作成します。 8if (!file_exists($tempDir)) { 9 mkdir($tempDir, 0777, true); 10} 11 12// テンポラリファイルを作成し、内容を書き込みます。 13file_put_contents($tempFile, 'これはFilesystemIterator::getMTime()のテストファイルです。'); 14 15echo "--- FilesystemIterator::getMTime() の使用例 ---\n\n"; 16 17try { 18 // FilesystemIterator のインスタンスを作成します。 19 // 指定されたディレクトリ内のエントリを繰り返し処理するために使用します。 20 $iterator = new FilesystemIterator($tempDir); 21 22 // ディレクトリ内の各エントリ(ファイルやディレクトリ)をループ処理します。 23 foreach ($iterator as $fileInfo) { 24 // 現在のエントリの名前を取得します。 25 $fileName = $iterator->getFilename(); 26 27 // FilesystemIterator::getMTime() メソッドを使用して、最終更新日時 (UNIXタイムスタンプ) を取得します。 28 // 戻り値は整数 (int) です。 29 $mTime = $iterator->getMTime(); 30 31 // UNIXタイムスタンプを人間が読みやすい形式に変換します。 32 $formattedMTime = date('Y-m-d H:i:s', $mTime); 33 34 echo "ファイル名: " . $fileName . "\n"; 35 echo " 最終更新日時 (UNIXタイムスタンプ): " . $mTime . "\n"; 36 echo " 最終更新日時 (読みやすい形式): " . $formattedMTime . "\n\n"; 37 } 38} catch (UnexpectedValueException $e) { 39 // 指定されたパスが無効な場合(ディレクトリが存在しないなど)のエラーを処理します。 40 echo "エラー: " . $e->getMessage() . "\n"; 41} finally { 42 // 動作確認後に作成したテンポラリファイルとディレクトリをクリーンアップします。 43 if (file_exists($tempFile)) { 44 unlink($tempFile); 45 } 46 if (file_exists($tempDir)) { 47 rmdir($tempDir); 48 } 49 echo "--- テンポラリファイルとディレクトリをクリーンアップしました。 ---\n"; 50} 51 52?>
FilesystemIterator::getMTime()メソッドは、PHPのFilesystemIteratorクラスに属し、現在イテレータが指し示しているファイルやディレクトリの最終更新日時を取得するために使用されます。
このメソッドは引数を取らずに呼び出し、戻り値としてint型のUNIXタイムスタンプを返します。UNIXタイムスタンプとは、1970年1月1日00:00:00 UTCからの経過秒数を示す整数値です。
取得したタイムスタンプは、サンプルコードのようにdate()関数などと組み合わせることで、「YYYY-MM-DD HH:II:SS」のような人間が読みやすい形式に変換して表示できます。
ファイルがいつ最後に変更されたかを確認する目的で、ファイルシステムの操作を伴う多くのシステム開発で活用される重要な機能です。
サンプルコードでは、動作確認用の一時的なファイルを作成し、FilesystemIteratorでそのファイルを走査しながらgetMTime()メソッドを使って最終更新日時を取得し、表示する一連の具体的な流れを確認できます。
FilesystemIterator::getMTime()は、ファイルの最終更新日時をUNIXタイムスタンプ(整数値)として返します。この値は直接は読みにくいため、date()関数などで人間が読みやすい形式に変換してください。FilesystemIteratorは現在指しているエントリの情報を取得するため、ループ処理中のどこで情報を取得しているか意識することが重要です。指定されたパスが無効な場合やアクセス権がない場合は例外が発生し得るので、try-catchによるエラーハンドリングでプログラムが停止しないように備えましょう。また、サンプルコードのように一時ファイルを作成した場合は、必ずfinallyブロックなどで適切に削除し、システムをクリーンに保つことが重要です。