PHP_SELF по сравнению с PATH_INFO по сравнению с SCRIPT_NAME по сравнению с REQUEST_URI

101
задан imlouisrussell 30 December 2011 в 18:39
поделиться

5 ответов

документация PHP может сказать Вам различие:

'PHP_SELF'

имя файла в настоящее время выполняющегося сценария, относительно корня документа. Например, $ _SERVER ['PHP_SELF'] в сценарии в адресе http://example.com/test.php/foo.bar был бы /test.php/foo.bar. __ ФАЙЛ __ постоянный содержит полный путь и имя файла тока (т.е. включенный) файл. Если PHP работает как процессор командной строки, эта переменная содержит название сценария начиная с PHP 4.3.0. Ранее это не было доступно.

'SCRIPT_NAME'

Содержит путь текущего сценария. Это полезно для страниц, которые должны указать себе. __ ФАЙЛ __ постоянный содержит полный путь и имя файла тока (т.е. включенный) файл.

'REQUEST_URI'

URI, который был дан для доступа к этой странице; например, '/index.html' .

PATH_INFO, кажется, не документируется...

50
ответ дан Jeremy Ruten 24 November 2019 в 04:36
поделиться

Некоторые практические примеры различий между этими переменными:
Пример 1. PHP_SELF отличается от SCRIPT_NAME [только 1 116], когда требуемый URL находится в форме:
http://example.com/test.php/foo/bar

[PHP_SELF] => /test.php/foo/bar
[SCRIPT_NAME] => /test.php

(это, кажется, единственный случай, когда PATH_INFO содержит разумную информацию [PATH_INFO] =>/foo/bar), Примечание: это раньше отличалось в некоторых более старых версиях PHP (< = 5.0?).

Пример 2. REQUEST_URI отличается от SCRIPT_NAME, когда непустая строка запроса вводится:
http://example.com/test.php?foo=bar

[SCRIPT_NAME] => /test.php
[REQUEST_URI] => /test.php?foo=bar

Пример 3. REQUEST_URI отличается от SCRIPT_NAME, когда перенаправление серверной стороны в действительности (например, mod_rewrite на апаче):

http://example.com/test.php

[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /test2.php

Пример 4. REQUEST_URI отличается от SCRIPT_NAME при обработке Ошибок HTTP со сценариями.
Используя апачский направляющий ErrorDocument 404 / 404error.php
http://example.com/test.php

[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /404error.php

На сервере IIS с помощью пользовательских ошибочных страниц
http://example.com/test.php

[SCRIPT_NAME] => /404error.php
[REQUEST_URI] => /404error.php?404;http://example.com/test.php
221
ответ дан Nick Franceschina 24 November 2019 в 04:36
поделиться

Можно хотеть изучить Класс URI и использовать $this-> uri-> uri_string ()

Возвраты строка с полным URI.

, Например, если это - Ваш полный URL:

http://example.com/index.php/news/local/345

функция возвратила бы это:

/news/local/345

Или Вы могли использовать сегменты для развертки определенных областей, не имея необходимость придумывать значения parsing/regex

4
ответ дан Adam 24 November 2019 в 04:36
поделиться

Лично я использую $REQUEST_URI, поскольку это ссылается на вводимый URI а не местоположение на диске сервера.

3
ответ дан Gottlieb Notschnabel 24 November 2019 в 04:36
поделиться

Скопируйте секунду, Вы проявили неправильный подход для начала. Почему не просто делают это

RewriteEngine on
RewriteCond $1 !^(images|inc|favicon\.ico|index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php?url=$1 [L]

вместо этого? Затем захватите его с $_GET['url'];

-2
ответ дан Kate Gregory 24 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: