Функция PHP для рекурсивного обхода директории и поиска файлов.
PHP функция для рекурсивного обхода директории и поиска файлов, составление списка URL всех файлов директории.
Задача: Нужно решение на PHP позволяющее сделать полный список URL файлов сайта и записать его в файл TXT.
PHP
<?php /** * Функция для рекурсивного обхода директории и поиска файлов. * * @param string $dir Путь к директории, которую нужно обойти. * @param string $baseUrl Базовый URL вашего сайта. * @param array &$fileList Массив, в который будут записываться URL файлов (передаётся по ссылке). */ function scanDirectory(string $dir, string $baseUrl, array &$fileList): void { // Открываем директорию if ($handle = opendir($dir)) { // Цикл по содержимому директории while (false !== ($entry = readdir($handle))) { // Исключаем текущую и родительскую директории if ($entry != "." && $entry != "..") { $fullPath = $dir . "/" . $entry; // Полный путь к файлу или директории //Если это директория, рекурсивно вызываем эту же функцию для неё if (is_dir($fullPath)) { scanDirectory($fullPath, $baseUrl, $fileList); } else { // Если это файл // Формируем URL файла $url = str_replace($_SERVER['DOCUMENT_ROOT'], $baseUrl, $fullPath); // Заменяем путь от корня сайта на baseUrl $url = str_replace('\\', '/', $url); // Заменяем обратные слэши на прямые (для Windows) // Добавляем URL в список файлов $fileList[] = $url; } } } // Закрываем директорию closedir($handle); } } // ******************* НАСТРОЙКИ ******************* // 1. Укажите путь к корневой директории вашего сайта (обычно DOCUMENT_ROOT) $rootDirectory = $_SERVER['DOCUMENT_ROOT']; // Или укажите явно: '/путь/к/сайту' // 2. Укажите базовый URL вашего сайта (с протоколом, например: https://example.com) $baseURL = 'https://ваш_сайт.ru'; // 3. Укажите имя файла, в который будет записан список URL $outputFile = 'sitemap.txt'; // ******************* ВЫПОЛНЕНИЕ ******************* // Создаём массив для хранения URL файлов $fileUrls = []; // Запускаем сканирование директории scanDirectory($rootDirectory, $baseURL, $fileUrls); // Открываем файл для записи $file = fopen($outputFile, 'w'); // 'w' - открыть для записи (старое содержимое будет удалено) // Проверяем, успешно ли открыт файл if ($file) { // Записываем каждый URL в отдельную строку файла foreach ($fileUrls as $url) { fwrite($file, $url . PHP_EOL); // PHP_EOL - символ новой строки (кроссплатформенный) } // Закрываем файл fclose($file); echo "Список URL записан в файл: " . $outputFile; } else { echo "Ошибка при открытии файла для записи!"; } ?>
Пояснения к коду:
1. scanDirectory($dir, $baseUrl, &$fileList):
- Рекурсивная функция, которая обходит директорию $dir.
- $baseUrl – базовый URL вашего сайта (например, https://example.com).
- &$fileList – массив, в который будут добавляться URL найденных файлов (передаётся по ссылке, чтобы изменения массива сохранялись между вызовами функции).
- Функция использует opendir(), readdir(), is_dir() и is_file() для обхода файловой системы.
- Когда находится файл, его URL формируется путем замены пути от корня сайта (DOCUMENT_ROOT) на baseURL и добавления в массив $fileList.
Настройки:
- $rootDirectory: Укажите корневую директорию вашего сайта. По умолчанию используется $_SERVER['DOCUMENT_ROOT'], но можно указать путь явно.
- $baseURL: Укажите базовый URL своего сайта (включая https:// или http://). Это крайне важно для правильного формирования URL.
- $outputFile: Имя файла, в который будет записан список URL (например, sitemap.txt).
Выполнение:
- Создается пустой массив $fileUrls.
- Вызывается функция scanDirectory() для начала сканирования файловой системы.
- После завершения сканирования функция fopen() открывает файл для записи ('w' - режим перезаписи).
- Если файл открыт успешно, происходит перебор массива $fileUrls и каждый URL записывается в файл в отдельной строке (fwrite()). PHP_EOL используется для добавления символа новой строки (он автоматически адаптируется к операционной системе).
- В конце файл закрывается функцией fclose().
- Если во время открытия файла произошла ошибка, выводится сообщение об ошибке.
Как использовать:
- Сохраните код: Сохраните код в файл с расширением .php (например, sitemap_generator.php).
- Настройте параметры: Измените значения переменных $rootDirectory, $baseURL и $outputFile в соответствии с вашими настройками. Особенно важно правильно настроить $baseURL!
- Запустите скрипт: Загрузите файл sitemap_generator.php на свой веб-сервер и откройте его в браузере (например, https://ваш_сайт.ru/sitemap_generator.php).
- Проверьте файл: После выполнения скрипта в той же директории, где находится sitemap_generator.php, должен появиться файл sitemap.txt (или имя файла, которое вы указали в $outputFile) со списком URL.
Важные замечания:
- Права доступа: Убедитесь, что у веб-сервера есть права на чтение файлов в корневой директории сайта и на запись в директорию, где находится скрипт.
- Большие сайты: Для очень больших сайтов этот скрипт может работать долго и потреблять много памяти. В этом случае рассмотрите возможность использования генераторов карт сайта на стороне сервера (например через консоль), или разбейте задачу на несколько частей.
- Исключения: В текущей версии скрипта нет возможности исключать определенные файлы или директории из сканирования. Это можно реализовать, добавив дополнительные условия в функцию scanDirectory(). Например, с помощью strpos() проверять имя файла или директории и пропускать их.
- htaccess и rewrite: Учитывайте, что данный скрипт не учитывает правила, прописанные в файле .htaccess и может не правильно определять URL для динамического контента.
- Безопасность: Не размещайте этот скрипт в открытом доступе после создания файла sitemap.txt, чтобы предотвратить несанкционированный сбор информации о структуре вашего сайта. Удалите его или ограничьте доступ.
- Этот скрипт предоставляет базовую функциональность для создания карты сайта. Вы можете доработать его, добавив исключения, обработку ошибок, поддержку различных форматов вывода и другие полезные функции.
ТОП 10 случайных публикаций
Сайт разработан студией © WEB-VidST