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

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

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

作成日: 更新日:

基本的な使い方

getATimeメソッドは、PharFileInfoクラスに属し、PHARアーカイブ内の特定のファイルが最後にアクセスされた時刻(最終アクセス時刻)を取得するメソッドです。PHARアーカイブとは、複数のPHPファイルや関連リソースを一つのファイルにまとめて配布できるPHP独自のアーカイブ形式です。このPharFileInfoクラスは、そのPHARアーカイブに含まれる個々のファイルに関する詳細な情報を提供します。

getATimeメソッドが取得する「最終アクセス時刻」とは、ファイルの内容が最後に読み込まれたり、そのファイルの情報が参照されたりした際に更新される時刻を指します。例えば、PHARアーカイブ内のスクリプトが実行されたり、画像ファイルが読み込まれたりした時などにこの時刻が更新される可能性があります。このメソッドは、取得した時刻をUnixタイムスタンプという形式で返します。Unixタイムスタンプは、1970年1月1日0時0分0秒(UTC)からの経過秒数を整数値で表したもので、PHPのdate()関数などを使って、人間が理解しやすい日付や時刻の文字列に変換できます。

この情報は、PHARアーカイブ内のファイルの利用状況を追跡したり、特定のファイルが最後にいつ参照されたかを判断したりする際に役立ちます。ただし、一部のファイルシステムやオペレーティングシステムの設定によっては、ファイルのアクセス時刻が常に正確に更新されるとは限らない点にご留意ください。

構文(syntax)

1<?php
2try {
3    // 一時的なPharアーカイブを作成し、ファイルを追加します。
4    // このPharアーカイブ内のファイルのPharFileInfoオブジェクトを取得するために必要です。
5    $pharFile = __DIR__ . '/temp_example.phar';
6    if (file_exists($pharFile)) {
7        unlink($pharFile);
8    }
9    $phar = new Phar($pharFile);
10    $phar->addFromString('sample.txt', 'This is a sample text file.');
11
12    // Pharアーカイブ内の'sample.txt'というエントリのPharFileInfoオブジェクトを取得します。
13    // $fileInfoはPharFileInfoクラスのインスタンスとなります。
14    $fileInfo = $phar['sample.txt'];
15
16    // PharFileInfoオブジェクトからgetATime()メソッドを呼び出し、最終アクセス時刻を取得します。
17    // このメソッドは整数値(Unixタイムスタンプ)を返します。
18    $accessTime = $fileInfo->getATime();
19
20    // 取得したUnixタイムスタンプとそのタイムスタンプを人間が読める日付形式に変換して表示します。
21    echo "ファイルの最終アクセス時刻 (Unixタイムスタンプ): " . $accessTime . "\n";
22    echo "人間が読める形式: " . date('Y-m-d H:i:s', $accessTime) . "\n";
23
24    // 使用したPharオブジェクトを解放し、一時的なPharファイルを削除してクリーンアップします。
25    unset($phar);
26    unlink($pharFile);
27
28} catch (Exception $e) {
29    // 例外が発生した場合、エラーメッセージを表示し、可能であれば一時ファイルをクリーンアップします。
30    echo "エラーが発生しました: " . $e->getMessage() . "\n";
31    if (file_exists(__DIR__ . '/temp_example.phar')) {
32        unlink(__DIR__ . '/temp_example.phar');
33    }
34}

引数(parameters)

引数なし

引数はありません

戻り値(return)

int|false

PharFileInfo::getATime は、Phar アーカイブ内のエントリの最終アクセス時刻を Unix タイムスタンプ(秒単位)で返します。 時刻の取得に失敗した場合は false を返します。

サンプルコード

PHP PharFileInfo::getATime()でアクセス時刻を取得する

