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

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

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

作成日: 更新日:

基本的な使い方

getMTimeメソッドは、PHPのPharアーカイブ内に含まれるファイルまたはディレクトリの最終修正時刻を取得するメソッドです。このメソッドは、PharFileInfoクラスのインスタンスを通して呼び出されます。Pharアーカイブとは、複数のPHPファイルや関連ファイルを一つにまとめたアーカイブ形式であり、主にPHPアプリケーションの配布やデプロイに利用されます。

このメソッドを実行すると、指定されたファイルやディレクトリが最後に変更された日時をUnixタイムスタンプ形式で取得できます。Unixタイムスタンプは、1970年1月1日 00:00:00 UTC(協定世界時)からの経過秒数を表す整数値であり、コンピュータ内部で時間を扱う際の標準的な表現方法です。取得したタイムスタンプは、PHPのdate()関数などを使用して、人間が読める形式の日付と時刻に変換することが可能です。

getMTimeメソッドは、対象となるファイルやディレクトリの修正時刻を正常に取得できた場合にこのUnixタイムスタンプを返します。しかし、何らかの理由で修正時刻の取得に失敗した場合や、対象のファイルやディレクトリが見つからない場合には、falseが返されます。この機能は、Pharアーカイブ内のコンテンツの更新状況を確認したり、キャッシュの有効性を判断したりする際など、ファイルの変更履歴に基づいた処理を行う場合に大変有用です。

構文(syntax)

1<?php
2// Pharアーカイブ 'your_archive.phar' が存在し、
3// その中に 'your_file.txt' というエントリ(ファイル)があると仮定します。
4
5// 1. Pharアーカイブを開く
6$phar = new Phar('your_archive.phar');
7
8// 2. アーカイブ内の特定のエントリのPharFileInfoオブジェクトを取得
9$fileInfo = $phar['your_file.txt'];
10
11// 3. 取得したPharFileInfoオブジェクトに対してgetMTime()メソッドを呼び出す
12//    これにより、ファイルの最終変更時刻がUnixタイムスタンプで返されます。
13$modificationTime = $fileInfo->getMTime();
14?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

このメソッドは、 Phar ファイルの最終更新時刻を Unix タイムスタンプ(1970年1月1日午前0時からの経過秒数)で返します。

サンプルコード

PHP PharFileInfo getMTime で最終変更時刻を取得する

1<?php
2
3/**
4 * Pharアーカイブ内のファイルの最終変更時刻 (getMTime) を取得するサンプルコード。
5 *
6 * この関数は、システムエンジニアを目指す初心者がPhar拡張機能とPharFileInfo::getMTime()
7 * メソッドの基本的な使用方法を理解できるように設計されています。
8 *
9 * 手順:
10 * 1. 一時的なテキストファイルを作成します。
11 * 2. 新しいPharアーカイブを作成し、そのテキストファイルをアーカイブに追加します。
12 * 3. 追加されたファイルに対応するPharFileInfoオブジェクトを取得します。
13 * 4. getMTime()メソッドを呼び出して、ファイルの最終変更時刻 (Unixタイムスタンプ) を取得し、表示します。
14 * 5. 最後に、作成したPharアーカイブと一時ファイルをクリーンアップします。
15 */
16function demonstratePharFileGetMTime(): void
17{
18    // 一時的なPharアーカイブのファイル名を定義
19    $pharArchiveName = 'example.phar';
20    // Pharアーカイブ内に追加するファイルの論理名を定義
21    $fileInPharName = 'test_content.txt';
22    // アーカイブに追加する一時的なファイルの物理パスを定義
23    $tempFilePath = __DIR__ . '/' . $fileInPharName;
24
25    try {
26        // 1. Pharアーカイブに含めるための一時的なテキストファイルを作成
27        file_put_contents($tempFilePath, 'This is a sample text content for the Phar archive.');
28
29        // 2. 新しいPharアーカイブを作成します。
30        // 第1引数: 作成するPharファイルのパス
31        // 第2引数: Phar::NONE (特にフラグなし)
32        // 第3引数: Pharアーカイブのエイリアス (内部参照名、ここでは"example.phar")
33        $phar = new Phar($pharArchiveName, 0, 'example.phar');
34
35        // 3. Pharアーカイブのビルドを開始し、一時ファイルをアーカイブに追加
36        $phar->startBuffering(); // バッファリング開始 (パフォーマンス向上)
37        $phar->addFile($tempFilePath, $fileInPharName); // 物理パスのファイルを論理名で追加
38        $phar->stopBuffering();  // バッファリング停止し、変更をPharファイルに書き込む
39
40        // 4. Pharアーカイブ内の追加したファイルに対応するPharFileInfoオブジェクトを取得
41        // Pharオブジェクトは配列のようにファイルにアクセスできます
42        $fileInfo = $phar[$fileInPharName];
43
44        // 5. PharFileInfo::getMTime() メソッドを呼び出し、ファイルの最終変更時刻を取得
45        // このメソッドはUnixタイムスタンプ (整数値) を返します
46        $modificationTime = $fileInfo->getMTime();
47
48        echo "Pharアーカイブ内のファイル '{$fileInPharName}' の最終変更時刻:\n";
49        echo "  Unixタイムスタンプ: " . $modificationTime . "\n";
50        // Unixタイムスタンプを人間が読みやすい日付時刻形式に変換して表示
51        echo "  人間が読める形式: " . date('Y-m-d H:i:s', $modificationTime) . "\n";
52
53    } catch (PharException $e) {
54        // Phar操作中に発生する可能性のある例外を捕捉
55        echo "Phar操作中にエラーが発生しました: " . $e->getMessage() . "\n";
56    } catch (Exception $e) {
57        // その他の一般的な例外を捕捉
58        echo "予期せぬエラーが発生しました: " . $e->getMessage() . "\n";
59    } finally {
60        // 6. 後処理: 作成したPharアーカイブと一時ファイルを削除してクリーンアップ
61        // Phar::unlinkArchive() はPharファイルを安全に削除するための推奨される方法です
62        if (file_exists($pharArchiveName)) {
63            Phar::unlinkArchive($pharArchiveName);
64        }
65        // 一時的なテキストファイルも削除
66        if (file_exists($tempFilePath)) {
67            unlink($tempFilePath);
68        }
69    }
70}
71
72// 定義したサンプル関数を実行
73demonstratePharFileGetMTime();

