Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не работает $_SERVER['REQUEST_URI']


Автор: proger 15.6.2006, 12:41
Здрасти, на апачи функция $_SERVER['REQUEST_URI'] отрабатывает, а на IIS почемуто не работает, результат на $_SERVER['REQUEST_URI'] на IIS равен пустоте.
Почему?
Спасибо. 

Автор: vasac 15.6.2006, 13:08
Потому что $_SERVER — переменные сервера Apache. А что в IIS, видимо, можно прочитать в доке по IIS. 

ЗЫ. И это не функция м/у прочим. 

Автор: MeFistofeL 15.6.2006, 14:33
Попробуй написать 
Код
$HTTP_SERVER_VARS["REQUEST_URL"]
 может поможет. 

Автор: Mal Hack 15.6.2006, 22:39
MeFistofeL, эта запись устарела, использовать ее не грамотно.

proger, print_r( $_ENV );
Вроде так массив называется. 

Автор: vasac 16.6.2006, 09:05
А еще 
Код

print_r( $GLOBALS );

и сразу видно, какие массивы есть и что содержат 

Автор: MeFistofeL 16.6.2006, 09:33
Ну так вопрос состоял в том, что $_SERVER["REQUEST_URI"] работает в Apache но не фурычет а IIS smile 

Автор: AztEK 16.6.2006, 13:20
А спасает ли функция getenv() от проблем с совместимостью?

Добавлено @ 13:22 
В мануале просто написано
Цитата
string getenv ( string varname )

Returns the value of the environment variable varname , or FALSE on an error.
 

Автор: vasac 16.6.2006, 13:45
Цитата

Ну так вопрос состоял в том, что $_SERVER["REQUEST_URI"] работает в Apache но не фурычет а IIS

Дак вот, распечатать структуру переменных и посмотреть, есть ли там ему адекватная замена. 

Автор: MeFistofeL 16.6.2006, 16:45
Цитата

А что в IIS, видимо, можно прочитать в доке по IIS. 

В доке написанно : 
Цитата

Server variables: $_SERVER
Замечание: Введено в 4.1.0. В более ранних версиях, используйте $HTTP_SERVER_VARS. 

Теперь вопрос : proger какая у тебя версия php сервера ?

Добавлено @ 16:50 
А вот теперь насчёт того, чтобы 
Цитата
посмотреть, есть ли там ему адекватная замена
.
В доке написанно REQUEST_URI :
URI, который был предоставлен для того, чтобы обратиться к этой странице; например, '/index.html'.
Ну на сколько я понял URI страницы на которой мы щас находимся, или URI страницы-родителя с которой мы перешли на данную страницу? 

Автор: -=Ustas=- 16.6.2006, 17:17
Цитата(MeFistofeL @  16.6.2006,  16:45 Найти цитируемый пост)
URI страницы на которой мы щас находимся

 

Автор: [xoodo] 16.6.2006, 17:21
На IIS прекрасно работает $_SERVER['REQUEST_URI']. $_ENV у меня пустой, $GLOBALS -- ансет. $_SERVER -- это переменная сервера вообще, а не Апача.

Добавлено @ 17:22 
Код в студию, где не работает!

Добавлено @ 17:24 
Да, вместе с версией ПХП укажи еще версию IIS. Мало ли... Хотя вряд ли у тебя четвертая или ниже. 

Автор: xolod 16.6.2006, 17:29
Если IIS 5.1 и Windows XP — то вполне. В такой связке $_SERVER['REQUEST_URI'] пусто.

Вариант решения:
Код

if(!isset($_SERVER['REQUEST_URI'])) {
  $arr = explode("/", $_SERVER['PHP_SELF']);
  $_SERVER['REQUEST_URI'] = "/" . $arr[count($arr)-1];
  if ($_SERVER['argv'][0]!="")
   $_SERVER['REQUEST_URI'] .= "?" . $_SERVER['argv'][0];
}

Вставить код в начало, в переменной $_SERVER['REQUEST_URI'] будет то, что хочется.

Автор: MeFistofeL 16.6.2006, 17:37
Ну если URI страницы на которой мы щас находимся то чтобы узнать полный путь мона заюзать
Код

$_SERVER["PATH_TRANSLATED"]

а если нада тока имя то:
Код

$_SERVER["SCRIPT_NAME"]

 

Автор: MeFistofeL 16.6.2006, 17:53
Насчёт $_SERVER["SCRIPT_NAME"]  небольшое уточнение : оно работает также как и $PHP_SELF возвращает относительный путь и имя страницы, а вот $_SERVER["PATH_TRANSLATED"] возвращает полный путь типа 'c:\\inetpub\\wwwroot\\test\\test1.php' smile 

Автор: [xoodo] 16.6.2006, 18:30
Цитата(xolod @ 16.6.2006,  17:29)
Если IIS 5.1 и Windows XP — то вполне. В такой связке $_SERVER['REQUEST_URI'] пусто.

А версия Винды вообще имеет значение? Каким и какого, интересно? Я думал, токмо версия сервера. У меня Win SBS 2000 и вышеупомянутый IIS 5.1, повторюсь -- все ок. 

Автор: xolod 16.6.2006, 22:03
[xoodo], к сожалению имеет. IIS особо тесно интегрирован с API и системными службами самой ОС, чего нельзя сказать о кроссплатформенном Apache. Ладно, не будем засорять раздел не по теме.
В целом решение уже дано, и не только мной. А автор что-то затих.

Автор: proger 18.6.2006, 13:27
У меня верси пхп 5.* 

Автор: proger 19.6.2006, 06:58
Всем большое спасибо, вот отличное ваше решение:
Код

if(!isset($_SERVER['REQUEST_URI'])) {
  $arr = explode("/", $_SERVER['PHP_SELF']);
  $_SERVER['REQUEST_URI'] = "/" . $arr[count($arr)-1];
  if ($_SERVER['argv'][0]!="")
   $_SERVER['REQUEST_URI'] .= "?" . $_SERVER['argv'][0];
}
 

Автор: nextzi0 25.11.2009, 15:51
sorry =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)