Domanda

Sto lavorando su un sito Web con un sacco di immagini e file PDF che vengono aggiornati regolarmente, ma i vecchi file non vengono cancellati dopo che i nuovi vengono caricati.Quindi ho molti file che sono semplicemente seduti sul server senza essere utilizzati.

C'è uno script o qualsiasi altra cosa posso correre e cercherò i file che nulla si collega a?

Modifica:

Non sto chiedendo come caricare nuovi file ed eliminare i vecchi in futuro.Ho già preso cura di questo.
Voglio solo sapere come sbarazzarmi dei file che non sono più in uso.
Ha senso?

È stato utile?

Soluzione

Prova questo, basta non dimenticare di cambiare la tua directory $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++;
                }
        }

?>
.

Fonte: http://sun3.org/archives/297

Altri suggerimenti

Se non ci sono probabilità che avrai nuovamente bisogno di tali file dopo aver aggiornato il link e non hai file che hanno più collegamenti a loro, ti suggerisco di eliminare i file al momento dell'aggiornamento di un collegamento.IE:

    .
  1. Link1 Punti a File1
  2. Aggiorna Link1 per puntare a File2
  3. Elimina immediatamente File1.

    Se nel tuo scenario potresti avere più collegamenti allo stesso file o file che potrebbero essere innalzati in un breve periodo, suggerirei di configurare un lavoro di cron che verrà eseguito per un esempio una volta ogni settimana e controllerà tutti i file inLa directory files/ contro la tabella links nel database ed eliminali se non ci sono collegamenti a cui fare riferimento a quel file particolare.

Ci sono molti strumenti di controllo del collegamento gratuiti che è possibile utilizzare.Dopo averlo eseguito contro il tuo sito (filtraggio per file immagine / PDF), è quindi possibile eseguire quell'elenco generato e controllarlo a livello di programmazione rispetto alla directory di immagini / PDF per scoprire cosa non è nell'elenco.Tieni presente che questo può essere difficile determinare con certezza come generato dinamicamente generatodicetagcode (basato su ingressi / impostazioni dell'utente, riscrivi apache, i file restituiti tramite codice) potrebbero non essere inclusa.

Se è un server UNIX, utilizzare il comando find con qualcosa del genere:

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

In questo caso sto guardando nella cartella / tmp / web_tmp per le cartelle vuote e i file che non sono stati accessibili in 120 minuti o non sono stati accessibili in 30 minuti e sono oltre 20 MB.Una volta fondato eliminerà la voce trovata

Forse nel comando find troverete qualcosa che ti permetterà di eliminare i file che non sono stati accessibili / modificati / modificati da molto tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top