一般咱們在維護PHP線上項目的時候,爲了隔離配置和代碼,會使用fastcgi_param
的形式將環境變量定義在Nginx的配置文件中(Apache能夠使用SetEnv
指令)。這樣在PHP-FPM運行過程當中就能夠使用getenv
函數獲取到環境變量的值了。函數
那對於PHP-CLI,咱們又應該怎麼設置它的環境變量呢?作法也很簡單。spa
在終端直接執行:.net
- $ export ART_ENV=production
後續直接使用PHP-CLI命令的時候天然能夠獲取到環境變量ART_ENV
的值:code
- $ 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
參數:get
- $ sudo --help
- ...
- -E, --preserve-env preserve user environment when running command
按照文檔說明補上便可:string
- $ sudo -E -u www-data php -r "var_dump(getenv('ART_ENV'));"
- string(10) "production"
或者更直接點直接指定環境變量的值:it
- $ 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文檔的全局變量部分。io