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

【PHP8.x】SplFileObject::getMTime()メソッドの使い方

getMTimeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getMTimeメソッドは、SplFileObjectクラスのインスタンスが表すファイルの最終更新時刻を取得するために実行するメソッドです。このメソッドは、ファイルシステム上でファイルが最後に変更された日時を、UNIXタイムスタンプという数値形式で返します。UNIXタイムスタンプとは、1970年1月1日00:00:00 UTC(協定世界時)からの経過秒数を整数で表したものです。

この最終更新時刻は、ファイルのキャッシュ管理、更新順でのファイルソート、または新しいコンテンツの検出などに利用できます。例えば、Webサイトのコンテンツがいつ更新されたかを確認したり、ログファイルの最新のエントリーを追跡したりする際に役立ちます。取得したタイムスタンプは、PHPのdate()関数などを使用することで、人間が読みやすい日付と時刻の形式に変換して表示することが可能です。

メソッドが成功した場合、ファイルの最終更新時刻を示す整数値が返されます。しかし、対象ファイルが存在しない、ファイルへのアクセス権限がない、あるいは何らかのファイルシステム関連のエラーが発生した場合は、このメソッドはboolean値のfalseを返します。プログラムの安定性を確保するためには、メソッドの戻り値がfalseでないことを必ず確認し、エラーを適切に処理することが重要です。この確認を怠ると、予期せぬエラーや誤動作につながる可能性があります。

構文(syntax)

1<?php
2$filename = 'temp_file_for_getmtime.txt';
3file_put_contents($filename, 'This is a test file.'); // 例を実行するための一時ファイルを作成
4
5$fileObject = new SplFileObject($filename);
6$modificationTime = $fileObject->getMTime(); // ファイルの最終変更時刻 (UNIXタイムスタンプ) を取得
7
8echo $modificationTime; // 取得した時刻を出力
9
10unlink($filename); // 一時ファイルを削除
11?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int|false

このメソッドは、SplFileObjectオブジェクトが表すファイルの最終更新時刻をUNIXタイムスタンプ(秒単位)で返します。処理に失敗した場合はfalseを返します。

サンプルコード

PHP SplFileObject::getMTimeで最終更新時刻を取得する

1<?php
2
3/**
4 * 指定されたファイルの最終更新時刻を取得し、表示する関数。
5 *
6 * @param string $filePath 処理するファイルのパス
7 * @return void
8 */
9function displayFileModificationTime(string $filePath): void
10{
11    // このサンプルコードを単体で動作させるため、一時的なファイルを作成します。
12    // 通常は、既に存在するファイルパスを引数として渡して使用します。
13    if (!file_exists($filePath)) {
14        file_put_contents($filePath, "This is a temporary file for testing SplFileObject::getMTime.\n");
15        echo "情報: テストファイル '{$filePath}' を作成しました。\n";
16    } else {
17        echo "情報: 既存のファイル '{$filePath}' を使用します。\n";
18    }
19
20    try {
21        // SplFileObject インスタンスを作成し、読み込みモード ('r') でファイルを開きます。
22        // これにより、ファイルへのアクセスや操作が可能になります。
23        $file = new SplFileObject($filePath, 'r');
24
25        // ファイルの最終更新時刻(最終的に内容が変更された時刻)を取得します。
26        // 戻り値はUnixタイムスタンプ (int) またはエラー時に false です。
27        $mtime = $file->getMTime();
28
29        if ($mtime === false) {
30            // getMTime() が false を返した場合、時刻の取得に失敗しています。
31            echo "エラー: ファイル '{$filePath}' の最終更新時刻を取得できませんでした。\n";
32        } else {
33            echo "ファイル '{$filePath}' の最終更新時刻 (Unixタイムスタンプ): " . $mtime . "\n";
34            // Unixタイムスタンプを人が読みやすい日付・時刻形式に変換して表示します。
35            echo "読みやすい形式: " . date('Y-m-d H:i:s', $mtime) . "\n";
36        }
37
38    } catch (RuntimeException $e) {
39        // SplFileObjectのコンストラクタで発生するエラー(例: ファイルが見つからない、
40        // アクセス権がないなど)を捕捉し、メッセージを表示します。
41        echo "エラー: " . $e->getMessage() . "\n";
42    } finally {
43        // サンプルコードで作成した一時ファイルをクリーンアップのため削除します。
44        // 実際のアプリケーションでは、既存のファイルを勝手に削除しないように注意し、
45        // この部分を適切に調整してください。
46        if (file_exists($filePath)) {
47            unlink($filePath);
48            echo "情報: テストファイル '{$filePath}' を削除しました。\n";
49        }
50    }
51}
52
53// 関数の実行例: 'sample_file_for_getmtime.txt' という名前のファイルを使用します。
54$testFileName = 'sample_file_for_getmtime.txt';
55displayFileModificationTime($testFileName);
56
57?>

SplFileObject::getMTimeメソッドは、PHPで指定されたファイルの最終更新時刻を取得するために利用されます。このメソッドは、ファイルをオブジェクトとして扱うためのSplFileObjectクラスに属しており、ファイル操作をより直感的かつオブジェクト指向的に行うことを可能にします。

サンプルコードでは、まず一時的なテストファイルを作成し、そのファイルパスを使用してSplFileObjectのインスタンスを生成しています。インスタンスを作成することで、ファイルのプロパティやメソッドにアクセスできるようになります。

$file->getMTime()を呼び出すと、そのファイルが最後に内容変更された時刻を取得できます。このメソッドは引数を必要としません。戻り値は、成功した場合にはUnixタイムスタンプという形式の整数値(int)で、これは1970年1月1日00:00:00 UTCからの経過秒数を表します。もし時刻の取得に失敗した場合や、ファイルが存在しないなどの問題が発生した場合は、falseが返されます。

取得したUnixタイムスタンプは、そのままでは人が読みにくいため、date('Y-m-d H:i:s', $mtime)のようにdate関数と組み合わせて使用することで、「年-月-日 時:分:秒」といった分かりやすい形式に変換して表示できます。コードでは、エラー発生時にfalseが返された場合や、SplFileObjectの生成に失敗した場合(RuntimeException)に対処するエラーハンドリングも行われており、安定したファイル操作を実現する上で重要な考慮点です。

getMTime()はファイルの最終更新時刻をUnixタイムスタンプで返しますので、人間が読める形式にするにはdate()関数などでの変換が必要です。ファイルが存在しない、アクセス権がないなどの理由で時刻が取得できない場合はfalseを返すため、必ず戻り値をチェックしエラー処理を行ってください。SplFileObjectのコンストラクタでファイルを開く際にもRuntimeExceptionが発生しうるため、適切な例外処理が不可欠です。サンプルコード内の一時ファイル作成・削除は動作確認用であり、実際の運用では既存ファイルを誤って操作しないよう特に注意し、目的に応じたファイルの読み書きモードを正しく指定してください。

関連コンテンツ