PHP-CLI环境变量的设置和读取
http://luokr.com/p/30
通常我们在维护PHP线上项目的时候,为了隔离配置和代码,会使用fastcgi_param
的形式将环境变量定义在Nginx的配置文件中(Apache可以使用SetEnv
指令)。这样在PHP-FPM运行过程中就可以使用getenv
函数获取到环境变量的值了。
那对于PHP-CLI,我们又应该怎么设置它的环境变量呢?做法也很简单。
在终端直接执行:
- $ export ART_ENV=production
后续直接使用PHP-CLI命令的时候自然可以获取到环境变量ART_ENV
的值:
- $ php -r "var_dump(getenv('ART_ENV'));"
- string(10) "production"
但是通常还有这种情况:我们当前登录的用户并不是合适的用来运行PHP-CLI脚本的用户,比如我们期待使用www-data
用户来运行PHP-CLI脚本,通常我们会这样做:
- $ sudo -u www-data php -r "var_dump(getenv('ART_ENV'));"
- bool(false)
这时候就会发现无法获取到环境变量了。查看sudo --help
可以发现我们还需要设置-E
参数:
- $ sudo --help
- ...
- -E, --preserve-env preserve user environment when running command
按照文档说明补上即可:
- $ sudo -E -u www-data php -r "var_dump(getenv('ART_ENV'));"
- string(10) "production"
或者更直接点直接指定环境变量的值:
- $ sudo -u www-data ART_ENV=testing php -r "var_dump(getenv('ART_ENV'));"
- string(7) "testing"
需要注意的是:这里的PHP代码都必须使用getenv函数获取环境变量,不能单纯依赖全局变量$_ENV
。全局变量$_ENV
并不总是可用的,除非在php.ini文件中显式设置了variables_order
的值包含E,例如variables_order = "EGPCS"
。更多的详细信息可以参考PHP文档的全局变量部分。
PHP-CLI环境变量的设置和读取的更多相关文章
- Atititcmd cli环境变量的调用设置与使用
Atititcmd cli环境变量的调用设置与使用 1.1. Cgi 环境变量的调用设置与使用1 1.2. 环境变量vs 系统变量1 1.3. 环境变量的分类 A.与服务器相关的环境变量B ,与客户 ...
- linux —— 学习笔记(环境变量的设置)
目录 环境变量概要 与环境变量相关的文件 设置环境变量 注意以及相关 1.环境变量概要 环境变量,简单来说,是储存了环境信息的变量.它可以让你在不指明全部路径的情况下执行某脚本或某应用程序,比如在 l ...
- Ubuntu Linux 环境变量PATH设置
前俩天编译linux下rar解压软件的时候说找不到 /usr/local/linux 路径,在设定path变量的时候,忽然就想看看,path最原始的变量值是多少....(在环境变量文件中保存.... ...
- 转 Ubuntu Linux 环境变量PATH设置
Ubuntu Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. ...
- Linux环境变量及其设置
简介 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息.Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环 ...
- linux环境变量的设置
linux中环境变量分为系统环境变量和用户环境变量(和window中一样),系统环境变量对所有系统用户都有效,用户环境变量只对当前用户有效,我们以ubuntu为例说明 用户环境变量 用户环境变量通常存 ...
- Eclipse的安装和java环境变量的设置
首先准备工作是要下载好Eclipse和java JDK. 必须要注意的是,Eclipse和java JDK必须下载同一位数的版本,即64位同为64位,32位同为32位.否则在安装完成运行Eclipse ...
- Win7下JDK环境变量的设置
JDK并不像Microsoft阵营vs那样智能,安装好后所有的东西都给你配置好了,我们还没需要手动配置很多东西 首先说为什么要配置JDK的环境变量在任何路径下识别java命令和java类 配置分为2个 ...
- Linux环境变量的设置和查看方法
1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...
随机推荐
- wordpress模板修改及函数说明
原文:http://java-er.com/blog/wp-mb-edit/ WordPress基本模板文件 style.css : CSS(样式表)文件index.php : 主页模板archive ...
- WindowManager$BadTokenException: Unable to add window permission denied for this window type
10-11 11:47:27.472: E/AndroidRuntime(12804): java.lang.RuntimeException: Unable to start activity Co ...
- mybatis传入List实现批量更新的坑
原文:http://www.cnblogs.com/zzlback/p/9342329.html 今天用mybatis实现批量更新,一直报错,说我的sql语句不对,然后我还到mysql下面试了,明明没 ...
- Toast信息提示:下拉收起(基于jQuery)(app信息提示更新)
直接上效果:
- kubeadm安装kubernetes V1.11.1 集群
之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...
- ConcurrentLinkedQueue代码解析
原因:学习ConcurrentLinkedQueue是看到akka框架的默认邮箱是使用ConcurrentLinkedQueue实现的. 1. ConcurrentLinkedQueue在java.u ...
- error C2039: 'SetWindowTextA' : is not a member of 'CString'
m_OpenPath.SetWindowText(strPath); 错误原因:在给控件关联变量m_OpenPath时,变量类型选择错误 解决办法:
- 每天一个linux命令(1):pwd命令
1.命令简介 pwd(print work directory 打印当前目录)命令以绝对路径的方式显示用户当前工作目录. 2.用法 pwd [-LP] 3.选项 -L --logical 当目录为连接 ...
- eclipse preference plugin development store and get
eclipse plugin development: E:\workspaces\Eclipse_workspace_rcp\.metadata\.plugins\org.eclipse.pde.c ...
- 【ML】Predict and Constrain: Modeling Cardinality in Deep Structured Prediction -预测和约束:在深度结构化预测中建模基数
[论文标题]Predict and Constrain: Modeling Cardinality in Deep Structured Prediction (35th-ICML,PMLR) [ ...