Автоматическое удаление файлов с сервера?
Мне было интересно, есть ли способ использовать сценарий или какой-либо другой вариант, с помощью которого я могу автоматически удалять файлы с определенной даты с моего сервера.
Я создал приложение AS3 eCard, в котором php-скрипт записывает файл *.txt в папку с соответствующими деталями сообщения и т. Д. И хотел бы знать, возможно ли автоматическое удаление файлов старше n дней каким-либо образом избежать загромождения сайта?
Поправка PHP:
<?php
if ($handle = opendir('/myFolder/holdingFolder')) {
while (false !== ($file = readdir($handle))) {
$filelastmodified = filemtime($file);
if((time() - $filelastmodified) > 14*24*3600)
{
unlink($file);
}
}
closedir($handle);
}
?>
Я все еще изучаю php и был бы признателен, если бы кто-нибудь с большим опытом мог просмотреть это, чтобы указать мне правильное направление, если это правильный способ удаления файлов в папке после 14 дней создания?
Если это так, мой сервер - Windows/Plesk, понадобятся ли мне какие-либо специальные команды для его запуска и как часто вы будете советовать?
3 ответа
Исходя из того, что вы сказали, я думаю, вам проще всего начать с работы cron и сценария php.
Напишите PHP-скрипт для зацикливания файлов, проверяющих дату создания и удаляющих старые. Затем настройте PHP-скрипт для задания cron, которое может запускаться по любому расписанию.
Конечно, есть 1000 способов подойти к этому, но, похоже, вы уже знаете PHP, и cron доступен в любой системе * nix.
Вот ссылка на случайный результат Google для информации и использования Crontab.
Если у вас есть доступ к cron, то вам не нужен PHP - e,g, to один раз в день....
23 4 * * * find /your/directory -iname \*.txt -mtime +3 -exec rm -f {} \;
Если у вас нет доступа к cron, запустите его как сборщик мусора как функцию завершения работы. Например (нагло крадет код Кайла Хадсона, хотя я отмечаю, что он даже скопировал комментарии отсюда;)
function gc_txt_files()
{
$dir = '/path/to/files/';
$days = 3600 * 24 * 7; // 7 days
if($handle = opendir($dir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if ( filemtime($dir.$file) <= time()-$days) {
unlink($dir.$file);
}
}
closedir($handle);
}
}
if (17==rand(0,200)) { // adjust 200 depending on how frequently you want to clear out
register_shutdown_function('gc_txt_files');
}
Пытаться:
<?php
$dir = '/path/to/files/';
$days = 3600 * 24 * 7; // 7 days
if($handle = opendir($dir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if ( filemtime($dir.$file) <= time()-$days) {
unlink($dir.$file);
}
}
closedir($handle);
}
затем запустите этот скрипт через cron