PHP增加$_ENV变量
在日常开发过程中,我们常常会将一些系统或模块配写在配置文件里。这样便于程序维护与修改。通常的配置文件有.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变量的更多相关文章
- php中环境变量
$_ENV $_ENV是一个包含服务器端环境变量的数组.它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它. $_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素 ...
- Chapter 14_4 使用_ENV
因为_ENV是一个普通的变量,我们可以像其他变量一样去对它进行赋值和访问. _ENV = nil 上面的赋值操作,将会使得在它之后的代码块不能直接访问全局变量.不过,对控制你的代码所使用的变量有用处. ...
- 关于Lumen / Laravel .env 文件中的环境变量是如何生效的
.env 文件包含默认环境变量,我们还可自定义其他任何有效的变量,并可通过 调用 env() 或 $_SERVER 或 $_ENV 来获取该变量.那么env()是如何加载到这些变量的呢?在Lume ...
- tp5 $_ENV获取不到数据
$_ENV变量是取决于服务器的环境变量的,从不同的服务器上获取的$_ENV变量打印出的结果可能是不同的. php的配置文件php.ini的配置项为:variables_order = "GP ...
- _ENV和_G
5.1之前, 全局变量存储在_G这个table中, 这样的操作:a = 1 相当于:_G['a'] = 1 但在5.2之后, 引入了_ENV叫做环境,与_G全局变量表产生了一些混淆,需要从原理上做一个 ...
- php配置参数.md
php 5.5 配置文件 php.ini Options user_ini.filename string 设定了 PHP 会在每个目录下搜寻的文件名:如果设定为空字符串则 PHP 不会搜寻.默认值是 ...
- PHP配置详解
[PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...
- PHP_php.ini_说明详解
这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中.最新版本的php.ini可以在下面两个位置查看:http://cvs.php.net/vie ...
- 最完整PHP.INI中文版
;;;;;;;;;;;;;;;;;;; 关于php.ini ;;;;;;;;;;;;;;;;;;;; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录 ...
随机推荐
- 几种API接口
实用号码归属地查询(IP 地址,手机号码): 默认格式: http://api.liqwei.com/location/ (使用来访者的 IP 地址) 指定 IP 地址格式: http://api.l ...
- box-sizing重置
html { /*-webkit-box-sizing: border-box; -moz-box-sizing: border-box;*/ box-sizing: border-box; } *, ...
- 数学课(math)
数学课(math) 题目描述 wzy又来上数学课了-- 虽然他很菜,但是数学还是懂一丢丢的.老师出了一道题,给定一个包含nn个元素的集合P=1,2,3,-,nP=1,2,3,-,n,求有多少个集合A⊆ ...
- pom.xml(Project Object Model) 文件简单介绍
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- 字符串(bzoj 1856)
Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...
- iPhone屏幕旋转
iPhone屏幕内容旋转 在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个 ...
- macro expand error
cat test_macro.c #define TEST_MACRO(b) chip->##b int main(void) { TEST_MACRO(yyy) return 0; } gcc ...
- openshift scc解析
SCC使用UserID,FsGroupID以及supplemental group ID和SELinux label等策略,通过校验Pod定义的ID是否在有效范围内来限制pod的权限.如果校验失败,则 ...
- 洛谷——P1119 灾后重建
P1119 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重 ...
- dependencies与devDependencies的安装方法
npm install在安装node模块时,有两种命令参数可以把它们的信息写入package.json文件: –save –save-dev 但它的文档里1,只提到一个小区别,–save会把依赖包名称 ...