Как очистить файлы на моем сайте, на которые я больше не ссылаюсь

StackOverflow https://stackoverflow.com/questions/9009904

  •  14-11-2019
  •  | 
  •  

Вопрос

Я работаю над веб-сайтом с большим количеством изображений и PDF-файлов, которые регулярно обновляются, но старые файлы не удаляются после загрузки новых.Поэтому у меня есть много файлов, которые просто лежат на сервере и не используются.

Есть ли сценарий или что-то еще, что я могу запустить и искать файлы, на которые ничего не ссылается?

РЕДАКТИРОВАТЬ :
Я не спрашиваю, как в будущем загружать новые файлы и удалять старые.Я уже позаботился об этом.
Я просто хочу знать, как избавиться от файлов, которые больше не используются.
Имеет ли это смысл?

Это было полезно?

Решение

Попробуйте это, просто не забудьте изменить свой каталог $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. Link1 указывает на File1
  2. Обновлять Link1 указать на File2
  3. Удалить File1 немедленно.

Если в вашем сценарии у вас может быть несколько ссылок на один и тот же файл или файлы, которые могут быть повторно связаны в течение короткого периода времени, я бы предложил настроить задание cron, которое будет выполняться, например, раз в неделю и проверять все файлы в вашем хранилище. files/ каталог против links таблицы в вашей базе данных и удалите их, если нет ссылок, ссылающихся на этот конкретный файл.

Есть много бесплатных инструментов проверки Checker ссылок, которые вы можете использовать.После запуска его на вашем сайте (фильтрация для файлов Image / PDF), вы можете сделать этот сгенерированный список и программматически проверяйте его в каталоге изображений / PDF, чтобы узнать, что нет в списке.Имейте в виду, что это может быть сложно определить с уверенностью в виде динамически сгенерированного генеракодицетагкода (на основе ввода пользователей / настроек, Apache Rewrites, файлы, возвращаемые через код), могут быть не включены.

Если это сервер Unix, используйте команду find с чем-то вроде этого:

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

В этом случае я смотрю в папку / TMP / Web_TMP для пустых папок, а также файлов, которые не были доступен в 120 минутах или не были доступны за 30 минут и более 20 МБ.После основания он удалит найденную запись

Может быть, в команде find вы найдете то, что позволит вам удалить файлы, которые не были доступен / изменены / редактировать в течение длительного времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top