Простой поиск файлов по названию и расширению на PHP
Привет, друзья! Довелось мне поработать на одном коммерческом сайте. И, как выяснилось, с течением недолгого времени на сайте пропала часть изображений. Удалять их, конечно же, никто не удалял, и предположения были, что папку случайно перенесли в другое место.
Да, бывает и такое. Но суть сейчас не в этом. А в том, как я искал эту папку. Поскольку мне были известны имена некоторых файлов (а это уже хорошая зацепка при поиске), то я решил написать небольшой скрипт для поиска этих файлов по всему сайту. Вдобавок ко всему специально для аудитории сайта я доработал поиск и сделал несколько разных его вариантов.
Два варианта поиска файлов по названию на PHP
В этом блоке я представляю вашему вниманию два разных варианта поиска файлов на вашем хостинге по названию.
1. Точный поиск по названию:
<?php
header("Content-Type: text/html; charset=utf-8");
$path = $_SERVER["DOCUMENT_ROOT"];
$directory = new \RecursiveDirectoryIterator($path);
$iterator = new \RecursiveIteratorIterator($directory);
foreach ($iterator as $info) {
$name_file = substr($info->getfileName(), 0, strrpos($info->getfileName(), "."));
$name_search = array("robots", "www_pandoge_com"); // Список файлов
foreach($name_search as $key_name) {
if($name_file == $key_name) {
echo $info->getPathname()."<br>";
}
}
}
?>
2. Неточный поиск (по наличию слова в названии):
<?php
header("Content-Type: text/html; charset=utf-8");
$path = $_SERVER["DOCUMENT_ROOT"];
$directory = new \RecursiveDirectoryIterator($path);
$iterator = new \RecursiveIteratorIterator($directory);
foreach ($iterator as $info) {
$name_file = substr($info->getfileName(), 0, strrpos($info->getfileName(), "."));
$name_search = array("robots", "www_pandoge_com"); // Список файлов
foreach($name_search as $key_name) {
if(preg_match("/".$key_name."/", $name_file)) {
echo $info->getPathname()."<br>";
}
}
}
?>
Во всех вариантах – переменная $name_search содержит в себе слово (слова) для вашего поиска по файлам.
Код вы вставляете в файл PHP с любым именем, после чего грузите его на ваш хостинг.
Обращаетесь к нему на вашем сайте, и на выходе (при положительном результате) вы получите список найденных файлов с полным их местоположением.
Поиск файлов по расширению на PHP
В поисках файлов по расширению, как вы поняли, не учитывается имя, а учитывается его формат. Например, у изображений это может быть PNG, JPG или GIF, а у аудиофайлов – MP3, WAVE и другие.
Код для поиска:
<?php
header("Content-Type: text/html; charset=utf-8");
$path = $_SERVER["DOCUMENT_ROOT"];
$directory = new \RecursiveDirectoryIterator($path);
$iterator = new \RecursiveIteratorIterator($directory);
foreach ($iterator as $info) {
$file_formal = substr($info->getfileName(), strrpos($info->getfileName(), ".") + 1);
$name_search = array("mp3", "jpg"); // Список форматов
foreach($name_search as $key_name) {
if($file_formal == $key_name) {
echo $info->getPathname()."<br>";
}
}
}
?>
Его вы также вставляете в PHP-файл, грузите на хостинг и обращаетесь для получения результатов поиска.
Обратите внимание, что регистр во всех вариантах имеет значение. И, например, если файл на хостинге имеет расширение MP3, а в переменной для поиска вы указали «mp3» – файлы найдены не будут. Но этот момент можно подправить с помощью функции «mb_strtolower».