たくさんのファイルがあるフォルダを読んでいます。
ファイルの作成日を取得するにはどうすればよいですか。それを取得するための直接的な機能は見当たりません。
あるfilemtime
とfilectime
。
また、ファイルが変更されていない場合はどうなりますか?
回答:
filectimeを使用します。Windowsの場合は作成時間を返し、Unixの場合は(ほとんどのファイルシステムで)作成時間がないため、取得できる最善の変更時間を返します。
一部のUnixテキストでは、ファイルのctimeはファイルの作成時間と呼ばれていることにも注意してください。これは間違っています。ほとんどのUnixファイルシステムにはUnixファイルの作成時間はありません。
filemtime
Linuxの場合、filectime
所有者の間に変更され、他の操作と同様に権限が変更されるため、より正確になります。Linuxで作成時間を取得する機会が増えるfilemtime
これは、次のPHPドキュメントから抜粋したサンプルコードです:https://www.php.net/manual/en/function.filemtime.php
// outputs e.g. somefile.txt was last changed: December 29 2002 22:16:23.
$filename = 'somefile.txt';
if (file_exists($filename)) {
echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
コードはファイル名を指定し、それが存在するかどうかを確認してから、を使用して変更時刻を表示しますfilemtime()
。
filemtime()
ファイルへのパスである1つのパラメーターを取ります。これは相対的または絶対的です。
filemtime()
は変更時刻を返します。
私はこのトピックが非常に古いことを知っていますが、誰かが答えを探している場合に備えて、私として、私は私の解決策を投稿しています。
このソリューションは、ファイルの先頭に追加のデータがあってもかまわない場合に機能します。
基本的に、ファイルが存在しない場合は、ファイルを作成し、最初の行に現在の日付を追加するという考え方です。次に、で最初の行を読み取り、fgets(fopen($file, 'r'))
それをDateTime
オブジェクトまたは何かに変換し(奇妙な形式で保存しない限り、明らかに生で使用できます)、出来上がりです-作成日があります!たとえば、ログファイルを30日ごとに更新するスクリプトは次のようになります。
if (file_exists($logfile)) {
$now = new DateTime();
$date_created = fgets(fopen($logfile, 'r'));
if ($date_created == '') {
file_put_contents($logfile, date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND | LOCK_EX);
}
$date_created = new DateTime($date_created);
$expiry = $date_created->modify('+ 30 days');
if ($now >= $expiry) {
unlink($logfile);
}
}