php не работает с относительным путем — проблема с DocumentRoot? МАМП?

Должно быть что-то, что я упускаю из виду, но я не могу заставить свои включения работать должным образом, используя относительные пути. В MAMP DocumentRoot настраивается в httpd.conf следующим образом:

# MAMP DOCUMENT_ROOT !! Don't remove this line !!
DocumentRoot "/Applications/MAMP/projects/journalproject”

Я открываю сайт по адресу http://localhost:8888/, и включение работает нормально, если я использую такой путь :

<?php include('nav.php'); ?>

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

<?php include('/includes/nav.php'); ?>

Это путь к включаемому файлу: /journalproject/includes/nav.php

Я звоню отсюда: /journalproject/journals/index.php

Я также могу заставить работать включение, если использую такой путь:

<?php include('../includes/nav.php'); ?>

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

<a href="/includes/nav.php">Find nav include</a>

Я не уверен, куда идти отсюда. Любая помощь будет принята с благодарностью.


person Russ M    schedule 10.05.2015    source источник
comment
‹?php include('includes/nav.php'); ?› относительно корня вашего документа (откуда, предположительно, запускается ваш скрипт или установлен ваш путь включения).   -  person fbas    schedule 11.05.2015
comment
Спасибо за вашу помощь. Я попробовал ‹?php include('includes/nav.php'); ?› безуспешно, даже для файла, находящегося в корневой папке. Я думаю, что это было мое неправильное понимание того, что корень документа для Apache также будет диктовать пути для PHP. Вместо этого я попробовал это, и это работает: ‹?php include($_SERVER['DOCUMENT_ROOT'].'/includes/include-nav.php'); и если я повторяю переменную, она дает мне /Applications/MAMP/projects/journalproject. Я надеялся на более аккуратный подход. Думаю, я буду продолжать использовать ‹?php include('../includes/nav.php'); ?›   -  person Russ M    schedule 12.05.2015
comment
рад, что вы добились некоторого успеха. Вы также можете указать INCLUDE PATH в PHP, и эти пути будут найдены для ваших включений/требований. Таким образом, вы можете указать файлы относительно пути включения, не зная, где находится ваш конкретный файл .php, который вызывает include/require: php.net/manual/en/function.set-include-path.php т. е. set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'])   -  person fbas    schedule 12.05.2015


Ответы (2)


Я считаю, что приведенное ниже не работает, потому что оно рассматривается как абсолютный путь, поскольку он начинается с «/», который указывает PHP искать из буквального каталога «/» в операционных системах Unix: <?php include('/includes/nav.php'); ?>

Попробуйте: <?php include('includes/nav.php'); ?>

person Sam Nicholson    schedule 10.05.2015

вы можете указать файлы относительно пути включения, не зная, где находится ваш конкретный файл .php, который вызывает include/require:

http://php.net/manual/en/function.set-include-path.php

set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'])

person fbas    schedule 12.05.2015