Php
如何從 Nginx 將自定義參數傳遞給 PHP?
我正在與pass
Nginx 1.2.4
結合使用並嘗試將自定義參數傳遞給. 以下是我到目前為止找到的選項:PHP-FPM 5.4.8``fastcgi``PHP
- 使用該
env
指令在 in 中設置一個環境變數,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 配置
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
您可以通過在請求標頭中傳遞自定義變數來修改請求,例如:
proxy_set_header Variable-name-here Value-here;
然後您可以從 PHP 腳本中的請求標頭中讀取這些值。