В чем разница между $ _SERVER[‘PATH_INFO’] и $_SERVER[‘ORIG_PATH_INFO’]?

#php #apache

#php #apache

Вопрос:

В чем разница между $_SERVER['PATH_INFO'] и $_SERVER['ORIG_PATH_INFO'] ? Как мне их использовать?

Когда я запускаю print_r($_SERVER) , PATH_INFO и ORIG_PATH_INFO отсутствуют в массиве. Почему бы и нет? Как я могу их включить?

Я прочитал руководство по PHP по ним, но все еще не понимаю их.

Ответ №1:

PATH_INFO Переменная присутствует, только если вы вызываете PHP-скрипт, подобный этому:

 http://www.example.com/phpinfo.php/HELLO_THERE
  

Это всего лишь /HELLO_THERE часть после .php скрипта. Если вы не вызываете URL таким образом, не будет $_SERVER["PATH_INFO"] переменной окружения.

PORIG_ Префикс несколько необычен. PATH_INFO является стандартной переменной окружения CGI и никогда не должна иметь префикса. Где ты это прочитал? (Были некоторые проблемы с PHP3 / PHP4, если вы вызывали интерпретатор PHP через c&i-bin/ — но вряд ли у кого-нибудь сегодня есть такие настройки.)

Для справки: http://www.ietf.or&/rfc/rfc3875

Комментарии:

1. Я думаю, так и должно быть ORIG_PATH_INFO . Кажется, некоторые конфигурации сервера создают это вместо PATH_INFO .

2. Тогда это, безусловно, настройка обработчика CGI. В некоторых настройках PHP будет использовать PATH_INFO вместо SCRIPT_FILENAME, поэтому сервер, вероятно, настроен на использование альтернативного имени для path_info.

3. php.net/manual/en/reserved.variables.server.php : ORIG_PATH_INFO : &&t; Исходная версия ‘PATH_INFO’ до обработки PHP.

Ответ №2:

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

 $path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : '');
  

Ответ №3:

PATH_INFO и ORIG_PATH_INFO используются редко. Они ссылаются на что-либо в пути запроса (часть URL из первого / on), которая идет после имени файла и строки запроса. Как правило, у вас не будет PATH_INFO в URL.

Я предполагаю, что вы имеете в виду ORIG_PATH_INFO, а не PORIG_PATH_INFO. Информацией о пути могут управлять такие вещи, как mod_rewrite и сами PHP-скрипты. ORIG_PATH_INFO — это PATH_INFO в том виде, в каком он был в исходном запросе, до того, как со строкой были выполнены какие-либо перезаписи или другие манипуляции.

Комментарии:

1. PATH_INFO используется как в Symfony, так и в ZF, поэтому я бы не назвал его «редко используемым»

2. Просто чтобы добавить к этому, что мне нужно было использовать, PATH_INFO и меня немного ввело в заблуждение то, PATH_INFO что, по-видимому, они используются не так часто. На основе WordPress, использующего это внутренне: &ithub.com/WordPress/WordPress/blob/4.4.4/wp-includes /… . Справедливо будет сказать, что он используется очень часто , так что используйте его, если вам нужно!

3. «… это следует после имени файла и строки запроса». — Обратите внимание, что PATH_INFO находится перед строкой запроса, а не после нее.

4. ORIG_PATH_INFO также используется в A&avi (A&aviWebRequest.class.php ).

Ответ №4:

До версии 5.2.4 PATH_INFO , по-видимому, был сломан (не установлен) в конфигурации по умолчанию. Возможно, это все.

https://bu&s.php.net/bu&.php?id=31892

В руководстве по PHP говорится, что ORIG_PATH_INFO это:

Оригинальная версия ‘PATH_INFO’ до обработки PHP.

Ссылка:
http://php.net/manual/en/reserved.variables.server.php