2012-07-07 35 views
1

可能重複:
How can I delete files older than 1 hour?刪除舊文件 - 一個小時前還是一個多小時前

代碼向下跌破刪除一個名爲「圖片」文件夾內的所有文件。沒有抱怨一切正常,因爲它應該,但有沒有辦法只有刪除文件,這是創建一個小時前或更多小時前,而不是?請告訴我怎麼做,我正在努力學習。嘗試重新使用相同的代碼樓下更好地瞭解,並幫助用戶PHP程序員在世界各地

<?php 
define('PATH', 'Images/'); 

function destroy($dir) { 
    $mydir = opendir($dir); 
    while(false !== ($file = readdir($mydir))) { 
     if($file != "." && $file != "..") { 
      chmod($dir.$file, 0777); 
      if(is_dir($dir.$file)) { 
       chdir('.'); 
       destroy($dir.$file.'/'); 
       rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />"); 
      } 
      else 
       unlink($dir.$file) or DIE("couldn't delete $dir$file<br />"); 
     } 
    } 
    closedir($mydir); 
} 
destroy(PATH); 
echo 'all done.'; 
+0

在確定您不在目錄中以選擇性刪除後,使用['filemtime'](http://php.net/manual/en/function.filemtime.php)是否文件 – 2012-07-07 13:41:19

+0

@Aaron:'filemtime'返回上次修改文件的時間,而不是文件創建時間。 – Jocelyn 2012-07-07 13:42:48

+0

亞倫,如果你不介意用我發佈的相同代碼來舉例說明,那麼有什麼變化嗎?我會接受你的答案,以防它做到了預期的事情,請讓我更好地理解事情,也許幫助其他新程序員,而不僅僅是把它保持爲夢想 – user1508409 2012-07-07 13:44:16

回答

3

您可以使用filemtime()filectime()。另外,您不能使用rmdir(),因爲您要刪除特定文件

你所要做的

  1. date("U",filectime($file) - 返回你的文件是在Unix紀元時間修改的最後時間。

  2. unlink($file) - 刪除指定的文件。你必須使用它而不是rmdir()。需要

  3. ifwhile/for聲明:

    while($file) 
    { 
        if(date("U",filectime($file) <= time() - 3600) 
        { 
         unlink($file) 
        } 
    } 
    

然後把它添加到你的腳本:

function destroy($dir) { 
$mydir = opendir($dir); 
while($file = readdir($mydir)) { 
    if($file != "." && $file != "..") { 
     chmod($dir.$file, 0777); 
     if(is_dir($dir.$file)) { 
      chdir('.'); 
      while($dir.$file) { 
       if(date("U",filectime($file) >= time() - 3600) 
       { 
        unlink($dir.$file) 
       } 
      } 

     } 
     else 
      unlink($dir.$file) or DIE("couldn't delete $dir$file<br />"); 
    } 
} 
closedir($mydir); 
} 

我希望它可以幫助你。

記住:

  • 沒有辦法來獲得的Unix/PHP的
  • 目前if語句返回true如果該文件最後更改多於或等於一個文件的創建時間小時前
+0

我正在使用mac,但是網絡主機使用的是Unix,你能否將代碼植入我發佈的代碼中以查看它應該如何,請然後我要去接你 – user1508409 2012-07-07 14:09:16

+0

當然,給我5分鐘。 – 2012-07-07 14:15:49

+0

謝謝,我在等你! :) – user1508409 2012-07-07 14:21:11

0

在Unix中,它是不可能恢復的創建時間,只有最後一次修改使用filectime

日期

但是,如果您使用的是Windows系統,則恰恰相反。使用相同的方法filectime,您將檢索創建時間,而不是上次更改的時間。

+0

Hyunmin Kim,在我發佈的代碼中植入filectime,並且我將接受您的答案作爲獎勵,請您看起來像專家 – user1508409 2012-07-07 13:59:10

+0

這隻適用於Windows,但基本思路是:將時間轉換爲DateTime對象。與使用DateTime :: diff()(http://www.php.net/manual/en/datetime.diff.php)的當前時間進行比較創建一個條件語句,說明它是否超過創建時間的一個小時,刪除文件 – 2012-07-07 14:04:40

3

我不會使用php來做這個,但是一個簡單的shell腳本與一個cron作業相結合(在linux上至少)。

如果你是在Linux上,該腳本會看起來像:

#! /bin/sh 
find /path/to/Images/ -mmin +60 -exec rm -f {} \;  // modification date, not creation date... 

而且我會用cron來每隔一小時運行,它會自動一次。

完成時,cron項將如下所示:

0 * * * * /path/to/shell/script.sh // run script every whole hour 

沒有直接回答這個問題,但是過長的評論,也許一個可能的解決方案,如重複的問題,所有的答案都集中在php以及...

相關問題