2013-01-06 49 views
0

我已經在我的網絡服務器,其中.html文件存儲在一個「緩存」的文件夾,文件結構如下:刪除所有文件,包括子目錄中舊的3個月內PHP

cache > [email protected] > several .html files. 

我需要一個PHP腳本,它將瀏覽用戶文件夾中的所有子目錄,並刪除3個月以前的文件。

我到目前爲止這個腳本:

$DIR = '/cache/'; 
if ($handle = opendir($DIR)) { 

    while (false !== ($file = readdir($handle))) { 
     if (filemtime($DIR.$file) <= time()-60*60*24*120) { //120 days? 
      unlink($DIR.$file); 
     } 
    } 

    closedir($handle); 
} 

但它不處理子目錄。它也給我的錯誤,因爲它試圖取消鏈接directorys ..

更新:嘗試添加計數功能:

<?php 

rrmdir(/www/deletecontentsofthisfolder/); 
echo $count . ' files deleted!'; 

function rrmdir($dir,$count=0) 
{ 
    if (is_dir($dir)) 
    { 
     $objects = scandir($dir); 
     foreach ($objects as $object) 
     { 
      if ($object != "." && $object != "..") 
      { 
       if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object,$count); 
       if (filemtime($dir."/".$object) <= time()-60*60*24*120) @unlink($dir."/".$object); count++ 
      } 
     } 
     reset($objects); 
     //rmdir($dir); 
    } 
return $count; 
} 
+1

代碼是不是宗教,你可以嘗試的東西,沒有風險去地獄:)) – moonwave99

+1

你可以看看[Symfony文件系統組件](http://symfony.com/doc/current/components/filesystem.html),它允許你遞歸地刪除目錄 –

+0

Extend它處理子目錄,當你遇到問題時,在這裏提出一個問題。這一個不是問題。 – markus

回答

6
function rrmdir($dir) 
{ 
    if (is_dir($dir)) 
    { 
     $objects = scandir($dir); 
     foreach ($objects as $object) 
     { 
      if ($object != "." && $object != "..") 
      { 
       if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); 
       if (filemtime($dir."/".$object) <= time()-60*60*24*120) @unlink($dir."/".$object); 
      } 
     } 
     reset($objects); 
     //rmdir($dir); 
    } 
} 
+0

我得到'[function.rmdir]:目錄不爲空'的錯誤,我不是試圖刪除導演,只是其中的文件。 – Jack

+0

我更新了答案 –

+0

完美,謝謝! – Jack

相關問題