ちょっと興味があるんだけど
$files = glob(cacheme_directory()."*");
foreach($files as $file)
{
$filemtime=filemtime ($file);
if (time()-$filemtime>= 172800)
{
unlink($file);
}
}
コードが正しいかどうかを確認したいだけです。ありがとう。
is_file()
チェックを追加する必要があります。なぜなら、PHP通常はリスト .
および..
、およびチェックしているディレクトリに存在する可能性のあるサブディレクトリ。
また、 この回答が示唆するように 、事前に計算された秒をより表現力豊かな表記に置き換える必要があります。
<?php
$files = glob(cacheme_directory()."*");
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) >= 60 * 60 * 24 * 2) { // 2 days
unlink($file);
}
}
}
?>
または、この回答に示すように、DirectoryIterator
、 を使用することもできます 。この単純なケースでは、実際には何の利点もありませんが、OOP way。
最も簡単な方法は、 DirectoryIterator を使用することです。
<?php
if (file_exists($folderName)) {
foreach (new DirectoryIterator($folderName) as $fileInfo) {
if ($fileInfo->isDot()) {
continue;
}
if ($fileInfo->isFile() && time() - $fileInfo->getCTime() >= 2*24*60*60) {
unlink($fileInfo->getRealPath());
}
}
}
?>
FilesystemIterator を使用した、もう1つの単純で現代的な方法。
例として「logs」ディレクトリを使用しています。
$fileSystemIterator = new FilesystemIterator('logs');
$now = time();
foreach ($fileSystemIterator as $file) {
if ($now - $file->getCTime() >= 60 * 60 * 24 * 2) // 2 days
unlink('logs/'.$file->getFilename());
}
主な利点は、DirectoryIteratorが仮想ディレクトリ「。」を返すことです。ループ内の「..」。しかし、FilesystemIteratorはそれらを無視します。
私には正しいようです。わかりやすくするために、172800
を2*24*60*60
に置き換えることをお勧めします。
ディレクトリに非常に多数のファイルがある場合、問題が発生することに注意してください。
これがあなたに影響を与える可能性があると思われる場合は、 opendir
などの低レベルのアプローチの使用を検討してください。
/* Delete Cache Files Here */
$dir = "cache/"; /** define the directory **/
/*** cycle through all files in the directory ***/
foreach (glob($dir."*") as $file) {
//foreach (glob($dir.'*.*') as $file){
/*** if file is 24 hours (86400 seconds) old then delete it ***/
if (filemtime($file) < time() - 172800) { // 2 days
unlink($file);
}
}
お役に立てば幸いです。
再帰的に行う方法の例を次に示します。
function remove_files_from_dir_older_than_x_seconds($dir,$seconds = 3600) {
$files = glob(rtrim($dir, '/')."/*");
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) >= $seconds) {
echo "removed $file<br>".PHP_EOL;
unlink($file);
}
} else {
remove_files_from_dir_older_than_x_seconds($file,$seconds);
}
}
}
remove_files_from_dir_older_than_x_seconds(dirname(__file__).'/cache/', (60 * 60 * 24 * 1) ); // 1 day
/** It deletes old files.
* @param string $dir Directory
* @param int $secs Files older than $secs seconds
* @param string $pattern Files matching $pattern
*/
function delete_oldfiles($dir,$secs,$pattern = "/*")
{
$now = time();
foreach(glob("$dir$pattern") as $f) {
if (is_file($f) && ($now - filemtime($f) > $secs)) unlink($f);
}
}