Извините, что спросили об этом, так как он может быть отвечен много раз, но мой вопрос немного отличается
У меня есть дерево
/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');