PHP 8のPharFileInfo::getMTimeメソッドは、Pharアーカイブ内に含まれるファイルの最終変更時刻を取得するために使用されます。このメソッドはPharFileInfoクラスに属し、引数を一切取りません。戻り値としては、ファイルの最終変更時刻を示すUnixタイムスタンプが整数値(int)で返されます。

提供されたサンプルコードでは、このgetMTimeメソッドの基本的な使い方を段階的に示しています。まず、一時的なテキストファイルを作成し、それを新しいPharアーカイブに追加します。次に、アーカイブに追加されたファイルに対応するPharFileInfoオブジェクトを取得し、そのオブジェクトからgetMTimeメソッドを呼び出して最終変更時刻を取得します。取得されたUnixタイムスタンプは、date()関数などを用いて人間が読みやすい日付時刻形式に変換して表示することが可能です。これにより、Pharアーカイブ内の個々のファイルのメタデータへのアクセス方法を学ぶことができます。最後に、作成したPharアーカイブと一時ファイルが適切にクリーンアップされ、安全に実行できる構成となっています。

このサンプルコードでPharFileInfo::getMTime()が返すのは、ファイルの最終変更時刻を示すUnixタイムスタンプという整数値です。そのため、人間が読める日付時刻形式で表示するには、date()関数などでの変換が必要になる点にご注意ください。また、Pharアーカイブの作成や操作は特殊なファイルシステム操作であるため、エラー発生時に適切に対応できるようtry-catchブロックによる例外処理が重要です。さらに、finallyブロックで一時ファイルや作成したPharアーカイブを確実に削除し、システムをクリーンな状態に保つことが非常に大切です。これらの手順を怠ると、不要なファイルが残り、ディスク容量を消費する可能性があります。

PHP PharFileInfo::getMTimeでアーカイブ時刻を取得する

