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文档的全局变量部分。

 

最新文章

  1. C#时间戳转换
  2. 【算法与数据结构】二叉搜索树的Java实现
  3. spring java 获取webapp下文件路径
  4. bitset学习小记
  5. linux修改时区,时间格式
  6. iOS 捕获系统外异常
  7. (转) 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
  8. android布局常用属性记录
  9. Struts2 拦截器—拦截action
  10. PHP设计模式:工厂方法
  11. hdu_1026(最短路)
  12. hadoop源码调试
  13. linux下open-vswitch安装卸载操作
  14. git 分支管理规范
  15. CY7C68013 USB接口相机开发记录 - 第四天:上位机编写1
  16. windows下《Go Web编程》之Go环境配置和安装
  17. zabbix监控指定端口
  18. layui复选框
  19. linux cpu过高原因及代码定位
  20. hdu 2058 The sum problem(数学题)

热门文章

  1. 2016年7款最佳 Java 框架
  2. 嵌入式Linux学习(一)
  3. ASP.NET Web API中把分页信息放Header中返回给前端
  4. boost.xml_parser中文字符问题 (转)
  5. 微信小程序 scroll-view 实现锚点跳转
  6. hash bucket
  7. SoapUI Pro Project Solution Collection-access the soapui object
  8. VS中项目的循环引用的问题
  9. Database数据库切片模式
  10. Socket网络编程--网络爬虫(3)