Найти в Дзене

get_included_files в PHP

В мире PHP-разработки часто приходится работать со сложной архитектурой, где файлы подключают друг друга (пример см. здесь). В процессе отладки или проверки кода порой сложно понять, какой файл откуда был вызван и какие зависимости были загружены. Функция get_included_files() — это простой, но мощный инструмент ядра PHP, который позволяет заглянуть в «черный ящик» автозагрузки и подключения файлов. Функция get_included_files() возвращает массив, содержащий имена (абсолютные пути) всех файлов, которые были обработаны интерпретатором PHP с помощью инструкций include, include_once, require или require_once на момент ее вызова. Важная особенность: она учитывает только те файлы, которые были подключены в процессе выполнения скрипта. Если файл был подключен с ошибкой (например, include несуществующего файла), он не появится в списке. Также сюда включается сам «главный» исполняемый файл (точка входа). PHP во время выполнения хранит внутренний список дескрипторов открытых и включенных файлов.
Оглавление

В мире PHP-разработки часто приходится работать со сложной архитектурой, где файлы подключают друг друга (пример см. здесь). В процессе отладки или проверки кода порой сложно понять, какой файл откуда был вызван и какие зависимости были загружены.

Функция get_included_files() — это простой, но мощный инструмент ядра PHP, который позволяет заглянуть в «черный ящик» автозагрузки и подключения файлов.

Что делает get_included_files()?

Функция get_included_files() возвращает массив, содержащий имена (абсолютные пути) всех файлов, которые были обработаны интерпретатором PHP с помощью инструкций include, include_once, require или require_once на момент ее вызова.

Важная особенность: она учитывает только те файлы, которые были подключены в процессе выполнения скрипта. Если файл был подключен с ошибкой (например, include несуществующего файла), он не появится в списке. Также сюда включается сам «главный» исполняемый файл (точка входа).

Как это работает под каптом?

PHP во время выполнения хранит внутренний список дескрипторов открытых и включенных файлов. Каждый раз, когда интерпретатор встречает конструкцию подключения файла и успешно его парсит, он добавляет путь к этому файлу во внутренний массив. get_included_files() просто возвращает копию этого массива.

В отличие от функций debug_backtrace() или get_defined_vars(), эта функция не требует больших вычислительных мощностей и может безопасно использоваться не только на этапе отладки, но даже в готовом продукте (хотя обычно её применение там ограничено логированием).

Синтаксис

get_included_files(): array

Функция не принимает параметров и всегда возвращает массив строк.

Простой, но действительно полезный пример

Представьте ситуацию: вы работаете над крупным проектом с использованием композера (Composer) и сложной системой автозагрузки. Вам нужно убедиться, что в процессе выполнения критической задачи (например, создания заказа в интернет-магазине) не подгружаются «левые» файлы, устаревшие классы или лишние конфигурации, которые могут замедлить работу или вызвать конфликты.

Допустим, у нас есть файл config.php, который подключается не всегда, а только при определенном условии. Мы хотим отследить это в логах.

Почему этот пример полезен на практике?

  1. Обнаружение утечек памяти или дублирования кода. Иногда разработчики случайно подключают один и тот же класс через require вместо require_once, но с разными путями (симлинки, абсолютные/относительные пути). get_included_files() покажет реальные пути, помогая выявить дублирование.
  2. Проверка автозагрузки Composer. В сложных проектах можно добавить вызов этой функции в shutdown-функцию, чтобы убедиться, что не подгружаются классы из «запрещенных» пространств имён во время выполнения тяжелых операций.
  3. Отладка «серых зон». Если скрипт ведет себя неожиданно (например, переопределяет функцию или константу), список включенных файлов помогает быстро понять, откуда «приехал» нежелательный код.

Заключение

Функция get_included_files() — это отличный пример «мета-инструмента» в PHP. Она не меняет логику работы программы, но дает разработчику прозрачность. Используя её, вы можете писать более надежные системы, где процесс подключения файлов становится не скрытой магией, а контролируемым и наблюдаемым процессом.

Помните: в готовом продукте лучше не выводить результат этой функции в браузер, но использовать её для сбора статистики в логах — это правильная практика инженера.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.