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.

Другие вопросы по тегам