PHP-CLI環境變數的設定和讀取

來源:互聯網
上載者:User

標籤:nginx   登入   env   還需要   詳細   bool   blank   項目   user   

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環境變數的設定和讀取

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.