Как очистить файлы на моем сайте, на которые я больше не ссылаюсь
-
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
Другие советы
Если нет вероятности, что эти файлы вам снова понадобятся после обновления ссылки, и у вас нет файлов с несколькими ссылками на них, я бы посоветовал вам удалить файлы во время обновления ссылки.Т.е.:
Link1
указывает наFile1
- Обновлять
Link1
указать наFile2
- Удалить
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
вы найдете то, что позволит вам удалить файлы, которые не были доступен / изменены / редактировать в течение длительного времени.