在apache環境下,setenv的等效值是多少? 使用apache我能夠例如設置env「SOMEENV」並通過$ _ENV ['SOMEENV']在php中訪問它 - 但我不知道如何使用nginx + php-fpm來實現。
我最初認爲我只需在我的php-fpm池的配置中設置ENV [SOMENEV] = test,但var_dump($ _ ENV)仍然不返回任何內容。
任何提示?
在apache環境下,setenv的等效值是多少? 使用apache我能夠例如設置env「SOMEENV」並通過$ _ENV ['SOMEENV']在php中訪問它 - 但我不知道如何使用nginx + php-fpm來實現。
我最初認爲我只需在我的php-fpm池的配置中設置ENV [SOMENEV] = test,但var_dump($ _ ENV)仍然不返回任何內容。
任何提示?
nginx沒有辦法影響php的環境,因爲它沒有將php解釋器嵌入到其進程中。它通過fastcgi_param指令將參數傳遞給php。你可以再補充一個,你設置你則params的休息和通過$ _ SERVER訪問:
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SOMEENV test;
fastcgi_pass php;
}
注意$_ENV
變量的可用性依賴於PHP的使用variables_order
在php.ini的設置FPM。默認值是EGPCS
,其中E
是環境,但是在Ubuntu 12.04上,我發現它是GPCS
。在php.ini本身攜帶關於$_ENV
警告:
; This directive determines which super global arrays are registered when PHP
; starts up. G,P,C,E & S are abbreviations for the following respective super
; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty
; paid for the registration of these arrays and because ENV is not as commonly
; used as the others, ENV is not recommended on productions servers.
它建議使用getenv()
這始終是可用的。我發現可以通過這種方式檢索我在FPM池中設置的變量。
我在php-fpm.d/www.conf 中設置所有env [...]變量在嘗試了一個週末後,我發現訪問這些變量的唯一方法是使用$ _SERVER,$ _ENV不能訪問這些變量。 有沒有人可以提供一個想法?
嗨,謝謝你的回覆。好吧,允許我注入$ _SERVER ['SOMEENV'],但我怎麼可以提供$ _ENV ['SOMEENV']? – Josh 2011-12-18 16:46:42
$ _SERVER數組條目是由網絡服務器創建的,但$ _ENV變量是從運行PHP解釋器的環境中導入的,許多數據由運行PHP的shell提供。在Apache的情況下,PHP解釋器被嵌入到Apache進程中,但Nginx並非如此。 IOW,可以使用Nginx設置$ _ENV變量,並且$ _SERVER和它一樣好。 – Dayo 2011-12-18 17:40:31
NGINX中沒有'env'指令嗎? – CMCDragonkai 2017-04-13 03:52:53