[前言]:
在日常開發過程中,我們常常會將一些系統或模組配寫在配置檔案裡。這樣便於程式維護與修改。通常的配置檔案有.ini , .xml等。配置檔案的好處在於:
1,便於管理。
2,可讀性高。
但是,使用配置檔案也會有壞外,即:
1,安全性差。如果採用加密方法,會帶來解密效能上的開銷。
2,多伺服器佈署時,容易造成檔案內容差異,從而影響程式正常執行。
為了解決以上安全問題,通常的做法是將內容設定在系統中,使用環境變數方式進行配置。下面我們來講一下如何在lnmp(linux + nginx + mysql + php-fpm + php )中進行環境變數的配置。
[操作]:
環境:debian linux os
1,設定系統環境變數:
#vi /etc/profile
如增加乙個環境變數:
export my_redis_host="localhost"
2,修改php-fpm.conf,設定php環境變數:
#vi /etc/php5/fpm/php-fpm.conf
增加:env[my_redis_host]=$my_redis_host
3,修改php-fpm啟動指令碼。
因為每次要使系統變數生效,都必須source /etc/profile,而php-fpm啟動時,也需要作此操作。因此,需要修改php-fpm啟動指令碼。
如使用apt-get安裝的,則:
#vi /etc/init.d/php-fpm
在path等環境變數定義之後,加入一行:
. /etc/profile
注意,
點號與路徑之間有空格
。實際上.與source是一樣的,但是這裡用source會報錯
還要修改/etc/profile的許可權,因為php-fpm啟動使用者是www-data , 而/etc/profile的許可權使用者為root,這裡為了簡章,將/etc/profile的許可權設為「777」,即:
#chmod 777 /etc/profile
4,修改php.ini配置。
因為php.ini預設不載入$_env變數定義,如果此時檢視phpinfo(),會發現我們設定的環境變數為"no value"。
#vi /etc/php5/fpm/php.ini
修改:variables_order為:
variables_order="egpcs"
5,重啟php-fpm
#service php5-fpm restart
6,測試設定結果。
檢視phpinfo(),在"enviroment variables" 一節與「php variables」一節內可能看到我們剛才設定的變數名及變數值。
[補充]:
1,php web可以正常得到$_env的變數, php-cli模式取不到$_env。即:
php -r 'print_r($_env);'
得到結果:array()
這是因為php cli用的是另外乙個php.ini,其variables_order沒有開啟env變數。其使用的是:/etc/php5/cli/php.ini,按[4]說明開啟即可。
碰到這個問題,可以使用指定載入配置檔案(.ini)來測試是否是php.ini引起的。即:
php -c '/etc/php5/fpm/php.ini' -r 'print_r($_env)'
PHP超全域性變數之 ENV
1 env 是乙個包含伺服器端環境變數的陣列,不同系統不完全一樣。部分變數示例 env hostname 伺服器的主機名 env shell 系統 shell 2 env會為空,其原因通常是php的配置檔案php.ini的配置項為 variables order gpcs 要想讓 env的值不為空,...
env環境變數和模式
env.在所有的環境中被載入,當你指定了環境,它也會合併,並且優先順序大於.env,沒有指定環境時先找它。env.development指定開發環境配置 env.production指定生產環境配置,當你build執行時就觸發這個 console.log 當前 process.env.模式是 vue...
env前端環境變數配置
專案有開發環境 測試環境 線上環境,裡面的介面網域名稱等是不同的。每次除錯或者打包的時候手動改動各個變數,比較麻煩,也容易出錯,所以用自動化方式直接配置的不同的環境變數。在專案根目錄下新增檔案,並配置變數 env.development 本地環境變數 node env development env...