Pregunta

Estoy trabajando en un sitio web con muchas imágenes y archivos PDF que se actualizan periódicamente, pero los archivos antiguos no se eliminan después de cargar los nuevos.Por lo tanto, tengo muchos archivos que están en el servidor sin ser utilizados.

¿Existe algún script o cualquier otra cosa que pueda ejecutar y buscar archivos a los que no esté vinculado nada?

EDITAR :
No estoy preguntando cómo cargar archivos nuevos y eliminar los antiguos en el futuro.Ya me he ocupado de eso.
Sólo quiero saber cómo deshacerme de los archivos que ya no se utilizan.
¿Tiene sentido?

¿Fue útil?

Solución

Pruebe esto, pero no olvide cambiar su directorio. $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++;
                }
        }

?>

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

Otros consejos

Si no hay probabilidad de que necesite esos archivos nuevamente después de actualizar el enlace y no tiene archivos que tengan múltiples enlaces, le sugiero que elimine los archivos al momento de actualizar un enlace.Es decir:

  1. Link1 puntos a File1
  2. Actualizar Link1 apuntar a File2
  3. Borrar File1 inmediatamente.

Si en su situación puede tener varios enlaces al mismo archivo o archivos que podrían volver a vincularse en un período corto, le sugiero configurar un trabajo cron que se ejecutará, por ejemplo, una vez por semana y verificará todos los archivos en su files/ directorio contra el links tabla en su base de datos y elimínelos si no hay enlaces que hagan referencia a ese archivo en particular.

Hay muchas herramientas de corrector de enlaces gratuitos que puede usar.Después de ejecutarlo contra su sitio (filtrado para archivos de imagen / PDF), puede tomar esa lista generada y verificarlo programáticamente contra su directorio de imágenes / PDF para averiguar qué no está en la lista.Tenga en cuenta que esto puede ser difícil de determinar con certeza como generado dinámicamente generado de generación de generación (según la entrada / configuración del usuario, la configuración de Apache, los archivos devueltos a través del código), se puede incluir.

Si es un servidor UNIX, use el comando find con algo como este:

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

En este caso, estoy buscando en la carpeta / TMP / WEB_TMP para carpetas vacías, así como archivos que no se han accedido en 120 minutos o no se han accedido en 30 minutos y hay más de 20 MB.Una vez fundado, eliminará la entrada encontrada

Tal vez en el comando find, encontrará algo que le permitirá eliminar archivos que no se han accedido / modificado / editado en mucho tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top