Абсолютный (или относительный?) Путь в PHP

Извините, что спросили об этом, так как он может быть отвечен много раз, но мой вопрос немного отличается

У меня есть дерево

/var/www/path/to/my/app/ -- index.php -- b.php -- inc/ -- include.php 

(Я обращаюсь к inc / include.php из index.php,

 include "inc/include.php"; 

)

но в include.php, мне нужно получить абсолютный путь к корню APPLICATION, а не DOCUMENT_ROOT, поэтому в результате мне нужно иметь возможность использовать эту команду

 //inc/include.php include(APP_ROOT."/b.php"); 

повторяю, я НЕ ХОЧУ ПРИЗЫВАТЬ НРАВИТСЯ

 include("../b.php"); 

есть ли нативная функция, если это возможно?

ОБНОВИТЬ:

Я хочу получить PATH от PHP, так как любой открытый источник нуждается в обнаружении этого пути? Если я захочу включить inc / include.php из ajax / 1 / somethiing.php, он будет успешным, но inc / include.php попытается включить ajax / b.php вместо b.php

Для Пекки:

У меня есть это дерево

 -- index.php -- b.php -- inc/ -- include.php -- ajax/ -- 1/ -- ajax.php 

Теперь смотри. Из index.php вы вызовете inc / include.php

 include("inc/include.php"); //included file 

теперь включены поисковые файлы для

 include("../b.php"); 

Он будет работать, но! Если бы я назвал include inc / include.php из ajax / 1 / ajax.php, как это

 include("../../inc/include.php"); 

он будет работать, но включенный файл попытается включить

 ../b.php 

вместо ../../b.php как путь относительно файла, который ВКЛЮЧЕН, что inc / include.php Получил его?

есть ли нативная функция, если это возможно?

нет. Корень документа – это единственное, что вы можете получить от PHP. (Обратите внимание, однако, что в вашем сценарии вы можете просто вызвать include("b.php"); потому что сценарий все еще находится в контексте index.php.)

Повторите свое обновление:

Вы можете определить глобальный корень приложения в центральном файле конфигурации. Скажем, у вас есть config.php в корне вашего приложения. Затем сделайте

 define("APP_ROOT", dirname(__FILE__)); 

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

 include ("../../../config.php"); 

но как только вы это сделаете, вы можете работать с корнем приложения внутри скрипта:

 include (APP_ROOT."/b.php"); <-- Will always return the correct path 

Вы можете разрешить путь с текущим файлом в качестве базы

 include dirname(__FILE__) . DIRECTORY_SEPARATOR . '/../b.php'; 

или с PHP5.3

 include __DIR__ . \DIRECTORY_SEPERATOR . '/../b.php'; 

Просто используйте

 define('APP_ROOT', 'your app root'); 

в index.php, например. Или в файле конфигурации.

Хотя он не определяет корневой путь вашего приложения для вас, может быть интересно проверить set_include_path()

Добавьте к index.php:

 $GLOBALS['YOUR_CODE_ROOT'] = dirname(__FILE__); 

Добавьте в свой inc/include.php :

 require_once $GLOBALS['YOUR_CODE_ROOT'].'/b.php'; 

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

В вашем index.php или файле конфигурации:

 define( 'INC', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR ); 

В другом месте:

 include(INC . 'include.php'); 

Альтернативно, определите несколько констант для разных местоположений:

 define('DOCUMENT_ROOT', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR); define('INC', DOCUMENT_ROOT . 'inc' . DIRECTORY_SEPARATOR); define('AJAX', DOCUMENT_ROOT . 'ajax' . DIRECTORY_SEPARATOR); 

В другом месте:

 include(DOCUMENT_ROOT . 'b.php'); include(INC . 'include.php'); include(AJAX . 'ajax.php');