ProfiPHPProfiPHP
Категория: Директивы PHP

Директива Include_path

Директива Include_path указывает список директорий, в которых выполняется поиск файлов функциями Include, Fopen, File, Readfile и File_get_contents.
include_path string
Формат соответствует формату системной переменной окружения PATH: список директорий, разделенных двоеточием в Unix или точкой с запятой в Windows.
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
Использование "." в Include_path позволяет задавать относительные пути для подключения файлов, так как точка означает текущую директорию.

При поиске файлов, которые подключаются, PHP отдельно рассматривает каждое значение в Include_path. Он проверяет первый путь, если файл в нем не найден, то он переходит к следующему, и так до тех пор, пока не найдет нужный файл, или вернет предупреждение или ошибку.
Warning: include(file.php): failed to open stream: No such file or directory in ... on line ... Warning: include(): Failed opening 'file.php' for inclusion (include_path='.:/php/includes') in ...
Вы можете изменить ваш Include_path во время выполнения скрипта с помощью функции Set_include_path.
Директива Include_path относиться к режиму PHP_INI_ALL, поэтому значение может быть установлено отовсюду.

Пример использования в php.ini:
include_path = "."
Рекомендуется ставить значения ".", которое позволяет выполнять поиск только в текущей директории.

Приведем еще пример:
include_path = "/var/www/mysite/data/www/mysite/incl"
Если в выполняемом скрипте реализовать подключения несуществующего файла file_does_not_exist.php в директории, указанной в параметре функции Include, и если данный файл будет существовать в директории "/var/www/mysite/data/www/mysite/incl", указанной в качестве параметра директивы Include_path, тогда он успешно выполниться:
include( 'file_does_not_exist.php' );
Если торкнуться оптимизации работы сервера, то директива Include_path очень негативно влияет на скорость работы PHP (файловые операции, например, Include).

Протестуем на скорость данную директиву. Для этого выполним данный код для разных значений директивы Include_path:
$btime = microtime( true );
for ( $i = 1; $i < 100000; $i++ ) {
@include( 'file'.$i.'.php' );
}
echo '('.round( microtime( true ) - $btime, 4 ).' сек.)';
Для значения:
include_path = "/var/www/mysite.com/incl1:/var/www/mysite.com/incl2"
Время выполнения равно 1.7374 секунды.

Для значения:
include_path = "."
Результат 1.4053 секунды.

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

Если путь в выражениях подключения файла указан, причем не важно, абсолютный или относительно текущей директории, директива Include_path будет проигнорирована в любом случае. Поэтому если переписать выше описанный пример на:
@include( $_SERVER['DOCUMENT_ROOT'].'/file'.$i.'.php' );
Скрипт выполниться за 1.2186 секунды.

Добавить комментарий

Имя:
Текст комментария: