2016-05-03 2 views
3

Я создал приложение для загрузки изображения с использованием PHP, Javascript и WAMP-сервера. Мне нужно удалить автоматически загруженное изображение через некоторое время, скажем, X минут. Как это можно достичь?Автоматическое удаление загруженного изображения через некоторое время PHP

Благодаря ...

+1

Вы можете установить cronjob метод на сервере который удалит все изображения внутри любой папки. –

+0

У вас может быть задание cron, работающее каждые N минут, которое удалит все файлы старше X минут (например, с помощью find & rm). Нет реального смысла, используя PHP, чтобы сделать это здесь – peuh

+0

он работает WAMP, который является Windows. Поэтому он, вероятно, не знает, что вы имеете в виду. –

ответ

1

Попробуйте это решение:

<?php 
     /** 
     * FileName: ajax-processor.php 
     */ 
     $uploadDir = __DIR__ . "/uploads"; // HERE: YOU SPECIFY THE PATH TO THE UPLOAD DIRECTORY 
     $action  = isset($_POST['action']) ? htmlspecialchars(trim($_POST['action']))  : null; 
     $imageAge = isset($_POST['imageAge']) ? htmlspecialchars(trim($_POST['imageAge'])) : 24; 

     // IF AJAX TELLS US TO DELETE ALL IMAGES & GIVES US THE MAXIMUM AGE OF THE IMAGES TO BE DELETED 
     // WE NOW FIRE THE COMMANDS BELOW. 
     // NOTE THAT USING THE imageAge WE CAN DECIDE THE FILES THAT WOULD BE DELETED SINCE WE DON'T WANT ALL DELETED 
     // THE DEFAULT HERE WOULD BE 24 HOURS... 
     if($action=="delete" && $imageAge>0){ 
      $deletionReport = removeImagesInFolder($uploadDir, $imageAge); 
      return json_encode($deletionReport); 
     } 

     function getImagesInFolder($dir_full_path){ 
      $returnable  = array(); 
      $files_in_dir = scandir($dir_full_path); 
      $reg_fx   = '/(\.png$)|(\.jpg$)|(\.jpeg$)|(\.tiff$)/'; 
      foreach($files_in_dir as $key=>$val){ 
       $temp_file_or_dir = $dir_full_path . DIRECTORY_SEPARATOR . $val; 
       if(is_file($temp_file_or_dir) && preg_match($reg_fx, $val)){ 
        $regx_dot_wateva   = '/\.{2,4}$/'; 
        $regx_dot     = '/\./'; 
        $regx_array     = array($regx_dot_wateva, $regx_dot); 
        $replace_array    = array("", "_"); 
        $return_val     = preg_replace($regx_array, $replace_array, $val); 
        $returnable[$return_val] = $temp_file_or_dir ; 
       }else if(is_dir($temp_file_or_dir) && !preg_match('/^\..*/', $val)){ 
        getImagesInFolder($temp_file_or_dir); 
       } 
      } 
      return $returnable; 
     } 

     function removeImagesInFolder($imgFolder, $imageAgeInHours=24){ 
      //CHANGE FILE-PERMISSION ON THE IMAGE DIRECTORY SO YOU COULD WORK WITH IT. 
      chmod($imgFolder, 0755); 

      $arrImages   = getImagesInFolder($imgFolder); 
      $statusReport  = array(); 
      foreach($arrImages as $imgKey=>$imageFile){ 
       $imageAgeInSecs  = $imageAgeInHours*60*60; 
       if (file_exists($imageFile)) { 
        $now   = time(); 
        $fileModTime = filemtime($imageFile); 
        $fileAge  = ($now - $fileModTime); 

        if($fileAge >= $imageAgeInSecs){ 
         /* BE CAREFUL: THE GIVEN FILE WOULD ACTUALLY BE DELETE!!! */ 
         //HERE IS A LITTLE ADDITION FOR PERMISSION ISSUES 
         //NOTE THAT I DID NOT TEST THIS SINCE I AM NOT ON A WINDOWS SYSTEM & I DON'T USE WAMP... BUT I THINK THIS MAY DO THE TRICK 
         //CHANGE FILE-PERMISSION ON THE IMAGE FILE SO YOU COULD DELETE IT. 
         chmod($imageFile, 0755); //GIVES THE ADMINISTRATOR RIGHT TO DO EVERYTHING WITH THE FILE; BUT ALLOWS ONLY READING/EXECUTION FOR OTHER USERS. 
         if(unlink($imageFile)) { 

          $statusReport[] = "Deleted " . $imageFile . ". This File is about " . ($fileAge/(24 * 60 * 60)) . " Day(s) Old."; 
         } 
        } 
       } 
      } 
      return $statusReport; 
     } 

    ?> 

Вот Javascript, что склеивает весь процесс ...

<script type="text/javascript"> 
     (function($) { 
      $(document).ready(function(){ 
       var iInterval = setInterval(deleteImagesViaAjax, 1000*60+60); //DELETE IMAGES EVERY HOUR 

       function deleteImagesViaAjax(){ 
        $.ajax({ 
         url: "http://localhost/framework/ajax-processor.php", 
         dataType: "json", 
         cache: false, 
         type: "POST", 
         data: ({ 
          action  : 'delete', 
          imageAge : 24   //MAXIMUM AGE OF THE IMAGE TO DELETE IN HOURS - THIS MEANS ALL IMAGES UPLOADED ABOUT 24 HOURS AGO 
         }), 

         success: function (data, textStatus, jqXHR) { 
          console.log(data); 
         }, 

         error: function (jqXHR, textStatus, errorThrown) { 
          console.log('The following error occured: ' + textStatus, errorThrown); 
         }, 

         complete: function (jqXHR, textStatus) { 
         } 
        }); 
       } 

      }); 
     })(jQuery); 
    </script> 
+0

Warning: unlink (.): Разрешение отклонено в C: \ wamp \ www \ ImageUploadApp \ ajax-processor.php – Nidhish

+0

Получаю предупреждение, подобное этому. Как я могу это преодолеть? – Nidhish

+0

Я обновил Код ... Вы можете попробовать еще раз. – Poiz

0

Cron Job является правильным инструментом вам нужно. Cron в окнах немного сложно достичь, используя php. если вы используете фреймворк, это легко сделать. Но следующие ссылки помогут вам достичь своей цели.

How to create cron job using PHP?

Run Cron Job on PHP Script, on localhost in Windows

+1

UNIX =' CRON' - Windows = 'Task Scheduler', это так же хорошо, может быть, лучше – RiggsFolly

Смежные вопросы