Php find files by name

Поиск файла в папке и подпапках на PHP

Хорошим примером использования рекурсии, может послужить поиск файла в папке и всем вложенным подпапкам.

Для поиска файла, достаточно перебрать все файлы во всех папках и сравнить название файла с искомым. И в случае совпадения добавить путь до файла в массив найденных фалов.

$folderName = ABSPATH; // в какой папке ищем $fileName = "xml"; // что ищем $found = search_file( $folderName, $fileName ); print_r( $found ); /* Вернет: Array ( [0] => /home/example.com/xmlrpc.php [1] => /home/example.com/wp-includes/class-wp-xmlrpc-server.php [2] => /home/example.com/wp-includes/wlwmanifest.xml ) */ /** * Поиск файла по имени во всех папках и подпапках * @param string $folderName - пусть до папки * @param string $fileName - искомый файл * @return array Массив найденных файлов. */ function search_file( $folderName, $fileName ) < $found = array(); $folderName = rtrim( $folderName, '/' ); $dir = opendir( $folderName ); // открываем текущую папку // перебираем папку, пока есть файлы while( ($file = readdir($dir)) !== false )< $file_path = "$folderName/$file"; if( $file == '.' || $file == '..' ) continue; // это файл проверяем имя if( is_file($file_path) )< // если имя файла искомое, то вернем путь до него if( false !== strpos($file, $fileName) ) $found[] = $file_path; >// это папка, то рекурсивно вызываем search_file elseif( is_dir($file_path) ) < $res = search_file( $file_path, $fileName ); $found = array_merge( $found, $res ); >> closedir($dir); // закрываем папку return $found; >

Источник

Поиск файлов в PHP

Для поиска файлов на сервере хорошо подходит функция glob(), которая возвращает список файлов по заданной маске, например:

В маске можно использовать следующие специальные символы:

Читайте также:  Java как работает лямбда
* Соответствует нулю или большему количеству любых символов.
? Один любой символ.
[. ] Один символ входящий в группу.
[. ] Один символ не входящий в группу.
Вхождение подстрок, работает с флагом GLOB_BRACE .
\ Экранирует следующий символ, кроме случаев, когда используется флаг GLOB_NOESCAPE .
GLOB_MARK Добавляет слеш к каждой возвращаемой директории.
GLOB_NOSORT Возвращает файлы в том виде, в котором они содержатся в директории (без сортировки). Если этот флаг не указан, то имена сортируются по алфавиту.
GLOB_NOCHECK Возвращает шаблон поиска, если с его помощью не был найден ни один файл.
GLOB_NOESCAPE Обратные слеши не экранируют метасимволы.
GLOB_BRACE Раскрывает для совпадения с « a », « b » или « c ».
GLOB_ONLYDIR Возвращает только директории, совпадающие с шаблоном.
GLOB_ERR Останавливается при ошибках чтения (например, директории без права чтения), по умолчанию ошибки игнорируются.

Возможно использовать несколько флагов:

$files = glob('/tmp/*.jpg', GLOB_NOSORT|GLOB_ERR);

Далее во всех примерах используется папка tmp со следующим содержимым:

Содержимое папки tmp

Поиск в директории

Список всех файлов и директорий

