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

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

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

作成日: 更新日:

基本的な使い方

getMTimeメソッドは、GlobIteratorクラスに属し、現在のイテレータが指すファイルまたはディレクトリの最終変更時刻を取得するために使用されるメソッドです。

GlobIteratorクラスは、*.phpのような指定されたパターン(globパターン)に一致するファイルやディレクトリを順に処理する際に利用されます。このgetMTimeメソッドは、そのイテレータが現在指しているファイルやディレクトリが、いつ最後に内容が変更されたかを知りたい場合に役立ちます。

メソッドが返す値は整数値で、ファイルの最終変更時刻をUnixタイムスタンプ形式で表します。Unixタイムスタンプとは、1970年1月1日00:00:00 UTC(協定世界時)からの経過秒数を意味するもので、この数値を利用することで、日付や時刻の比較、他の日時形式への変換などをプログラミング上で容易に行うことができます。

ファイルの変更時刻の取得に失敗した場合、例えばファイルが存在しない、またはアクセス権がないなどの理由がある場合は、このメソッドはfalseを返します。そのため、メソッドの戻り値を常に確認し、falseが返された場合には適切なエラー処理を行うことが重要です。

この機能は、ファイルが更新されたかどうかをチェックして、キャッシュを再生成したり、古いファイルを検出して削除したりするなど、ファイル管理に関する多様な処理において活用することができます。

構文(syntax)

1<?php
2
3$iterator = new GlobIterator(__DIR__ . '/*');
4
5if ($iterator->valid()) {
6    $timestamp = $iterator->getMTime();
7}

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

GlobIterator::getMTimeメソッドは、SplFileInfo::getMTime()と同様に、ファイルが最後に変更された時刻をUNIXタイムスタンプ(整数値)で返します。

サンプルコード

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

1<?php
2
3/**
4 * GlobIterator::getMTime メソッドを使用して、ファイルの最終更新時刻を取得するサンプル
5 *
6 * この関数は、指定されたパターンに一致するファイルを作成し、
7 * そのファイルの最終更新時刻をGlobIteratorを介して取得し、表示します。
8 */
9function demonstrateGlobIteratorGetMTime(): void
10{
11    // 一時ファイルを作成し、内容を書き込む
12    // このファイルに対して更新時刻をテストします
13    $tempFilePattern = sys_get_temp_dir() . '/temp_file_for_glob_*.txt';
14    $tempFileName = tempnam(sys_get_temp_dir(), 'glob_test_'); // 一意なファイル名を生成
15    if ($tempFileName === false) {
16        echo "エラー: 一時ファイルの作成に失敗しました。\n";
17        return;
18    }
19    file_put_contents($tempFileName, "これはテストファイルの内容です。\n");
20
21    echo "一時ファイルを作成しました: " . basename($tempFileName) . "\n";
22    echo "ファイルパス: " . $tempFileName . "\n";
23
24    try {
25        // GlobIterator を使用して、作成した一時ファイルを指定
26        // 注意: GlobIterator はパスパターンを引数に取ります。
27        // ここでは特定のファイルパスをパターンとして指定しています。
28        $iterator = new GlobIterator($tempFileName);
29
30        // イテレータが空でないか確認
31        if (!$iterator->valid()) {
32            echo "エラー: 指定されたパターンでファイルが見つかりませんでした。\n";
33            return;
34        }
35
36        // イテレータをループしてファイル情報を取得
37        foreach ($iterator as $fileInfo) {
38            // 現在のファイル情報の最終更新時刻をUnixタイムスタンプで取得
39            $mtime = $fileInfo->getMTime();
40
41            echo "---------------------------------------------------\n";
42            echo "ファイル名: " . $fileInfo->getFilename() . "\n";
43            echo "最終更新時刻 (Unixタイムスタンプ): " . $mtime . "\n";
44            // Unixタイムスタンプを人間が読める形式に変換して表示
45            echo "最終更新時刻 (人間が読める形式): " . date('Y-m-d H:i:s', $mtime) . "\n";
46            echo "---------------------------------------------------\n";
47        }
48    } catch (Exception $e) {
49        echo "エラーが発生しました: " . $e->getMessage() . "\n";
50    } finally {
51        // テスト終了後、作成した一時ファイルを削除してクリーンアップ
52        if (file_exists($tempFileName)) {
53            unlink($tempFileName);
54            echo "一時ファイルを削除しました: " . basename($tempFileName) . "\n";
55        }
56    }
57}
58
59// 関数を実行
60demonstrateGlobIteratorGetMTime();
61
62?>

PHP 8のGlobIterator::getMTimeメソッドは、ファイルシステム上のファイルやディレクトリの最終更新時刻を取得するために使用されます。このメソッドはGlobIteratorクラスに属しており、ファイルシステムを反復処理して特定のパターンに一致するファイル情報を取得する際に活用されます。

getMTimeメソッドは引数を一切必要としません。呼び出されると、対象のファイルが最後に変更された時刻をUnixタイムスタンプとして整数値で返します。Unixタイムスタンプとは、1970年1月1日 00:00:00 UTCからの経過秒数を表す数値です。

サンプルコードでは、まず一時ファイルを作成し、そのファイルのパスをGlobIteratorに渡してファイル情報オブジェクトを取得しています。foreachループでGlobIteratorを処理することで、一つ一つのファイル情報が$fileInfoオブジェクトとして得られます。この$fileInfoオブジェクトからgetMTime()メソッドを呼び出すことで、ファイルの最終更新時刻がUnixタイムスタンプ形式で取得できます。取得したタイムスタンプはそのままでは人間が読みにくいため、date()関数と組み合わせて「年-月-日 時:分:秒」のような、より分かりやすい形式に変換して表示しています。このメソッドは、ファイルの更新状況を監視したり、ファイルがいつ変更されたかを確認したりする場面で役立ちます。

GlobIterator::getMTimeメソッドは、ファイルの最終更新時刻を「Unixタイムスタンプ」という数値で返します。この数値を人間が読める日付時刻形式に変換するには、date()関数などを利用してください。GlobIteratorはファイルパスのパターンに一致する複数のファイルを処理するのに適しており、このサンプルでは単一ファイルを扱いますが、実際には*.txtのようなワイルドカードを使ってファイル群を取得する場面で便利です。一時ファイルの作成・利用後は、必ず削除するクリーンアップ処理を忘れずに行いましょう。ファイルが存在しない場合や、ファイル操作中にエラーが発生する可能性も考慮し、try-catchブロックなどで適切にエラーを処理する堅牢なコードを心がけることが重要です。

関連コンテンツ