我正在Nginx 1.2.4
结合使用PHP-FPM 5.4.8
并fastcgi
尝试将自定义参数传递给PHP
. 以下是我目前找到的选项:
使用
env
指令在中设置环境变量并使用或从中nginx
获取它。问题是它只在上下文中运行,而我需要在上下文中设置参数。getenv()
$_ENV
PHP
env
main
server
使用
fastcgi_param
专为此设计的指令。
我尝试使用以下方法更改某些参数的值fastcgi_param
但未成功:
nginx:
fastcgi_param PATH_INFO "/var/tmp";
PHP:
我检查了我能找到的所有预定义数组:
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:我是否需要在nginx/php
级别配置任何东西才能使fastcgi_param
指令生效?
Q2:该fastcgi_param
指令是否仅限于预定义的参数列表(例如,我可以设置PATH_INFO
但不能设置我自己的自定义变量,例如FOO
)?
Q3:如果 Q2 是:有没有办法从 Nginx 向 PHP 传递自定义参数?
您可以通过 fastcgi_param 指令传递其他参数。我敢肯定,因为我使用了这个功能。
我的模范 nginx 配置
以及部分 phpinfo() 输出:
您可以通过在请求标头中传递自定义变量来修改请求,例如:
然后您可以从 PHP 脚本中的请求标头中读取这些值。