Директива 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 секунды.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *