Поиск на сервере PHP


Давайте напишем пару функций на PHP, с помощью которых можно найти все файлы, которые содержат необходимый текст. Как ни странно, но готовых таких я не нашел (может, правда, плохо искал) и поэтому пришлось писать свою.

Для начала напишем функцию, которая ищет на странице вхождения подстроки

function searchFiles($filepath, $search, $html = true) {
    $str = file_get_contents($filepath);
	if ($html){
		$str = strip_tags($str);
	}
    $count = substr_count($str, $search);
	return $count ? true : false;
}
На вход функция получает путь к файлу, строку для поиска и необязательный параметр html. Он установлен в значение true – это значит, что из получаемого файла убираются все html теги. Если же вам нужен поиск и по ним, то просто вызовите функцию с параметром false. Так, а где её вызвать?

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

function listFolderFiles($dir){
    foreach (new DirectoryIterator($dir) as $fileInfo) {
        if (!$fileInfo->isDot()) {     
			if  (!$fileInfo->isDir()){
				$ext = $fileInfo->getExtension();
				if (($ext=="php") || ($ext=="html") || ($ext=="js") || ($ext==".htaccess")) { 
					$path =  $fileInfo->getPathname();					
					if (searchFiles($path, "body")) {
						echo $path."
"; } } } if ($fileInfo->isDir()) { listFolderFiles($fileInfo->getPathname()); } } } }
Несмотря на множество условий в теле, функция довольно простая. Перебираем все файлы и папки. Если доходим до папки, то снова вызываем саму себя. Если файл, то смотрим его расширение и если оно совпадает с нужными (в данном случае php, html, js, htaccess), то ищем уже подстроку в файле и выводим полный путь. Вызвать можно например так:

listFolderFiles($_SERVER['DOCUMENT_ROOT']);
В итоге мы получим список файлов на сервере, которые содержат слово «body» в тексте, но причем это слово не является тегом.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, php, поиск




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 11. Задачи продолжения C#
Таблицы поиска для повышения эффективности программирования
Извлечение иконки из файла на C#