включая файлы без указания $ _SERVER ['DOCUMENT_ROOT'] - PullRequest
2 голосов
/ 24 апреля 2009

До обновления версии PHP я имел обыкновение включать файлы следующим образом без указания корня документа:

<?php include '/absolute/path/to/files/file1.php'; ?>

Однако теперь я должен включить тот же файл, что и следующий:

<?php include $_SERVER['DOCUMENT_ROOT'].'/absolute/path/to/files/file1.php'; ?>

Какая настройка php.ini могла переопределить прежнее поведение?

Ответы [ 3 ]

5 голосов
/ 24 апреля 2009

Вам нужна директива php.ini include_path

См .: http://us.php.net/manual/en/ini.core.php#ini.include-path

3 голосов
/ 24 апреля 2009

Я всегда использую что-то вроде:

require( dirname( __FILE__ ) . '/../../subdir/somefile.php' );

Он дает вам относительный путь из текущего файла, но преобразуется в абсолютный путь (используя dirname в текущем файле).

3 голосов
/ 24 апреля 2009

Включение абсолютного пути должно работать точно так же прямо через PHP 5.2.9 (не пробовал 5.3, но это не должно измениться). Поскольку вы указываете абсолютный путь, директива include_path не имеет никакого отношения.

Можете ли вы предоставить больше информации? Какая версия PHP, платформа и ошибка, с которой вы получаете ответ, будут отличным началом.

Linux: RHEL 5 PHP: версия PHP 5.2.9 Сообщения об ошибках, которые я получаю: Предупреждение PHP: требуется (/conf/common.php): не удалось открыть поток: нет такого файла или каталога в / var / www / vhosts /DOMAIN/httpdocs/tell-a-friend-fns.php в строке 63 Неустранимая ошибка PHP: require (): сбой при открытии обязательный '/conf/common.php' (include_path = '.: / Usr / share / pear: / usr / lib / php: / tmp ') в /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php в строке 63

Хорошо, похоже, ваше приложение находится в / var / www / vhosts / DOMAIN, и вы ищете /conf/common.php, верно? Я не знаю, находится ли ваш файл на самом деле в / conf / или в / var / www / vhosts / DOMAIN / conf / (я полагаю, последнее, с предоставленной информацией). Если он находится в / conf /, убедитесь, что пользователь вашего веб-сервера может прочитать этот каталог. Если нет, измените ваше включение на /var/www/vhosts/DOMAIN/httpdocs/conf/common.php.

Еще лучше, вы можете сделать include '../conf/common.php, в зависимости от того, где находится common.php относительно вашего основного скрипта для запрашиваемой страницы.

Помните, что любой путь, заданный начальным символом "/", является абсолютным по отношению к файловой системе, а не к корню документа веб-сервера. Предполагается, что любой путь, заданный без «/», является относительным путем относительно исполняемого скрипта (а не текущего файла). Я предполагаю, что добавление $ _SERVER ['DOCUMENT_ROOT'] к вашему пути изменяет абсолютный путь на относительный путь. Я понятия не имею, почему абсолютный путь будет действовать как предварительное обновление относительного пути, если только вы не работали в защищенной среде (обычно с виртуальными хостами), которая была удалена во время обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...