在日常开发过程中,我们常常会将一些系统或模块配写在配置文件里。这样便于程序维护与修改。通常的配置文件有.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. php中环境变量

    $_ENV $_ENV是一个包含服务器端环境变量的数组.它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它.   $_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素 ...

  2. Chapter 14_4 使用_ENV

    因为_ENV是一个普通的变量,我们可以像其他变量一样去对它进行赋值和访问. _ENV = nil 上面的赋值操作,将会使得在它之后的代码块不能直接访问全局变量.不过,对控制你的代码所使用的变量有用处. ...

  3. 关于Lumen / Laravel .env 文件中的环境变量是如何生效的

    .env 文件包含默认环境变量,我们还可自定义其他任何有效的变量,并可通过  调用 env() 或 $_SERVER 或 $_ENV  来获取该变量.那么env()是如何加载到这些变量的呢?在Lume ...

  4. tp5 $_ENV获取不到数据

    $_ENV变量是取决于服务器的环境变量的,从不同的服务器上获取的$_ENV变量打印出的结果可能是不同的. php的配置文件php.ini的配置项为:variables_order = "GP ...

  5. _ENV和_G

    5.1之前, 全局变量存储在_G这个table中, 这样的操作:a = 1 相当于:_G['a'] = 1 但在5.2之后, 引入了_ENV叫做环境,与_G全局变量表产生了一些混淆,需要从原理上做一个 ...

  6. php配置参数.md

    php 5.5 配置文件 php.ini Options user_ini.filename string 设定了 PHP 会在每个目录下搜寻的文件名:如果设定为空字符串则 PHP 不会搜寻.默认值是 ...

  7. PHP配置详解

    [PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...

  8. PHP_php.ini_说明详解

    这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中.最新版本的php.ini可以在下面两个位置查看:http://cvs.php.net/vie ...

  9. 最完整PHP.INI中文版

    ;;;;;;;;;;;;;;;;;;; 关于php.ini ;;;;;;;;;;;;;;;;;;;; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录 ...

随机推荐

  1. envsetup.sh 与 choosecombo

    choose: 来定义编译选项, choosecombo 将会一步一步提示你输入相应的编译参数 https://blog.csdn.net/kickxxx/article/details/692518 ...

  2. python(3)-- 语句:条件、循环、break、continue...

    1. 条件语句 执行条件:判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. [Python程序语言指定任何非0和非空(null)值为true,0 或 ...

  3. element ui form表单清空规则

    公司项目重构,经过商定使用element ui.在重构项目的时候发现一下element ui上很蛋疼的东西. 例如,这个form表单就是一个.趁着在高铁上没事,把想写的东西写一下. 先说一下eleme ...

  4. 关于在生命周期当中进行setState操作的问题

    当需要监听组件的属性改变的时候有两个生命周期componentWillReceiveProps和componentWillUpdate 当使用componentWillUpdate的时候可以获取到将要 ...

  5. tableView镶嵌加入CollectionView实现方法

    创建一个继承UICollectionView的类QHCollectionView在QHCollectionView.h中添加接口方法 @interface QHCollectionView : UIC ...

  6. bat文件【java调用】

    Runtime.getRuntime().exec("cmd /c del c:\\a.doc");   //Runtime.getRuntime().exec("not ...

  7. [LeetCode] Jump Game II 贪心

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  8. DNS解析过程详解【转】

    转自:http://blog.chinaunix.net/uid-28216282-id-3757849.html 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www. ...

  9. 修改linux 的bash 为zsh

    针对centos1.  yum -y install zsh git   2. git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh- ...

  10. iscsi 学习

    iscsi-initiator-utils-6.2.0.872-10.el6.x86_64 iscsi-initiator-utils-6.2.0.873-32.el7.x86_64 在el7中, i ...