1<?php
2
3// このスクリプトは、PHPのPhar拡張機能を使用してアーカイブファイル(.phar)を作成し、
4// その中のファイルの最終更新時刻を取得するPharFileInfo::getMTimeメソッドの使用例を示します。
5// また、キーワードとして与えられたgettimeofday関数との関連性を示すため、現在のシステム時刻も取得・表示します。
6
7// 一時的なPharアーカイブファイルのパスを定義します。
8$pharPath = __DIR__ . '/example.phar';
9$fileNameInPhar = 'my_document.txt';
10$fileContent = 'Hello, this is a test document inside the Phar archive.';
11
12// 以前に作成されたPharファイルが存在する場合、エラーを避けるために削除します。
13if (file_exists($pharPath)) {
14    @unlink($pharPath); // @ でエラーを抑制し、削除を試みます
15}
16
17try {
18    // --- Pharアーカイブの作成 ---
19    // 新しいPharアーカイブを作成します。
20    // 引数にはファイルのパスとフラグ(オプション)、エイリアス(オプション)を指定します。
21    $phar = new Phar($pharPath);
22
23    // アーカイブへの書き込みをバッファリング開始します。これにより、複数のファイルを効率的に追加できます。
24    $phar->startBuffering();
25
26    // アーカイブ内にテキストファイルを追加します。
27    $phar->addFromString($fileNameInPhar, $fileContent);
28
29    // バッファリングを停止し、Pharアーカイブをファイルとして保存します。
30    $phar->stopBuffering();
31
32    echo "Pharアーカイブが作成されました: {$pharPath}\n";
33    echo "アーカイブ内のファイル: {$fileNameInPhar}\n\n";
34
35    // --- PharFileInfo::getMTimeの使用 ---
36    // 作成したPharアーカイブを読み取りモードで開きます。
37    // 'phar://' スキームを使用して、Pharアーカイブ内のファイルにアクセスします。
38    $pharArchive = new Phar('phar://' . $pharPath);
39
40    // アーカイブ内の特定のファイル(my_document.txt)に対応する
41    // PharFileInfoオブジェクトを取得します。
42    $pharFileInfo = $pharArchive[$fileNameInPhar];
43
44    // getMTime() メソッドを呼び出して、ファイルの最終更新時刻(Unixタイムスタンプ)を取得します。
45    // 戻り値はint型で、1970年1月1日 00:00:00 UTCからの秒数です。
46    $lastModificationTime = $pharFileInfo->getMTime();
47
48    echo "Phar内のファイルの最終更新タイムスタンプ: {$lastModificationTime}\n";
49    // 取得したタイムスタンプを人間が読める形式(YYYY-MM-DD HH:MM:SS)に変換して表示します。
50    echo "最終更新日時: " . date('Y-m-d H:i:s', $lastModificationTime) . "\n";
51
52    // --- キーワード 'gettimeofday' の関連付け ---
53    // gettimeofday() 関数は、現在のシステム時刻をマイクロ秒単位で取得します。
54    // これは、Pharファイル内のファイルの更新時刻と比較するために使用できます。
55    $currentTimeData = gettimeofday();
56    $currentUnixTime = $currentTimeData['sec']; // 配列の 'sec' キーには現在の秒が格納されています。
57
58    echo "\n現在のシステムタイムスタンプ: {$currentUnixTime}\n";
59    echo "現在のシステム日時: " . date('Y-m-d H:i:s', $currentUnixTime) . "\n";
60    echo "(gettimeofdayはマイクロ秒まで取得できますが、ここでは秒単位で比較しています)\n";
61
62} catch (PharException $e) {
63    // Phar関連のエラーが発生した場合の処理です。
64    echo "Phar操作エラー: " . $e->getMessage() . "\n";
65} catch (Exception $e) {
66    // その他の予期せぬエラーが発生した場合の処理です。
67    echo "予期せぬエラー: " . $e->getMessage() . "\n";
68} finally {
69    // --- クリーンアップ ---
70    // スクリプトの実行後、作成した一時的なPharファイルを削除します。
71    if (file_exists($pharPath)) {
72        @unlink($pharPath); // @ でエラーを抑制
73        echo "\nPharアーカイブを削除しました: {$pharPath}\n";
74    }
75}

PharFileInfo::getMTimeメソッドは、PHPのPhar拡張機能を用いて作成されたアーカイブファイル(.phar)内の、個々のファイルの最終更新時刻を取得するために使用されます。このメソッドはPharFileInfoクラスに属し、アーカイブ内の特定ファイルの情報にアクセスする際に利用します。引数は不要で、戻り値として、1970年1月1日00:00:00 UTCからの経過秒数を表す整数値(Unixタイムスタンプ)を返します。

サンプルコードでは、まず一時的なPharアーカイブを作成し、その中にテストファイルを追加します。その後、作成したアーカイブからPharFileInfoオブジェクトを取得し、getMTime()を呼び出してファイルの最終更新時刻(Unixタイムスタンプ)を取得し、人間が読める形式に変換して表示しています。

また、キーワードとして与えられたgettimeofday()関数は、現在のシステム時刻をマイクロ秒単位で取得するもので、このサンプルコードではgetMTime()で取得したファイルの更新時刻と現在のシステム時刻を比較する例も示しています。これにより、ファイルの更新がいつ行われたかを、現在の時刻と対比して確認できます。

PharFileInfo::getMTime()は、Pharアーカイブ内のファイルの最終更新時刻をUnixタイムスタンプ(秒単位の整数)で返します。この機能を利用するには、PHP環境でPhar拡張機能が有効になっている必要があります。取得したタイムスタンプはそのままでは日時として読めないため、date()関数などで人間が読める形式に変換してください。また、Pharアーカイブ内のファイルにアクセスする際は、「phar://」スキームを忘れずに利用することが重要です。キーワードのgettimeofday()は現在のシステム時刻をマイクロ秒単位で取得するもので、getMTime()とは取得対象と精度が異なります。Pharファイルの作成や削除にはファイルシステムへの適切な権限が必要で、サンプルコードのようにエラーハンドリングと一時ファイルの確実なクリーンアップを実装することで、安全なシステム運用に繋がります。

関連コンテンツ

関連IT用語

関連プログラミング言語