標籤:nginx 登入 env 還需要 詳細 bool blank 項目 user
http://luokr.com/p/30
通常我們在維護PHP線上項目的時候,為了隔離配置和代碼,會使用fastcgi_param的形式將環境變數定義在Nginx的設定檔中(Apache可以使用SetEnv指令)。這樣在PHP-FPM運行過程中就可以使用getenv函數擷取到環境變數的值了。
那對於PHP-CLI,我們又應該怎麼設定它的環境變數呢?做法也很簡單。
在終端直接執行:
- $ export ART_ENV=production
後續直接使用PHP-CLI命令的時候自然可以擷取到環境變數ART_ENV的值:
- $ php -r "var_dump(getenv(‘ART_ENV‘));"
- string(10) "production"
但是通常還有這種情況:我們當前登入的使用者並不是合適的用來運行PHP-CLI指令碼的使用者,比如我們期待使用www-data使用者來運行PHP-CLI指令碼,通常我們會這樣做:
- $ sudo -u www-data php -r "var_dump(getenv(‘ART_ENV‘));"
- bool(false)
這時候就會發現無法擷取到環境變數了。查看sudo --help可以發現我們還需要設定-E參數:
- $ sudo --help
- ...
- -E, --preserve-env preserve user environment when running command
按照文檔說明補上即可:
- $ sudo -E -u www-data php -r "var_dump(getenv(‘ART_ENV‘));"
- string(10) "production"
或者更直接點直接指定環境變數的值:
- $ sudo -u www-data ART_ENV=testing php -r "var_dump(getenv(‘ART_ENV‘));"
- string(7) "testing"
需要注意的是:這裡的PHP代碼都必須使用getenv函數擷取環境變數,不能單純依賴全域變數$_ENV。全域變數$_ENV並不總是可用的,除非在php.ini檔案中顯式設定了variables_order的值包含E,例如variables_order = "EGPCS"。更多的詳細資料可以參考PHP文檔的全域變數部分。
PHP-CLI環境變數的設定和讀取