関数の概要
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-Modified と If-Modified-Since を利用し、ファイルが更新されていなければステータス304を返すことで効率よくキャッシュ制御を行う例です。
関連する関数
filectime:ファイルの作成日時または変更日時(Windows・Linuxで差異あり)を取得filesize:ファイルのサイズ(バイト単位)を取得is_file:指定したパスがファイルかどうかを調べるfile_exists:ファイルやディレクトリが存在するか確認する
まとめ
filemtime はPHPでファイルの最終更新日時を簡単に取得できる便利な関数です。ファイルの状態を確認したり、更新タイミングで処理を変えたりする際に役立ちます。使用時は、返り値が FALSE になるケースに注意してエラーハンドリングを行うことが大切です。
