2016-05-03 10 views
3

Ich habe eine Anwendung erstellt, um Bilder mit PHP, Javascript und WAMP-Server hochzuladen. Ich muss das hochgeladene Bild nach einiger Zeit automatisch löschen, sagen wir X Minuten. Wie kann das erreicht werden?Automatisch hochgeladenes Bild nach einiger Zeit löschen PHP

Dank ...

+1

Sie cronjob Methode auf dem Server festlegen Das löscht alle Bilder in einem Ordner. –

+0

Sie könnten alle n Minuten einen Cron-Job ausführen lassen, der alle Dateien löschen würde, die älter als X Minuten sind (z. B. mit find & rm). Es gibt keinen wirklichen Punkt mit PHP, um das hier zu tun – peuh

+0

er läuft WAMP, das ist eine Windows-Sache. Also weiß er wahrscheinlich nicht, was du meinst. –

Antwort

1

diese Lösung Versuchen:

<?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; 
     } 

    ?> 

Hier ist die Javascript, die den gesamten Prozess klebt ...

<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

Warnung: unlink (.): Berechtigung verweigert in C: \ wamp \ www \ ImageUploadApp \ ajax-processor.php – Nidhish

+0

Ich erhalte eine Warnung wie diese. Wie kann ich das überwinden? – Nidhish

+0

Ich habe den Code aktualisiert ... Sie können es noch einmal versuchen. – Poiz