Intereting Posts
Как встраивать таблицы стилей с Assetic, основанные на значении в сеансе Вызовите некоторый JavaScript, когда пользователь закрывает окно (всплывающее окно) Как создать переменную в PHP сегодняшней даты формата MM / DD / YYYY? Должны ли зависимости автоматически удаляться с диска после установки / обновления с помощью Composer? Опубликовать данные с помощью volley php Передача метода объекта array_map () Как сделать меньше для работы с бассетом в laravel 4? Работает ли кеш-код opcode PHP с __autoload? PHP Preg-Заменить более одного подчеркивания Как проверить возможность загрузки с помощью DropZone.js? Проверка правильного ответа из базы данных с помощью отмеченного переключателя в PHP jQuery AJAX добавление таблицы tr в конце таблицы Работа над удаленным проектом PHP (сервер Ubuntu) через Eclipse, Netbeans или любую другую среду IDE Убедитесь, что UNIQUE-строка уже существует с помощью findBy в ManyToMany, любом обходном решении или рабочем решении? Многомерный ассоциативный массив (PHP)

Как я могу получить «корень приложения» моего URL-адреса от PHP?

Если мой URL-адрес: http://www.server.com/myapp/stuff/to/see а моя структура каталогов на диске – htdocs/myapp/* , как я могу извлечь часть /myapp ? Кроме того, что, если не было папки приложения, а корнем приложения был только «/»? Есть ли предопределенная переменная для получения этого значения?

То, что я хочу, – это функция, которая может обрезать /myapp из URI запроса, так что мне остается только /stuff/to/see . И, если бы я должен был перенести приложение в корень документа сервера, определите его также (чтобы /stuff/to/see просто возвращался как /stuff/to/see )

Моя структура каталогов такова:

 application |-config |-config.inc.php library |-autoload.class.php public |-css |-img index.php 

Итак, из index.php, я хочу знать, как получить то, что я спросил выше.

Related of "Как я могу получить «корень приложения» моего URL-адреса от PHP?"

Для веб-корня существует DOCUMENT_ROOT как указано в нескольких ответах. Для корня приложения нет способа определить, какая папка в вашем приложении является корневой папкой. Вам придется установить это вручную.

Большинство приложений определяют корень приложения, используя dirname(__FILE__); или настройку конфигурации и сохраните это значение в константе, доступной во всем приложении.

Когда вы получаете доступ к странице с помощью http://www.server.com/myapp/stuff/to/see , а корневой каталог вашего веб-сервера находится в /something/htdocs/ , то текущий local путь – /something/htdocs/myapp/stuff/to/see .

В настоящее время нет определенного решения для получения /something/htdocs/myapp/ , потому что нет четкого определения, какой путь вы должны получить. Когда у вас есть какое-то правило для этого, расскажите нам, и мы сможем что-то придумать, но без вычислений, единственные пути, которые вы можете увидеть:

  • http://www.server.com/myapp/stuff/to/see
    $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
  • /something/htdocs/myapp/stuff/to/see/index.php
    $_SERVER['SCRIPT_FILENAME']
  • /something/htdocs/
    $_SERVER['DOCUMENT_ROOT']
  • /myapp/stuff/to/see
    $_SERVER['REQUEST_URI']
  • /myapp/stuff/to/see/index.php
    $_SERVER['SCRIPT_NAME'] и $_SERVER['PHP_SELF']
 <?php define('ABSPATH', dirname(__FILE__)); 

Поместите следующий код в файл, расположенный в корневой папке приложения, и включите его при каждой загрузке страницы.

Тогда вы можете просто всегда делать $path = ABSPATH . '/path/to/file.php'; $path = ABSPATH . '/path/to/file.php'; независимо от того, находится ли ваша локальная копия в folder подкаталога или нет.


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

Обратите внимание, что вам может потребоваться добавить дополнительные вызовы dirname() зависимости от того, где находится этот файл. Добавьте один для каждого каталога, который вы передаете из корня вашего webapp.

