2015-06-09 3 views
1

Я пытаюсь написать приложение PHP, и сейчас у меня возникают проблемы с методом include_once(). У меня есть структура папок, как это:Php include_once и абсолютные пути

/home/header.php 
/home/index.php 
/home/admin/admin.php 

У меня нет никаких проблем с доступом к header.php из index.php с помощью include_once('/home/header.php'); он отлично работает, но если я пытаюсь вызвать include_once() в admin.php с теми же параметрами, его сбои.

Я хочу использовать абсолютные пути, так что мне не нужно беспокоиться о том, где я называю функцию и все такое. Я делаю что-то неправильно с абсолютными путями? Если да, то каков правильный способ сделать это?

+1

Является ли папка/home/admin доступной для пользователя, выполняющего скрипт php? (Тот же вопрос для администратора.php) – Armage

+0

@Armage Не уверен, что вы имеете в виду. Я бы предположил, что они доступны, поскольку я только что создал папку, как и любую другую папку в eclipse для php. – DidierFuentes

+0

только потому, что вы создали его, это не значит, что он читается для скрипта php. Вы можете использовать is_readable(), чтобы проверить это. – Armage

ответ

0

Возможно, целесообразно использовать PHP magic functionФайл, который обеспечивает полный путь как хорошую практику по разным причинам.

__FILE__

Полный путь и имя файла с симлинками решенных. Если используется внутри include, возвращается имя включенного файла.

Ex:

require_once (dirname(__FILE__) . '/include.inc.php'); 

Ниже описываются различия для;

  • Включить включаемой() оператор включает и оценивает указанный файл.

  • Включить После include_once() оператор включает и оценивает указанный файл во время выполнения сценария. Это поведение похоже на оператор include(), с той лишь разницей, что если код из файла уже включен, он больше не будет включен. Как следует из названия, он будет включен только один раз.

  • Требовать требуют() и включают в себя() идентичны во всех отношениях, кроме как они справляться с неудачами. Они оба генерируют предупреждение, но require() приводит к фатальной ошибке. Другими словами, не стесняйтесь использовать require(), если вы хотите, чтобы отсутствующий файл остановил обработку страницы.

  • Требовать После require_once() оператор включает и оценивает указанный файл во время выполнения сценария. Это поведение похоже на инструкцию require(), с той лишь разницей, что если код из файла уже включен, он больше не будет включен.

reference

Надеется, что это помогает.

+0

также обратите внимание на '$ _SERVER ['DOCUMENT_ROOT'];' – SuperDJ

+0

Ах, да, это другой подход. Хороший момент, я должен получить больше информации о контексте и цели. Cheers – daxeh

+0

Если я использую 'dirname (__ FILE __)' в '/ home/admin/admin.php' в структуре папок, которые у меня выше, я бы получил'/home/admin'. То, что я действительно хочу сделать, это получить доступ к тому, что находится в '/ home' из'/home/admin/admin.php' без использования '../'. – DidierFuentes

Смежные вопросы