Get required files: примеры (PHP)
get_required_files: arrayОписание функции get_required_files
Функция get_required_files() в PHP возвращает индексированный массив, содержащий имена всех файлов, которые были включены в скрипт с помощью конструкций require, require_once, include и include_once. Она используется для отладки, анализа зависимостей скрипта или построения простых систем отслеживания включенных ресурсов.
Функция не принимает никаких параметров.
Основное применение get_required_files() связано с получением списка всех подключенных файлов во время выполнения. Это полезно при разработке фреймворков, автозагрузчиков или в ситуациях, когда необходимо убедиться в наличии определенных зависимостей.
Примеры использования get_required_files
Функция возвращает массив с полными путями к файлам.
Пример с подключением нескольких файлов:
<?php
// Файл: config.php
// Файл: functions.php
require_once 'config.php';
include 'functions.php';
$files = get_required_files();
print_r($files);
?>Array
(
[0] => /путь/к/config.php
[1] => /путь/к/functions.php
)<?php
include 'header.php';
$requiredFiles = get_required_files();
if (in_array(__DIR__ . '/header.php', $requiredFiles)) {
echo 'Файл header.php был подключен.';
}
?>Файл header.php был подключен.
Альтернативные функции в PHP
Функция get_included_files() является полным синонимом get_required_files() и возвращает идентичный массив. В документации PHP указано, что эти функции эквивалентны. С точки зрения использования, они взаимозаменяемы.
Функция debug_backtrace() предоставляет более детальную информацию о стеке вызовов, включая файлы и строки, откуда были вызваны включения. Она полезна для глубокой отладки, но не возвращает простой список файлов.
get_required_files() и get_included_files() предпочтительнее для быстрого получения списка подключенных файлов. debug_backtrace() используют при необходимости анализа последовательности вызовов.
Альтернативы в других языках
Get required files в Python
В Python нет прямой аналогии. Для отслеживания импортированных модулей можно использовать словарь sys.modules.
import sys
print(list(sys.modules.keys()))['sys', 'builtins', ...]
В Node.js объект require.cache содержит кэш всех загруженных модулей, ключами которого являются пути к файлам.
console.log(Object.keys(require.cache));['/путь/к/модулю.js', ...]
Get required files в MySQL
В MySQL подобная функциональность отсутствует, так как это СУБД, а не язык общего назначения.
В отличие от PHP, где функция возвращает массив, в Python и JavaScript используются глобальные объекты системы модулей.
Типичные ошибки
Ошибка возникает при попытке передать функции аргументы, так как она не принимает параметров.
<?php
// Неправильно
$files = get_required_files(true);
?>Warning: get_required_files() expects exactly 0 parameters, 1 given
В PHP 8.0.0 функция была удалена. Ее вызов приводит к фатальной ошибке.
<?php
// Код для PHP 8 и выше
$files = get_required_files();
?>Fatal error: Uncaught Error: Call to undefined function get_required_files()
Функция возвращает полные абсолютные пути. Ошибки могут возникнуть при сравнении с относительными путями.
<?php
include 'myfile.php';
$files = get_required_files();
// Это сравнение, скорее всего, не сработает.
if (in_array('myfile.php', $files)) {
echo 'Файл найден.';
}
?>Файл не будет найден, так как в массиве полный путь.
История изменений функции
Функция get_required_files() была объявлена устаревшей (deprecated). Разработчикам рекомендовалось использовать get_included_files().
Функция была полностью удалена из ядра PHP. Любой ее вызов вызывает фатальную ошибку.
Расширенные примеры применения
<?php
require 'vendor/autoload.php';
include 'src/MyClass.php';
$allFiles = get_required_files();
echo '<div class="h4">Всего подключено файлов: ' . count($allFiles) . '</div>';
echo '<ul>';
foreach ($allFiles as $file) {
echo '<li>' . htmlspecialchars($file) . '</li>';
}
echo '</ul>';
?>Всего подключено файлов: 15
- /путь/к/vendor/autoload.php
- /путь/к/vendor/composer/autoload_real.php ...
<?php
// Файл critical.php должен быть подключен строго через require
require 'critical.php';
$required = get_required_files();
$criticalLoaded = false;
foreach ($required as $loadedFile) {
if (strpos($loadedFile, 'critical.php') !== false) {
$criticalLoaded = true;
break;
}
}
if (!$criticalLoaded) {
exit('Критическая ошибка: required файл не загружен.');
}
?>// Скрипт продолжает выполнение, если файл найден.
Функция возвращает каждый файл только один раз, даже если он был подключен несколько раз с использованием include_once или require_once.
<?php
require_once 'config.php';
require_once 'config.php'; // Второй вызов игнорируется
print_r(get_required_files());
?>Array
(
[0] => /путь/к/config.php
)