如何从Nginx传递自定义参数到PHP?

我将Nginx 1.2.4PHP-FPM 5.4.8结合使用,并使用fastcgi pass来尝试将自定义parameter passing给PHP 。 以下是我迄今为止发现的选项:

  • 使用env指令在nginx设置一个环境variables,并从PHP获取getenv()$_ENV 。 问题是env只在main上下文中运行,而我需要在server上下文中设置参数。

  • 使用fastcgi_param指令为它devise的。

我试过用fastcgi_param改变一些参数的值,但是不成功:

nginx的:

 fastcgi_param PATH_INFO "/var/tmp"; 

PHP:

我检查了所有可以find的预定义数组:

 echo '<pre>'; echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS); echo "\n".'$_SERVER'."\n"; var_dump($_SERVER); echo "\n".'$_GET'."\n"; var_dump($_GET); echo "\n".'$_POST'."\n"; var_dump($_POST); echo "\n".'$_FILES'."\n"; var_dump($_FILES); echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST); echo "\n".'$_SESSION'."\n"; var_dump($_SESSION); echo "\n".'$_ENV'."\n"; var_dump($_ENV); echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE); echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg); echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA); echo "\n".'$http_response_header'."\n"; var_dump($http_response_header); echo "\n".'$argc'."\n"; var_dump($argc); echo "\n".'$argv'."\n"; var_dump($argv); echo '</pre>'; 

唯一显示PATH_INFO$_SERVER

 var_dump($_SERVER); // ["PATH_INFO"]=> string(0) "" 

但是我在nginx设置的值没有考虑到。

Q1:我需要configuration任何在nginx/php级别的fastcgi_param指令才能生效吗?

问题2: fastcgi_param指令是否被限制在一个预定义的参数列表中(例如,我可以设置PATH_INFO但不是我自己的自定义variables,比如FOO )?

问题3:如果是的Q2:有没有办法将自定义parameter passing给Nginx的PHP?

您可以通过fastcgi_param指令传递附加参数。 我敢肯定,因为我使用了这种funcionality。

我的示例nginxconfiguration

 server { server_name localhost; include conf/defaults.conf; root /var/www; location ~* "\.php$" { fastcgi_param CRS "crs"; include conf/fastcgi-php.conf; } } 

和phpinfo()输出的一部分:

 ... _SERVER["USER"] fcgi _SERVER["HOME"] /dev/null _SERVER["FCGI_ROLE"] RESPONDER _SERVER["REMOTE_USER"] no value _SERVER["CRS"] crs _SERVER["QUERY_STRING"] no value