ale-lit / search-local-files

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Практическое задание на закрепление материала на курсе Skillbox

Что нужно сделать

Реализуйте программу для поиска файла в файловой системе (на диске компьютера). Чтобы не усложнять программу, будем искать только строгие совпадения имён: если ищем файл readme.txt, в результатах не будут отображаться файлы с именами __readme.txt, readme_new.txt, readme.html и так далее. Будем искать все вхождения: если у вас есть файлы с одинаковыми именами в разных папках, нужно вывести их все.

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

  • функция scandir — возвращает содержимое папки (или директории — это синонимы) в виде массива имён файлов и папок;
  • функция is_dir — возвращает true, если переданный путь — папка (директория). Файловая система имеет древовидную структуру — используйте рекурсию для реализации функции поиска.
  1. Задайте переменную $searchRoot, в которой будет содержаться папка (директория), с которой мы начинаем поиск, и $searchName с именем искомого файла.
  2. Задайте пустой массив $searchResult — в нём будут храниться результаты поиска.
  3. Реализуйте рекурсивную функцию поиска файла. Мы ищем все совпадения имени файла, поэтому нужно обойти не только текущую папку, но и все её подпапки. Алгоритм поиска будет выглядеть следующим образом:
    • у нас есть некая начальная папка и рекурсивная функция, которая принимает на вход три параметра: папку, в которой производится поиск;
    • имя файла, который мы хотим найти;
    • массив с результатами поиска (не забываем передать его по ссылке).
      С помощью функции scandir получаем список элементов текущей папки. Если элемент является папкой (директорией), то осуществляем поиск в ней: вызываем функцию поиска, в качестве параметра $searchRoot указываем текущую папку + имя папки, в которой будем искать. Если элемент является файлом — сравниваем с искомым именем файла. Если имя совпадает, сохраняем в массив полный путь к файлу (полный путь к папке — это первый параметр функции и непосредственно имя файла).
  4. Организуйте вызов функции, передав ей в качестве параметров переменные $searchRoot, $searchName и $searchResult.
  5. После вызова функции позаботьтесь о выводе результата. Если массив $searchResult пустой, нужно вывести сообщение, что поиск не дал результатов. Если в массиве есть элементы — вывести их на экран.
  6. В папке с вашей программой создайте подпапку, например test_search, положите в неё пустой файл test.txt, затем в ней же создайте ещё одну папку test_recursion и также положите в неё пустой файл test.txt.
  7. Выполните программу, передав ей в качестве параметра путь к папке test_search и имя файла test.txt. Если вы всё сделали правильно, то выведется путь к обоим файлам.
  8. Добавьте ещё одну подпапку в папку test_search и положите в подпапку файл с именем test.txt. Только на этот раз не пустой — пусть он содержит несколько произвольных строк текста.
  9. Добавьте в программу возможность фильтрации результатов поиска. Пусть нам нужно находить файлы, имеющие ненулевой размер. После вызова функции поиска, но до вывода массива searchResult на экран реализуйте фильтрацию. Используйте array_filter для фильтрации массива $searchResult и встроенную функцию filesize для проверки размера файла.
  10. Если вы всё сделали правильно, то в результате выполнения программа выведет одно имя файла.
  11. Если всё работает правильно, сделайте коммит ваших изменений с помощью Git и отправьте коммит в репозиторий.

About


Languages

Language:PHP 100.0%