Скрипт сканирования структуры файлов и папок сайта

Аватара пользователя
demonx
Администратор
Сообщения: 586
Зарегистрирован: 27 май 2022, 21:33
Откуда: Ірпінь
Контактная информация:

Скрипт сканирования структуры файлов и папок сайта

Сообщение demonx »

Опис скрипту `start.php`

Назва скрипту: Сканер структури файлів сайту (File Structure Scanner).
Мова програмування: PHP (версія 7.4 або вище).
Призначення: Цей скрипт призначений для автоматичного сканування та візуалізації ієрархічної структури файлів і папок на веб-сервері, де розміщено сайт. Він дозволяє швидко отримати текстове представлення файлової системи сайту без необхідності використовувати зовнішні інструменти чи архіви. Скрипт особливо корисний для розробників, адміністраторів сайтів або для аудиту структури проекту (наприклад, для перевірки наявності файлів, виявлення зайвих папок або планування рефакторингу).

Основні можливості
1. **Автоматичне сканування кореневої директорії**:
- Сканує всю файлову систему сайту, починаючи з кореневої папки, де розташовано файл `start.php` (використовується `__DIR__` для визначення шляху).
- Рекурсивно обробляє всі підпапки, включаючи вкладені рівні (немає обмежень на глибину).

2. Вивід структури в текстовому форматі:
- Генерує дерево-подібну структуру з відступами та символами (`|--` для елементів), що робить її легкочитабельною.
- Приклад виведення:

Код: Выделить всё

     ```
     |-- index.php
     |-- admin
     |   |-- dashboard.php
     |   |-- schedules
     |       |-- archive_schedule_group_20250330134236.json
     ```
- Результат зберігається у тимчасовому файлі `structure.txt` і відображається безпосередньо на веб-сторінці в блоці `<pre>` для збереження форматування.

3. **Ігнорування непотрібних елементів**:
- Автоматично виключає системні елементи, такі як `.`, `..`, `.git`, `.DS_Store` та сам файл `structure.txt`, щоб уникнути "шуму" у виводі.
- Можна легко розширити список ігнорованих елементів у коді (змінна `$ignore`).

4. **Обробка помилок**:
- Якщо немає доступу до певної папки чи файлу (наприклад, через права доступу), скрипт записує повідомлення про помилку в структуру (наприклад, `[Помилка: Permission denied]`).
- Використовує `try-catch` для стабільності.

5. **Веб-інтерфейс**:
- Проста HTML-форма з кнопкою "Сканувати", яка запускає процес через POST-запит.
- Стилізований вивід з CSS (рамка, прокрутка для довгих структур).
- Не вимагає додаткових залежностей — працює на стандартному PHP-сервері (Apache/Nginx з PHP-FPM).

6. **Безпека та оптимізація**:
- Сканування обмежене кореневою директорією сайту, щоб уникнути доступу до системних файлів сервера (наприклад, `/etc`).
- Не виконує небезпечні операції (наприклад, не змінює файли, не виконує код).
- Можна додати видалення тимчасового файлу `structure.txt` після виведення для очищення.

Функції скрипта
Скрипт складається з основного блоку та двох ключових функцій. Ось розбір:

1. **Головна логіка (основний PHP-блок)**:
- Обробляє POST-запит від форми (перевірка `isset($_POST['scan'])`).
- Визначає кореневу директорію (`$root_dir = __DIR__`).
- Очищає/створює файл `structure.txt`.
- Викликає функцію `scanDirectory` для сканування.
- Відображає результат на сторінці з HTML (`<pre>` для форматування).

2. **Функція `scanDirectory($path, $indent, $output_file)`**:
- **Параметри**:
- `$path`: Шлях до поточної директорії для сканування.
- `$indent`: Рівень відступу (для візуальної ієрархії).
- `$output_file`: Шлях до файлу для запису структури.
- **Логіка**:
- Використовує `scandir($path)` для отримання списку елементів.
- Фільтрує елементи через `array_diff` (ігнорує непотрібне).
- Для кожного елемента:
- Додає префікс з відступами (`str_repeat(" ", $indent) . "|-- "`).
- Записує елемент у файл через `file_put_contents` з флагом `FILE_APPEND`.
- Якщо елемент — папка (`is_dir`), рекурсивно викликає себе з підвищеним `$indent`.
- **Обробка помилок**: Ловить винятки та записує їх у структуру.

3. **Додаткова функція (опціональна, для розширення)**:
- У попередніх версіях була `removeDirectory` для видалення тимчасових папок, але в поточній версії вона не використовується (можна додати для очищення).

Встановлення та використання
1. **Встановлення**:
- Завантажте `start.php` у корінь сайту (наприклад, `/var/www/html/`).
- Перевірте права: Директорія повинна бути доступною для читання (для `scandir`), а корінь — для запису в `structure.txt` (наприклад, `chmod 644 structure.txt`).
- Не потрібні додаткові модулі PHP (лише базові функції як `scandir`, `file_put_contents`).

2. **Використання**:
- Відкрийте в браузері: `https://your-site.com/start.php`.
- Натисніть "Сканувати".
- Отримайте структуру на сторінці (або в файлі `structure.txt` для подальшого використання).

#### Обмеження та розширення
- **Обмеження**:
- Не сканує віддалені сайти (тільки локальну файлову систему сервера).
- Може бути повільним для дуже великих сайтів (тисячі файлів) — додайте обмеження глибини, якщо потрібно.
- Не фільтрує за типами файлів за замовчуванням (але легко додати в `scanDirectory`).

- **Можливі розширення**:
- Фільтрація за розширеннями (наприклад, тільки `.php` файли).
- Вивід у JSON/XML для інтеграції з іншими інструментами.
- Експорт як файл для завантаження (`header('Content-Type: text/plain'); readfile('structure.txt');`).
- Автоматичне ігнорування певних папок (наприклад, `vendor` або `node_modules`).

Цей скрипт — простий, але потужний інструмент для роботи з файловою структурою сайту.
У вас нет необходимых прав для просмотра вложений в этом сообщении.