Функция 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