$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/*') as $file) < $files[] = basename($file); >print_r($files); 

Результат:

Array ( [0] => 1.svg [1] => 2.jpg [2] => 22-f.gif [3] => 22.svg [4] => img.png [5] => path [6] => prod.png [7] => style-1.txt [8] => style-2.css )

Только файлы

$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/*') as $file) < if (is_file($file)) < $files[] = basename($file); >> print_r($files);

Результат:

Array ( [0] => 1.svg [1] => 2.jpg [2] => 22-f.gif [3] => 22.svg [4] => img.png [5] => prod.png [6] => style-1.txt [7] => style-2.css )

Только директории

$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/*') as $file) < if (is_dir($file)) < $files[] = basename($file); >> print_r($files);

Результат:

Поиск по расширению

$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/*.svg') as $file) < $files[] = basename($file); >print_r($files);

Результат:

Поиск по нескольким расширениям

$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/*.', GLOB_BRACE) as $file) < $files[] = basename($file); >print_r($files);

Результат:

Array ( [0] => 2.jpg [1] => img.png [2] => prod.png )

Поиск по имени файла

$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/style*.*') as $file) < $files[] = basename($file); >print_r($files);

Результат:

Array ( [0] => style-1.txt [1] => style-2.css )
$dir = __DIR__ . '/tmp'; $files = array(); foreach(glob($dir . '/1*.*', GLOB_BRACE) as $obj) < $files[] = basename($obj); >print_r($files);

Результат:

Array ( [0] => 1.svg [1] => 2.jpg [2] => 22-f.gif [3] => 22.svg )

Поиск в дереве

Список всех файлов

function glob_tree_files($path, $_base_path = null) < if (is_null($_base_path)) < $_base_path = ''; >else < $_base_path .= basename($path) . '/'; >$out = array(); foreach(glob($path . '/*') as $file) < if (is_dir($file)) < $out = array_merge($out, glob_tree_files($file, $_base_path)); >else < $out[] = $_base_path . basename($file); >> return $out; > $dir = __DIR__ . '/tmp'; $files = glob_tree_files($dir); print_r($files);

Результат:

Array ( [0] => 1.svg [1] => 2.jpg [2] => 22-f.gif [3] => 22.svg [4] => img.png [5] => path/icon-rew.png [6] => path/marker.png [7] => path/psd/1.psd [8] => path/psd/2.psd [9] => path/psd/index.psd [10] => path/sh-1.png [11] => path/title-1.png [12] => prod.png [13] => style-1.txt [14] => style-2.css )

Список всех директорий

function glob_tree_dirs($path, $_base_path = null) < if (is_null($_base_path)) < $_base_path = ''; >else < $_base_path .= basename($path) . '/'; >$out = array(); foreach(glob($path . '/*', GLOB_ONLYDIR) as $file) < if (is_dir($file)) < $out[] = $_base_path . basename($file); $out = array_merge($out, glob_tree_dirs($file, $_base_path)); >> return $out; > $dir = __DIR__ . '/tmp'; $files = glob_tree_dirs($dir); print_r($files);

Результат:

Array ( [0] => path [1] => path/psd )

Поиск по имени/расширению

function glob_tree_search($path, $pattern, $_base_path = null) < if (is_null($_base_path)) < $_base_path = ''; >else < $_base_path .= basename($path) . '/'; >$out = array(); foreach(glob($path . '/' . $pattern, GLOB_BRACE) as $file) < $out[] = $_base_path . basename($file); >foreach(glob($path . '/*', GLOB_ONLYDIR) as $file) < $out = array_merge($out, glob_tree_search($file, $pattern, $_base_path)); >return $out; > $path = __DIR__ . '/tmp'; $files = glob_tree_search($path, '*.'); print_r($files);

Результат:

Array ( [0] => 2.jpg [1] => img.png [2] => prod.png [3] => path/icon-rew.png [4] => path/marker.png [5] => path/sh-1.png [6] => path/title-1.png )

Чтобы в результирующих списках выводились полные пути к файлам, достаточно удалить функцию basename() .

Источник

Простой поиск файлов по названию и расширению на PHP

Привет, друзья! Довелось мне поработать на одном коммерческом сайте. И, как выяснилось, с течением недолгого времени на сайте пропала часть изображений. Удалять их, конечно же, никто не удалял, и предположения были, что папку случайно перенесли в другое место.

Да, бывает и такое. Но суть сейчас не в этом. А в том, как я искал эту папку. Поскольку мне были известны имена некоторых файлов (а это уже хорошая зацепка при поиске), то я решил написать небольшой скрипт для поиска этих файлов по всему сайту. Вдобавок ко всему специально для аудитории сайта я доработал поиск и сделал несколько разных его вариантов.

Два варианта поиска файлов по названию на PHP

В этом блоке я представляю вашему вниманию два разных варианта поиска файлов на вашем хостинге по названию.

1. Точный поиск по названию:

 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()."
"; > > > ?>

2. Неточный поиск (по наличию слова в названии):

 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()."
"; > > > ?>

Во всех вариантах – переменная $name_search содержит в себе слово (слова) для вашего поиска по файлам.

Код вы вставляете в файл PHP с любым именем, после чего грузите его на ваш хостинг.

Обращаетесь к нему на вашем сайте, и на выходе (при положительном результате) вы получите список найденных файлов с полным их местоположением.

Поиск файлов по расширению на PHP

В поисках файлов по расширению, как вы поняли, не учитывается имя, а учитывается его формат. Например, у изображений это может быть PNG, JPG или GIF, а у аудиофайлов – MP3, WAVE и другие.

 getfileName(), strrpos($info->getfileName(), ".") + 1); $name_search = array("mp3", "jpg"); // Список форматов foreach($name_search as $key_name) { if($file_formal == $key_name) { echo $info->getPathname()."
"; > > > ?>

Его вы также вставляете в PHP-файл, грузите на хостинг и обращаетесь для получения результатов поиска.

Обратите внимание, что регистр во всех вариантах имеет значение. И, например, если файл на хостинге имеет расширение MP3, а в переменной для поиска вы указали «mp3» – файлы найдены не будут. Но этот момент можно подправить с помощью функции «mb_strtolower».

Источник

Оцените статью