1<?php
2
3// このサンプルコードは、PHARアーカイブ内のファイルの最終アクセス時刻(Access Time)を
4// Unixタイムスタンプとして取得する方法を示します。
5//
6// 注意点:
7// - PHARアーカイブの作成には、PHPの `phar.readonly` 設定が無効になっている必要があります。
8//   (通常、開発環境では無効になっていますが、本番環境ではセキュリティ上の理由で有効な場合があります。)
9// - `getATime` はファイルのアクセス時刻を返します。PHARファイルが作成された直後や、
10//   PHAR内のファイルにアクセスされたときにこの時刻が更新されます。
11
12// 一時的なPHARアーカイブファイル名と、アーカイブ内に含めるファイル名
13$pharFileName = 'my_temp_archive.phar';
14$fileInArchiveName = 'sample_file.txt';
15
16try {
17    // 1. 新しいPHARアーカイブを作成します。
18    //    `new Phar()` にファイルパスを渡すことで、指定した名前でアーカイブが作成されます。
19    $phar = new Phar($pharFileName);
20    $phar->startBuffering(); // PHARアーカイブへの書き込みを開始します。
21
22    // 2. PHARアーカイブ内にダミーのファイルを追加します。
23    //    `addFromString()` は、文字列をファイル内容としてPHARに追加します。
24    $phar->addFromString($fileInArchiveName, 'これはPHARアーカイブ内のサンプルテキストです。');
25
26    $phar->stopBuffering(); // PHARアーカイブへの書き込みを完了し、ファイルを保存します。
27    echo "PHARアーカイブ '{$pharFileName}' が作成されました。\n";
28
29    // 3. 作成したPHARアーカイブから、特定のファイルの情報を取得します。
30    //    `offsetGet()` メソッドで、アーカイブ内の指定したファイル名に対応する
31    //    `PharFileInfo` オブジェクトを取得します。
32    $pharFileInfo = $phar->offsetGet($fileInArchiveName);
33
34    // 4. `PharFileInfo` オブジェクトから最終アクセス時刻を取得します。
35    //    `getATime()` は、ファイルが最後にアクセスされた時刻をUnixタイムスタンプ(整数)で返します。
36    //    取得に失敗した場合は `false` を返します。
37    $accessTimestamp = $pharFileInfo->getATime();
38
39    if ($accessTimestamp !== false) {
40        echo "\nファイル '{$fileInArchiveName}' の最終アクセス時刻:\n";
41        echo "  - Unixタイムスタンプ: " . $accessTimestamp . "\n";
42        // `date()` 関数を使用して、Unixタイムスタンプを人間が読める形式に変換します。
43        echo "  - 人間が読める形式: " . date('Y-m-d H:i:s', $accessTimestamp) . "\n";
44    } else {
45        echo "\nファイル '{$fileInArchiveName}' の最終アクセス時刻の取得に失敗しました。\n";
46    }
47
48} catch (Exception $e) {
49    // PHAR操作中にエラーが発生した場合、例外をキャッチしてメッセージを表示します。
50    echo "\nエラーが発生しました: " . $e->getMessage() . "\n";
51    echo "phar.readonly 設定が有効になっている可能性があります。PHP設定を確認してください。\n";
52} finally {
53    // 5. 後処理として、作成したPHARアーカイブファイルを削除します。
54    //    `Phar::unlinkArchive()` は、指定したPHARファイルを削除します。
55    if (file_exists($pharFileName)) {
56        Phar::unlinkArchive($pharFileName);
57        echo "\nPHARアーカイブ '{$pharFileName}' を削除しました。\n";
58    }
59}

このサンプルコードは、PHPのPHARアーカイブ内に含まれるファイルの最終アクセス時刻をUnixタイムスタンプとして取得する方法を示しています。PHARアーカイブは複数のファイルを一つのファイルにまとめるための形式です。

まず、Pharクラスを使ってmy_temp_archive.pharという名前の一時的なアーカイブを作成し、その中にsample_file.txtというダミーファイルを追加します。このPHARアーカイブの作成とファイル追加の操作には、PHPのphar.readonly設定が無効である必要があります。

