Назад | Перейти на главную страницу

Почему массив PHP $ _REQUEST пуст?

Я установил nginx на Ubuntu Hardy и сразу понял, что скрипты PHP получают пустые массивы запросов, т.е. независимо от того, не поступало ли GET или POST, даже массив $ _REQUEST был пуст.

Когда я снова переключился на Apache, все было хорошо.

Версия установки nginx - 0.6.35-0ubuntu1.1 ~ hardy1, а PHP - PHP версии 5.2.4-2ubuntu5.10.

Что могло быть не так?

Это особенность try_files command в nginx что query_string не передается автоматически в перезаписанный файл, а должен передаваться явно. Из-за этого _$SERVER['QUERY_STRING'] всегда пусто, поэтому переменные $_REQUEST и $_GET тоже не ставятся.

Из Документация Nginx:

В отличие от rewrite, $ args не сохраняется автоматически, если резервное копирование не является именованным расположением. Если вам нужно сохранить аргументы, вы должны сделать это явно:

try_files $uri $uri/ /index.php?q=$uri&$args;

или просто аргументами

try_files $uri $uri/ /index.php?$args;

Если вы хотите гарантировать получение исходных аргументов, используйте $query_string который совпадает с $args Кроме этого $query_string только для чтения.

Проверьте, установлен ли это в вашем разделе "location" для вашего модуля fastcgi.

 fastcgi_param  QUERY_STRING     $query_string;

http://wiki.nginx.org/NginxHttpFcgiModule

Попробуйте проверить variable_order в конфигурационном файле php, используемом nginx.