Поиск по файлам на PHP [закрыт]

91
07 апреля 2021, 04:40
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 1 год назад.

Улучшить вопрос

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

$dir="files";    
    function searchFiles($dir, $search) {
      $files = glob($dir."/*.html"); // Получаем все html-файлы из директории
      $results = array(); // Создаём массив для результатов поиска
      for ($i = 0; $i < count($files); $i++) {
        /* Перебираем все полученные файлы */
        $str = strip_tags(file_get_contents($files[$i])); // Помещаем содержимое файлов в переменную, предварительно убрав все html-теги
        $count = substr_count($str, $search); // Ищем количество вхождений искомой строки в файл
        if ($count) $results[$files[$i]] = $count; // Если хотя бы 1 вхождение найдено, то добавляем файл с количеством вхождений в массив результатов
      }
      return $results; // Возвращаем результат
    }
    $results = searchFiles(".", "ABC"); // Ищем файлы в текущей директории, в которых входит строка "ABC"
    print_r($results); // Выводим массив (если не знаете, как по-другому вывести массив, то Вам сюда)
     ////////////////////////////////
     $catalog = opendir($dir);
     while ($filename = readdir($catalog )) // перебираем наш каталог 
     {  
     $filename = $dir."/".$filename;  
     include_once($filename); // один раз подрубаем, чтоб не повторяться 
     }
     closedir($catalog);

Как объединить эти 2 фрагменты кода в 1, чтобы найденные файлы подключались к основному файлу? То есть нужно передать найденное имя файла в функцию подключения файлов.

Answer 1

Как-то так будет выглядеть метод поиска:

function searchFiles($filepath, $search) {
        $str = strip_tags(file_get_contents($filepath)); // Помещаем содержимое файлов в переменную, предварительно убрав все html-теги
        $count = substr_count($str, $search); // Ищем количество вхождений искомой строки в файл
        return $count ? true : false;
    }

А так обработка файлов:

$dir="files";
$catalog = opendir($dir);
while ($filename = readdir($catalog )) {  
     $filename = $dir."/".$filename;
     if (searchFiles($filename) === true) {
        require_once $filename; // один раз подрубаем, чтоб не повторяться
     } 
}
closedir($catalog);

Протестируй данный вариант.

READ ALSO
Почему комментарии не отображаются на конкретной странице, а на всех?

Почему комментарии не отображаются на конкретной странице, а на всех?

Комментарии на сайте отображаются благодаря следующему коду:

111
export import laravel

export import laravel

Не могу импортировать файл взятый с экспорта csvПроблема в кодировке

78
Как правильно сделать foreach?

Как правильно сделать foreach?

Сразу извиняюсь если вопрос глупый, возможно я не так гуглил

103
Обход последнего прохода цикла php

Обход последнего прохода цикла php

Вот примерная схема цикла:

120