Frage

Ich arbeite an einer Website mit vielen Bildern und PDF-Dateien, die regelmäßig aktualisiert werden, aber die alten Dateien werden nach dem Hochladen der neuen nicht gelöscht.Daher habe ich viele Dateien, die ungenutzt auf dem Server liegen.

Gibt es ein Skript oder was auch immer, das ich ausführen kann und das nach Dateien sucht, zu denen nichts verlinkt ist?

BEARBEITEN :
Ich frage nicht, wie man in Zukunft neue Dateien hochlädt und die alten löscht.Ich habe mich bereits darum gekümmert.
Ich möchte nur wissen, wie ich die Dateien loswerden kann, die nicht mehr verwendet werden.
Ist das sinnvoll?

War es hilfreich?

Lösung

Probieren Sie es aus, vergessen Sie aber nicht, Ihr Verzeichnis zu ändern $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++;
                }
        }

?>

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

Andere Tipps

Wenn die Wahrscheinlichkeit unwahrscheinlich ist, dass Sie diese Dateien nach der Aktualisierung des Links erneut benötigen, und Sie keine Dateien haben, auf die mehrere Links verweisen, würde ich Ihnen empfehlen, die Dateien zum Zeitpunkt der Aktualisierung eines Links zu löschen.Dh:

  1. Link1 verweist auf File1
  2. Aktualisieren Link1 deuten auf File2
  3. Löschen File1 sofort.

Wenn Sie in Ihrem Szenario möglicherweise mehrere Links zu derselben Datei oder zu Dateien haben, die in kurzer Zeit erneut verknüpft werden könnten, würde ich vorschlagen, einen Cron-Job einzurichten, der einmal pro Woche für ein Beispiel ausgeführt wird und alle Dateien in Ihrem überprüft files/ Verzeichnis gegen die links Tabelle in Ihrer Datenbank und löschen Sie sie, wenn keine Links vorhanden sind, die auf diese bestimmte Datei verweisen.

Es gibt viele kostenlose Link-Checker-Tools, die Sie verwenden können.Nachdem Sie es gegen Ihre Site ausgeführt haben (Filtern nach Image / PDF-Dateien), können Sie diese generierte Liste annehmen und programmgesteuert von Ihrem Bildern / PDF-Verzeichnis überprüfen, um herauszufinden, was sich nicht in der Liste befindet.Beachten Sie, dass dies schwierig sein kann, mit Sicherheit als dynamisch generierter generierter generierter generierter generierter generierter (basierend auf Benutzereingaben / -einstellungen, Apache-Umschreibungen, Dateien, die per Code zurückgegeben werden, nicht enthalten sein können.

Wenn es sich um einen Unix-Server handelt, verwenden Sie die find Befehl mit etwas wie diesem:

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 diesem Fall suche ich im Ordner /tmp/web_tmp nach leeren Ordnern sowie nach Dateien, auf die seit 120 Minuten oder 30 Minuten nicht zugegriffen wurde und die größer als 20 MB sind.Nach der Gründung wird der gefundene Eintrag gelöscht

Vielleicht im find Mit dem Befehl finden Sie etwas, mit dem Sie Dateien löschen können, auf die seit langer Zeit nicht mehr zugegriffen/geändert/bearbeitet wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top