1. 程式人生 > >PHP-CLI環境變量的設置和讀取

PHP-CLI環境變量的設置和讀取

... 目的 running 指令 and clas 文檔 ini文件 href

http://luokr.com/p/30

通常我們在維護PHP線上項目的時候,為了隔離配置和代碼,會使用fastcgi_param的形式將環境變量定義在Nginx的配置文件中(Apache可以使用SetEnv指令)。這樣在PHP-FPM運行過程中就可以使用getenv函數獲取到環境變量的值了。

那對於PHP-CLI,我們又應該怎麽設置它的環境變量呢?做法也很簡單。

在終端直接執行:

  1. $ export ART_ENV=production

後續直接使用PHP-CLI命令的時候自然可以獲取到環境變量ART_ENV的值:

  1. $ php -r "var_dump(getenv(‘ART_ENV‘));"
  2. string(10) "production"

但是通常還有這種情況:我們當前登錄的用戶並不是合適的用來運行PHP-CLI腳本的用戶,比如我們期待使用www-data用戶來運行PHP-CLI腳本,通常我們會這樣做:

  1. $ sudo -u www-data php -r "var_dump(getenv(‘ART_ENV‘));"
  2. bool(false)

這時候就會發現無法獲取到環境變量了。查看sudo --help可以發現我們還需要設置-E參數:

  1. $ sudo --help
  2. ...
  3. -E, --preserve-env preserve user environment when running command

按照文檔說明補上即可:

  1. $ sudo -E -u www-data php -r "var_dump(getenv(‘ART_ENV‘));"
  2. string(10) "production"

或者更直接點直接指定環境變量的值:

  1. $ sudo -u www-data ART_ENV=testing php -r "var_dump(getenv(‘ART_ENV‘));"
  2. string(7) "testing"

需要註意的是:這裏的PHP代碼都必須使用getenv函數獲取環境變量,不能單純依賴全局變量$_ENV。全局變量$_ENV並不總是可用的,除非在php.ini文件中顯式設置了variables_order

的值包含E,例如variables_order = "EGPCS"。更多的詳細信息可以參考PHP文檔的全局變量部分。

PHP-CLI環境變量的設置和讀取