Например, если ваш webapp находится в /webapp/ а ваш «global include» находится в /webapp/includes/framework/init.php , тогда вышеуказанный код необходимо изменить как таковой:

 define('ABSPATH', dirname(dirname(dirname(__FILE__)))); 

т.е.: 2 дополнительных вызова dirname() из-за двух дополнительных папок из корня webapp ( includes/framework )


осветление

Вышеприведенный код предназначен для одного файла и одного файла только в вашем веб-приложении. Этот файл должен быть включен для каждой загрузки страницы.

Если у вас уже есть файл, который включен перед любой обработкой (например, файл конфигурации или другой), вы можете скопировать и вставить этот код в этот файл.

Количество вызовов dirname() зависит от того, насколько глубоко вы скопировали и вставляете код, относительно корневого каталога вашего веб-приложения. Для приведенных выше примеров предположим, что корень вашего веб-приложения представлен символом ~ .

Если вы скопируете мой код в ~/abspath.php , вам понадобится один вызов dirname() .

Если вы скопируете мой код в ~/includes/abspath.php , вам понадобятся два вызова dirname() .

Если вы скопируете мой код в ~/includes/config/abspath.php , вам понадобятся три вызова dirname() . Теперь давайте просто скажем, что это его окончательное местоположение.

В ~/index.php вы делаете следующее:

 <?php require_once('includes/config/abspath.php'); 

и у вас есть доступ к ABSPATH .

В ~/dir/someOtherPage.php вы делаете следующее:

 <?php require_once('../includes/config/abspath.php'); 

и у вас есть доступ к ABSPATH .

Вот почему я говорю, что если у вас уже есть файл, который включен в каждую загрузку страницы, его проще просто отбросить в нем вышеуказанный код. Просто убедитесь, что вы соответствующим образом изменяете количество вызовов dirname() . Опять же, этот код предназначен для ТОЛЬКО ОДНОГО ФАЙЛА.


Затем получите URL-путь, это просто вопрос удаления DOCUMENT_ROOT FROM ABSPATH :

 $docRoot = rtrim($_SERVER['DOCUMENT_ROOT'], '/'); define('RELADDR', substr(ABSPATH, strlen($docRoot)); 

$_SERVER['DOCUMENT_ROOT'] предоставит вам путь к htdocs, тогда вы можете перейти оттуда

РЕДАКТИРОВАТЬ

$_SERVER['REQUEST_URI'] всегда даст вам /myapp/stuff/to/see из вашего образца url выше, независимо от расположения файлов на диске или из какого файла он вызывается.

так что это только вопрос explode , array_shift ing и implode ing.

btw, из вашей структуры каталогов, похоже, что вы используете фреймворк. некоторые фреймворки имеют библиотеку URI / URL, которую вы можете найти полезной (по крайней мере, CodeIgniter имеет не 100% уверенность в других фреймворках)

Попробуй это:

  echo dirname(__FILE__); 

где __FILE__ – это имя текущего исполняемого скрипта, а dirname получает папку из папки / приложения из него.

Больше вариантов:

 echo $_SERVER['DOCUMENT_ROOT']; // gives you the root dir 

На PHP.net

У меня возникла аналогичная проблема. В принципе, в PHP, если в файле «A.php» используется относительный путь для ссылки на ресурс, то текущее местоположение пути, используемое в качестве префикса относительного пути, относится к первому родительскому php, под которым включен «A.php».

Это не будет проблемой, если сам A.php является главным родителем или когда A.php находится в той же папке, что и ее главный родитель. Но в противном случае это нарушит импорт.

Лучшее решение, которое я нашел, – сделать ссылку явно абсолютной, используя DIR (который дает текущее местоположение файла), а затем перейдет к указанному из этого места, например, DIR . "/../ help.php", чтобы ссылаться на файл help.php, сидящий на 1 уровень выше A.php.