PHP Удаление файла через 24 часа после загрузки
Я сделал простой скрипт, который позволяет пользователям загружать HTML-файлы в веб-каталог на моем сервере. Тем не менее, я бы хотел, чтобы каждый файл был удален через 24 часа на моем сервере. 24 часа для каждого файла, а не 24 часа для всего каталога. Вот мой код... Спасибо за вашу помощь.:)
<?php
$target = "users/";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)
&& ($_FILES["uploaded"]["type"] == "html"))
{
echo "File: " . $_FILES["uploaded"]["name"] . "<br />";
echo "Type: " . $_FILES["uploaded"]["type"] . "<br />";
echo "Size: " . ($_FILES["uploaded"]["size"] / 1024) . " Kb<br />";
echo "Location: /users/" . $_FILES["uploaded"]["name"];
}
else {
echo "Sorry, " . $_FILES["uploaded"]["name"] . " is not a valid HTML document. Please try again.";
unlink . $_FILES["uploaded"]["name"];
}
?>
4 ответа
Включите следующий скрипт в конце вашего скрипта. Не забудьте заменить /var/www/uploads/
с правильным путем. В противном случае все файлы будут удалены в другом месте.
$files=shell_exec('find /var/www/uploads/ -mmin +1440');
$file = explode("\n",$files);
if(isset($file) && is_array($file))
{
foreach($file as $val)
{
@unlink($val);
}
}
Приведенный выше код будет работать на хостинге на базе Linux/UNIX.
- "shell_exec" выполнит команду linux и вернет выход
- "find -mmin -1440" ищет файлы старше 1 дня или 1440 минут
- Путь к первой строке "/var/www/uploads/" необходимо заменить полным путем к каталогу.
- Отмена связи имеет знак "@", чтобы избежать предупреждения, если файл там не существует.
- Так как это мощная команда на основе Linux, проверьте правильность путей.
Использование Cron
выполнять этот скрипт каждые 10 минут (лучше 30 или 60)
$Time=time();
foreach(glob('/users/*') as $file){
if(filemtime($file)+60*60*24<$Time){
unlink($file);
}
}
Не полностью защищен, но это дает представление..
foreach(glob("/users/YOUR_USER/*") as $file) {
$file = "/users/YOUR_USER/".$file;
if ((time() - filectime($file)) >= 86400) {
// delete me
}
}
Если вы используете сервер Windows, запустите пакетный файл с помощью планировщика Windows: пакетный файл, чтобы удалить файлы старше N дней
В противном случае, просто установите работу CRON.