Get include path: примеры (PHP)
get_include_path: string|falseФункция get_include_path() возвращает текущее значение директивы include_path из конфигурации PHP. Эта директива определяет список директорий, в которых интерпретатор ищет файлы, подключаемые с помощью конструкций include, require, include_once и require_once.
Функция применяется для получения текущего пути поиска включаемых файлов. Это полезно при отладке, при динамическом изменении путей или при необходимости восстановить исходное значение после временных изменений.
Функция get_include_path() не принимает никаких параметров.
echo get_include_path();.:/usr/share/php
$old_path = get_include_path();
set_include_path('/custom/path');
echo 'Новый путь: ' . get_include_path();
// Восстановление
set_include_path($old_path);Новый путь: /custom/path
Устанавливает новое значение для директивы include_path. Принимает строку с путями. Возвращает старое значение.
Возвращают массив имен файлов, которые были включены или требуемы в ходе выполнения скрипта. Это полезно для отслеживания зависимостей.
Позволяют соответственно получить и установить значение любой директивы конфигурации, включая include_path. Более универсальные, но менее специализированные.
get_include_path следует использовать для получения именно пути поиска. get_included_files применяется для получения списка уже загруженных файлов. Для изменения пути часто удобнее set_include_path, чем ini_set.
В Python список sys.path определяет пути поиска для модулей. Это изменяемый список, а не строка.
import sys
print(sys.path)
sys.path.append('/custom/path')['', '/usr/lib/python3.9', ...]
В Node.js module.paths содержит пути, которые модульная система просматривает при загрузке модулей. Значение зависит от расположения файла.
console.log(module.paths);['/home/user/node_modules', '/home/node_modules', '/node_modules']
Системная переменная @@secure_file_priv в MySQL ограничивает директории для операций загрузки и выгрузки файлов (LOAD DATA, SELECT ... INTO OUTFILE). Это аналог по смыслу ограничения путей, но для работы с файлами БД.
Функция возвращает строку, а не массив. Прямая итерация по строке вызовет ошибку.
$path = get_include_path();
foreach($path as $dir) { // Ошибка
echo $dir;
}Warning: Invalid argument supplied for foreach()
Пути в строке разделяются символом, зависящим от ОС (для Windows - точка с запятой, для Unix - двоеточие). Некорректный разбор вручную.
// Неправильно для Windows
$dirs = explode(':', get_include_path());Изменение include_path без сохранения предыдущего значения может нарушить работу других компонентов.
// Плохой подход
set_include_path('/new/path');
// Код, который может полагаться на старые путиФункция get_include_path() появилась в PHP 4.3.0. С тех пор ее поведение существенно не менялось. Начиная с PHP 5.4.7, функция всегда возвращает строку, даже если директива не установлена - в этом случае возвращается пустая строка. В более ранних версиях могло возвращаться значение FALSE.
$pathString = get_include_path();
// PATH_SEPARATOR - константа, определяющая разделитель для ОС
$pathArray = explode(PATH_SEPARATOR, $pathString);
print_r($pathArray);Array
(
[0] => .
[1] => /usr/share/php
[2] => /custom/lib
)function addIncludePathTemporary($newDir) {
$current = get_include_path();
// Проверка, что директории еще нет в пути
if (strpos($current, $newDir) === false) {
set_include_path($current . PATH_SEPARATOR . $newDir);
}
return $current;
}
$old = addIncludePathTemporary('/new/libs');
echo get_include_path();
// Восстановление
set_include_path($old);.:/usr/share/php:/new/libs
function findInIncludePath($filename) {
$paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $dir) {
$fullPath = $dir . DIRECTORY_SEPARATOR . $filename;
if (file_exists($fullPath)) {
return $fullPath;
}
}
return false;
}
$found = findInIncludePath('config.ini');
echo $found ? "Найден: $found" : "Файл не найден";Найден: ./config.ini
$original = get_include_path();
ini_set('include_path', '/var/www/include');
$new = get_include_path();
echo "Было: $original
";
echo "Стало: $new
";
echo "Изменение: " . ($original === $new ? 'Нет' : 'Да');Было: .:/usr/share/php Стало: /var/www/include Изменение: Да