ディレクトリへアクセスした時刻を、ファイルを基準にして取得する
fileatime関数を使うと、ファイル / ディレクトリへの最終アクセス時刻を取得することができます。
この関数はディレクトリについては、ディレクトリ内のファイルへのアクセスはディレクトリへのアクセスとみなされません。
あくまでディレクトリ自身に対するアクセス(一覧の取得であったり、ディレクトリ名の変更など)に対する時刻に限って取得することができます。
そこで今回は、ディレクトリ内のファイルへの最終アクセス時刻を、ディレクトリの最終アクセス時刻として取得する方法を解説します。
今回の方法はディレクトリのファイル一覧を取得する都合上、ディレクトリ自身へのアクセスが実行する度に更新されてしまうため、ディレクトリ自身の最終アクセス時間は含まない形になります。
PHP コード例
<?php
date_default_timezone_set('Asia/Tokyo');
$path = './test/';$file_list = null;$last_access_time = null;$file_last_file_time = null;
// ディレクトリ何のファイル一覧を取得$file_list = scandir($path);
if( !empty($file_list) ) { foreach( $file_list as $file_name ) {
// メタファイルは除外 if( !preg_match( '/^\./', $file_name) ) {
// ファイルの最終アクセス時刻を取得 $file_access_time = fileatime($path.$file_name);
if( empty($last_access_time) || $last_access_time < $file_access_time ) { $last_access_time = $file_access_time; } } }
// ファイルが空の場合はディレクトリ自身の最終アクセス日時を取得} else { $last_access_time = fileatime($path);}
echo "ディレクトリの最終アクセス時刻:" . date( "Y-m-d H:i", $last_access_time);return;
上記コードのポイントは、scandir関数でディレクトリ内のファイル一覧を取得することと、メタファイルを除くファイルの最終アクセス時刻をfileatime関数から取得しているところです。
ファイルのアクセス時間を取得する際に、ディレクトリのパスと結合してパスを作成している点も注目です。
一番最後にアクセスされたファイルの時刻が$last_access_timeに入るため、最後にecho関数で出力します。
なお、fileatime関数について詳しくは「ファイルへ最後にアクセスした時刻を取得する」をご覧ください。