2011-12-18 40 views
8

在apache環境下,setenv的等效值是多少? 使用apache我能夠例如設置env「SOMEE​​NV」並通過$ _ENV ['SOMEE​​NV']在php中訪問它 - 但我不知道如何使用nginx + php-fpm來實現。

我最初認爲我只需在我的php-fpm池的配置中設置ENV [SOMENEV] = test,但var_dump($ _ ENV)仍然不返回任何內容。

任何提示?

回答

17

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; 
} 
+1

嗨,謝謝你的回覆。好吧,允許我注入$ _SERVER ['SOMEE​​NV'],但我怎麼可以提供$ _ENV ['SOMEE​​NV']? – Josh 2011-12-18 16:46:42

+1

$ _SERVER數組條目是由網絡服務器創建的,但$ _ENV變量是從運行PHP解釋器的環境中導入的,許多數據由運行PHP的shell提供。在Apache的情況下,PHP解釋器被嵌入到Apache進程中,但Nginx並非如此。 IOW,可以使用Nginx設置$ _ENV變量,並且$ _SERVER和它一樣好。 – Dayo 2011-12-18 17:40:31

+0

NGINX中沒有'env'指令嗎? – CMCDragonkai 2017-04-13 03:52:53

6

注意$_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池中設置的變量。

+1

您可以訪問聲明爲php-fpm conf文件的變量,因爲getenv()在此處搜索$ _ENV和$ _SERVER,如下所示:http://stackoverflow.com/questions/3780866/why-is-my-env-empty – LeandroCR 2015-01-28 20:38:03

+0

getenv ()不以相同的方式工作 – deFreitas 2016-02-07 18:30:46

0

我在php-fpm.d/www.conf 中設置所有env [...]變量在嘗試了一個週末後,我發現訪問這些變量的唯一方法是使用$ _SERVER,$ _ENV不能訪問這些變量。 有沒有人可以提供一個想法?