Get include path: примеры (PHP)

Использование get_include_path: руководство с примерами
Раздел: Конфигурация PHP
get_include_path: string|false
Описание функции get_include_path

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

Когда используется

Функция применяется для получения текущего пути поиска включаемых файлов. Это полезно при отладке, при динамическом изменении путей или при необходимости восстановить исходное значение после временных изменений.

Аргументы функции

Функция get_include_path() не принимает никаких параметров.

Примеры использования get_include_path
Получение текущего пути включения
echo get_include_path();
.:/usr/share/php
Использование с set_include_path
$old_path = get_include_path();
set_include_path('/custom/path');
echo 'Новый путь: ' . get_include_path();
// Восстановление
set_include_path($old_path);
Новый путь: /custom/path
Похожие функции в PHP
set_include_path

Устанавливает новое значение для директивы include_path. Принимает строку с путями. Возвращает старое значение.

get_included_files и get_required_files

Возвращают массив имен файлов, которые были включены или требуемы в ходе выполнения скрипта. Это полезно для отслеживания зависимостей.

ini_get и ini_set

Позволяют соответственно получить и установить значение любой директивы конфигурации, включая include_path. Более универсальные, но менее специализированные.

Что предпочтительнее

get_include_path следует использовать для получения именно пути поиска. get_included_files применяется для получения списка уже загруженных файлов. Для изменения пути часто удобнее set_include_path, чем ini_set.

Аналоги в других языках
Python: sys.path

В Python список sys.path определяет пути поиска для модулей. Это изменяемый список, а не строка.

import sys
print(sys.path)
sys.path.append('/custom/path')
['', '/usr/lib/python3.9', ...]
JavaScript (Node.js): module.paths

В Node.js module.paths содержит пути, которые модульная система просматривает при загрузке модулей. Значение зависит от расположения файла.

console.log(module.paths);
['/home/user/node_modules', '/home/node_modules', '/node_modules']
MySQL: secure_file_priv

Системная переменная @@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');
// Код, который может полагаться на старые пути
Изменения в версиях PHP

Функция get_include_path() появилась в PHP 4.3.0. С тех пор ее поведение существенно не менялось. Начиная с PHP 5.4.7, функция всегда возвращает строку, даже если директива не установлена - в этом случае возвращается пустая строка. В более ранних версиях могло возвращаться значение FALSE.

Расширенные примеры
Разбор пути на массив директорий
Пример php
$pathString = get_include_path();
// PATH_SEPARATOR - константа, определяющая разделитель для ОС
$pathArray = explode(PATH_SEPARATOR, $pathString);
print_r($pathArray);
Array
(
    [0] => .
    [1] => /usr/share/php
    [2] => /custom/lib
)
Временное добавление директории в путь
Пример php
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
Проверка доступности файла в include_path
Пример php
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
Сравнение путей до и после изменения
Пример php
$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
Изменение: Да

PHP get_include_path function comments

En
Get include path Gets the current include_path configuration option