Как получить корневой каталог проекта в php с удобным URL-адресом

Я создал initialize.php для определения корневого каталога моего проекта.

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);
defined('SITE_ROOT') ? null : define('SITE_ROOT', DS.'works'.DS.'myproject');

Я включаю его с чем-то вроде этого из любого каталога.

require_once("../includes/initialize.php");

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

Оно работает. Но когда я использую удобный для пользователя URL-адрес и вызываю из него файлы ajax, я не знаю, что моя иерархия каталогов включает initialize.php.

Я не хочу делать это:

require_once("/works/myproject/includes/initialize.php");

для каждого файла. Потому что это будет меняться, когда я загружаю каждый раз.

Я не хочу использовать сеанс или файл cookie для каждого пользователя.

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


Я починил это.

когда я вызываю это с помощью ajax, все в порядке. Но я включил его и как php для некоторых условий.

Из-за того, что текущие файлы и файлы ajax находятся в разных папках, произошел сбой.

Итак, когда я меняю его, чтобы при вызове с помощью ajax требовалось только initialize.php, проблема решалась.


person potan    schedule 05.09.2012    source источник
comment
Пожалуйста, опубликуйте свое исправление как ответ, а затем отметьте его как отвеченный, чтобы другие могли видеть, что этот вопрос был завершен. Затем удалите [исправлено] из названия вопроса.   -  person Spontifixus    schedule 29.09.2012


Ответы (3)


Если вы используете Apache, вы можете попробовать добавить свой каталог include в директиву include_path.

Найдите текущее значение, выполнив phpinfo() и найдите include_path, а затем попробуйте повторно объявить его в своем веб-каталоге верхнего уровня и добавить абсолютный путь в ваш каталог include.

Итак, если значение по умолчанию:

include_path = ".:/usr/bin/php:/some/other/directory"

просто скопируйте и вставьте то же самое в свой файл .htaccess, но добавьте свой каталог include в конце, разделив его двоеточием.

include_path = ".:/usr/bin/php:/some/other/directory:/works/myproject/includes"

и таким образом вам не нужно каждый раз ссылаться на абсолютный путь.

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

На этой странице перечислены несколько различных способов: Пять способов создания пути включения для PHP

person nageeb    schedule 05.09.2012

Просто сделайте это:

require_once("../includes/initialize.php");

достаточно, потому что PHP не просматривает ваши дружественные URL-адреса. Он включает в себя все, что вы ему даете для включения в ваш сценарий.

Также есть $_SERVER['DOCUMENT_ROOT'], который даст вам абсолютный путь от вашего корневого каталога.

person Mihai Iorga    schedule 05.09.2012

Это хороший способ определить все ваши каталоги в общем файле, когда вы добавили initialize.php. Вам нужно будет включить этот общий файл в каждый файл проекта. Удобные для пользователя URL-адреса не влияют на включение файла.

person Tariq Aziz    schedule 05.09.2012