次に、作成したPHARアーカイブからoffsetGet()メソッドを使ってsample_file.txtに対応するPharFileInfoオブジェクトを取得します。このPharFileInfoオブジェクトは、アーカイブ内の特定のファイルに関する情報を提供します。

そして、PharFileInfoオブジェクトのgetATime()メソッドを呼び出すことで、sample_file.txtが最後にアクセスされた時刻を取得します。getATime()メソッドは引数を取らず、成功した場合はUnixタイムスタンプ(1970年1月1日 00:00:00 UTCからの秒数を示す整数値)を返します。取得に失敗した場合はfalseを返しますので、戻り値がfalseでないことを確認することが重要です。

取得したUnixタイムスタンプはdate()関数を使って人間が読める形式に変換し、表示しています。最後に、作成したPHARアーカイブをPhar::unlinkArchive()で削除して後処理を行っています。この一連の処理を通じて、PHARアーカイブ内のファイル情報にアクセスし、特定の時刻データを取得する流れを理解できます。

getATimeはファイルが最後にアクセスされた時刻をUnixタイムスタンプで取得します。戻り値は整数値か、取得に失敗した場合はfalseとなりますので、必ずfalseでないか確認してから利用してください。PHARアーカイブをコードから作成・変更するには、PHPの設定でphar.readonlyがOffになっている必要があります。特に本番環境ではセキュリティ上の理由からOnに設定されていることが多いため、環境の違いによる動作に注意が必要です。サンプルコードのように一時的なファイルは、処理後に確実に削除する習慣を身につけることが重要です。

PHP PharFileInfo getATime でファイルアクセス時刻を取得する

1<?php
2
3/**
4 * PharFileInfo::getATime() の使用例をデモンストレーションします。
5 *
6 * この関数は、一時的なPharアーカイブを作成し、その中のファイルの最終アクセス時刻を取得します。
7 * PharアーカイブはCLI環境でしか作成・変更できないため、コマンドラインから実行してください。
8 */
9function demonstratePharFileAccessTime(): void
10{
11    $pharFileName = 'example.phar'; // 作成するPharアーカイブの名前
12    $internalFileName = 'my_document.txt'; // Pharアーカイブ内に含めるファイル名
13    $tempFileContent = 'これはPharアーカイブ内のテストドキュメントです。';
14    $tempFilePath = __DIR__ . '/' . $internalFileName; // 一時ファイルの物理パス
15
16    // スクリプトの複数回実行のために、以前作成されたファイルをクリーンアップします。
17    if (file_exists($pharFileName)) {
18        unlink($pharFileName);
19    }
20    if (file_exists($tempFilePath)) {
21        unlink($tempFilePath);
22    }
23
24    // Pharアーカイブに含めるための一時的なテキストファイルを作成します。
25    file_put_contents($tempFilePath, $tempFileContent);
26
27    try {
28        // Pharアーカイブは、'phar.readonly' が '0' に設定され、
29        // かつSAPIがCLI(コマンドラインインターフェース)の場合にのみ作成・変更できます。
30        if (!Phar::canWrite()) {
31            echo "エラー: この環境ではPharアーカイブを作成/変更できません。\n";
32            echo "php.iniで 'phar.readonly' を '0' に設定し、CLIから実行してください。\n";
33            return; // Pharの作成ができない場合は処理を中断
34        }
35
36        // 1. 新しいPharアーカイブを作成し、ファイルをそこに追加します。
37        $phar = new Phar($pharFileName);
38        $phar->startBuffering(); // アーカイブへの変更をバッファリング開始
39        $phar->addFile($tempFilePath, $internalFileName); // 一時ファイルをアーカイブに追加
40        $phar->setStub($phar->createDefaultStub($internalFileName)); // デフォルトのスタブを設定
41        $phar->stopBuffering(); // バッファリングを停止し、変更を保存
42
43        echo "Pharアーカイブ '{$pharFileName}' が作成され、'{$internalFileName}' が含まれています。\n";
44
45        // 2. 作成したPharアーカイブを読み込みモードで開きます。
46        //    その後、内部ファイルの PharFileInfo オブジェクトを取得します。
47        $pharOpened = new Phar($pharFileName);
48        // 配列アクセスを使って、アーカイブ内の特定のエントリの PharFileInfo オブジェクトを取得します。
49        $pharFileInfo = $pharOpened[$internalFileName];
50
51        // 3. getATime() メソッドを呼び出して、ファイルの最終アクセス時刻を取得します。
52        //    これはUnixタイムスタンプ(整数値)を返します。
53        $accessTime = $pharFileInfo->getATime();
54
55        if ($accessTime !== false) {
56            echo "Pharアーカイブ内のファイル '{$internalFileName}' の最終アクセス時刻:\n";
57            echo "  Unixタイムスタンプ : " . $accessTime . "\n";
58            // Unixタイムスタンプを人間が読める形式に変換して表示します。
59            echo "  人間が読める形式   : " . date('Y-m-d H:i:s', $accessTime) . "\n";
60        } else {
61            echo "ファイル '{$internalFileName}' のアクセス時刻の取得に失敗しました。\n";
62        }
63
64    } catch (PharException $e) {
65        // Phar操作中にエラーが発生した場合の例外処理
66        echo "Phar操作中にエラーが発生しました: " . $e->getMessage() . "\n";
67    } finally {
68        // 4. クリーンアップ: 作成した一時ファイルとPharアーカイブを削除します。
69        if (file_exists($pharFileName)) {
70            unlink($pharFileName);
71            echo "Pharアーカイブ '{$pharFileName}' を削除しました。\n";
72        }
73        if (file_exists($tempFilePath)) {
74            unlink($tempFilePath);
75            echo "一時ファイル '{$tempFilePath}' を削除しました。\n";
76        }
77    }
78}
79
80// デモンストレーション関数を実行します。
81demonstratePharFileAccessTime();

