2012-01-25 7 views
1

私は定期的に更新されるたくさんの画像とPDFファイルを持つウェブサイトで作業していますが、古いファイルは新しいものがアップロードされた後に削除されません。そのため、私は使用されていないサーバ上にたくさんあるファイルを持っています。私のウェブサイト上で私がもうリンクしていないファイルをクリーニングする方法

実行可能なスクリプトがありますか、何もリンクされていないファイルを検索しますか?

EDIT:
私は新しいファイルをアップロードし、将来的に古いものを削除する方法を求めていないのです。私はすでにそれを世話しました。
もう使用していないファイルを取り除く方法を知りたいだけです。
それは意味がありますか?

+0

更新時にトリガーを設定しないのはなぜですか?リンケージをどのように保存しますか? – devdRew

+0

それはどういう意味ですか? – Radi

+0

ファイルシステム上のファイルを指すデータベースにurisファイルを格納していますか? –

答えて

2

自分のディレクトリを変更することを忘れません$dir = "/Your/directory/here";

<? 
$findex = array(); 
$findex[path] = array(); 
$findex[file] = array(); 

$extensions = array('.cfm','.html','.htm','.css','.php','.gif','.jpg','.png','.jpeg','.dwt'); 
$excludes = array('.svn'); 

function rec_scandir($dir) 
     { 
     $files = array(); 
     global $findex; 
     global $extensions; 
     global $excludes; 

     if ($handle = opendir($dir)) 
     { 
     while (($file = readdir($handle)) !== false) 
      { 
      if ($file != ".." && $file != ".") 
       { 
       if (is_dir($dir . "/" . $file)) 
         { 
         $files[$file] = rec_scandir($dir . "/" . $file); 
         } 
       else 
         { 
         for ($i=0;$i<sizeof($extensions);$i++) 
          { 
          if (strpos(strtolower($file),strtolower($extensions[$i])) > 0) 
           { 
           $found = true; 
           } 
          } 
         for ($i=0;$i<sizeof($excludes);$i++) 
          { 
          if (strpos(strtolower($file),strtolower($excludes[$i])) > 0) 
           { 
           $found = false; 
           } 
          } 
         if ($found) 
          { 
          $files[] = $file; 
          $dirlink = $dir . "/" . $file; 
          array_push($findex[path],$dirlink); 
          array_push($findex[file],$file); 
          } 
         $found = false; 
         } 
        } 
       } 
      closedir($handle); 
      return $findex; 
      } 
     } 


$dir = "/Your/directory/here"; 

echo "\n"; 
echo " Searching ". $dir ." for matching files\n"; 

$files = rec_scandir($dir); 

echo " Found " . sizeof($files[file]) . " matching extensions\n"; 

echo " Scanning for orphaned files....\n"; 

$findex[found] = array(); 

for ($i=0;$i<sizeof($findex[path]);$i++) 
     { 
     echo $i . " "; 
     $contents = file_get_contents($findex[path][$i]); 
     for ($j=0;$j<sizeof($findex[file]);$j++) 
       { 
       if (strpos($contents,$findex[file][$j]) > 0) 
         { 
         $findex[found][$j] = 1; 
         } 
       } 
     } 

echo "\n"; 

$counter=1; 
for ($i=0;$i<sizeof($findex[path]);$i++) 
     { 
     if ($findex[found][$i] != 1) 
       { 
       echo " " . $counter . ") " . substr($findex[path][$i],0,1000) . " is orphaned\n"; 
       $counter++; 
       } 
     } 

?> 

ソース、これを試してください:あなたが使用できる多くの無料リンクチェッカーツールがありますhttp://sun3.org/archives/297

1

。あなたのサイトに対してそれを実行した後(image/pdfファイルをフィルタリングする)、生成されたリストを取得してimages/pdfディレクトリに対してプログラムでチェックし、リストにないものを見つけることができます。 src/href(ユーザーの入力/設定、Apacheの書き換え、コード経由で返されたファイルに基づいて)が動的に生成されたとして確実に判断するのは難しいことに注意してください。

1

そこにあなたがリンクを更新した後、再度、それらのファイルが必要になります何の確率はありませんし、あなたがそれらに複数のリンクを持っているどのファイルを持っていない場合、私はあなたが、リンクを更新する時にファイルを削除することをお勧めしたいです。すなわち:すぐFile1を削除File2

  • を指すように更新Link1File1
    1. Link1ポイント。

    あなたのシナリオでは、短期間に再リンクされるかもしれない同じファイルまたはファイルへの複数のリンクがある場合は、毎週1回の例で実行されるcronジョブを設定し、 files/ディレクトリ内のすべてのファイルをデータベース内のlinksテーブルと照合し、特定のファイルを参照するリンクがない場合は削除します。

  • 1

    それがUNIXサーバーであれば、このようなものでfindのコマンドを使用します。私は空のフォルダのために/ tmp/web_tmpフォルダに探しているだけでなく、「その避難所をファイルしています。この場合

    find /tmp/web_tmp \(\(\(-type f -amin +120 \) -or \(-type f -amin +30 -size 20480k \) \) -exec rm {} \; \) -or \(-depth -type d -empty -exec rmdir {} \; \) 
    

    120分でアクセスされたか、30分でアクセスされておらず、20Mbを超えています。発見されたエントリは削除されます。

    findコマンドでは、長い時間アクセス/変更/編集されていないファイルを削除することができます。

    関連する問題