filemtime

関数の概要

PHPの filemtime 関数は、指定したファイルの最終更新時刻(タイムスタンプ)を取得するための関数です。ファイルの更新日時を調べたい場合や、キャッシュの管理、差分チェックなどに役立ちます。

パラメータの説明

  • filename:最終更新時刻を知りたいファイルのパスを文字列で指定します。絶対パスや相対パスが利用可能です。

戻り値

ファイルの最終更新時刻をUNIXタイムスタンプ(1970年1月1日からの経過秒数)で返します。指定したファイルが存在しない場合やアクセスできない場合は FALSE を返します。

使用例

基本的な使い方

<?php
$filename = 'sample.txt';
$mtime = filemtime($filename);
if ($mtime !== false) {
    echo "最終更新日時: " . date('Y-m-d H:i:s', $mtime);
} else {
    echo "ファイルが存在しないか、アクセスできません。";
}
?>

この例では、ファイル sample.txt の最終更新時刻を取得し、date 関数で人間に読みやすい形式に変換して表示しています。

複数ファイルの更新日時を比較する

<?php
$files = ['file1.txt', 'file2.txt', 'file3.txt'];
foreach ($files as $file) {
    $mtime = filemtime($file);
    if ($mtime !== false) {
        echo "{$file} の最終更新日時: " . date('Y-m-d H:i:s', $mtime) . "<br>";
    } else {
        echo "{$file} は存在しないかアクセス不可です。<br>";
    }
}
?>

複数のファイルをループで処理し、それぞれの更新日時を確認して表示しています。

更新日時を使ったキャッシュ制御の例

<?php
$filename = 'data.json';
$mtime = filemtime($filename);

header('Content-Type: application/json');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $mtime) . ' GMT');

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    $if_modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
    if ($if_modified_since >= $mtime) {
        header('HTTP/1.1 304 Not Modified');
        exit;
    }
}

echo file_get_contents($filename);
?>

HTTPヘッダーの Last-ModifiedIf-Modified-Since を利用し、ファイルが更新されていなければステータス304を返すことで効率よくキャッシュ制御を行う例です。

関連する関数

  • filectime:ファイルの作成日時または変更日時(Windows・Linuxで差異あり)を取得
  • filesize:ファイルのサイズ(バイト単位)を取得
  • is_file:指定したパスがファイルかどうかを調べる
  • file_exists:ファイルやディレクトリが存在するか確認する

まとめ

filemtime はPHPでファイルの最終更新日時を簡単に取得できる便利な関数です。ファイルの状態を確認したり、更新タイミングで処理を変えたりする際に役立ちます。使用時は、返り値が FALSE になるケースに注意してエラーハンドリングを行うことが大切です。