PHP 8のPharFileInfo::getATime()メソッドは、Phar(PHP Archive)アーカイブ内に含まれるファイルの最終アクセス時刻を取得する際に利用されます。Pharアーカイブは、複数のPHPスクリプトやその他のリソースを一つのアーカイブファイルにまとめることができ、アプリケーションの配布やデプロイを簡素化します。

このメソッドは引数を必要とせず、呼び出すことで、対象となるファイルが最後にアクセスされた日時をUnixタイムスタンプ形式の整数値(int)として返します。Unixタイムスタンプは、1970年1月1日00:00:00 UTCからの経過秒数を示すため、date()関数などと組み合わせることで、人間が読みやすい日付と時刻の形式に変換して表示できます。ファイルのアクセス時刻の取得に失敗した場合やエラーが発生した場合は、falseが返されます。

サンプルコードでは、一時的なPharアーカイブを作成し、その中にテスト用のテキストファイルを追加しています。Pharアーカイブの作成や変更は、通常コマンドラインインターフェース(CLI)環境でのみ可能であり、またPHPの設定でphar.readonlyディレクティブが0に設定されている必要があります。アーカイブ作成後、アーカイブ内の特定のファイルに対応するPharFileInfoオブジェクトを取得し、そのオブジェクトに対してgetATime()メソッドを呼び出して最終アクセス時刻を取得しています。取得したタイムスタンプは、そのまま表示される他、date()関数で整形されて表示され、最後に作成されたファイルは削除されます。

このサンプルコードはPharアーカイブ内のファイルアクセス時刻取得を示しますが、Pharアーカイブの作成や変更はCLI環境専用であり、php.iniでphar.readonlyを0に設定する必要があります。Webサーバー環境では動作しませんのでご注意ください。getATime()は成功時にUnixタイムスタンプの整数を、失敗時にfalseを返します。戻り値がfalseでないか必ずチェックし、エラーハンドリングを行うことが重要です。Pharは通常のファイル操作とは異なる特殊なクラス群を使用するため、その特性を理解し安全に利用してください。

関連コンテンツ

関連IT用語

関連プログラミング言語