关于php的getenv()方法获取环境变量的问题

php文件的执行

我们比较常用的执行php文件方式有两种

一种是通过浏览器访问服务器(比如apache),然后由服务器来运行相应的php文件

另一种就是通过shell直接运行php命令或者在shell脚本文件中运行php命令的方式来执行php文件

直接运行php命令

php /var/www/borg/oil refine test

在shell脚本文件中运行php命令

bash /var/www/borg/fuel/app/tasks/test.sh

test.sh

#!/bin/bash

export tt="test***in test.sh"     //此处的环境变量tt可以被test.php文件中的getenv取到,当然,此时的shell进程中的所有环境变量都可以被取到
php_command="php /var/www/borg/oil refine test"

resutl=$($php_command)

test.php

<?php
namespace Fuel\Tasks;

//同期ファイル作成バッチ
class Test
{
    public static function run($sync_mode=null, $date_from="", $date_to="")
    {
        \Log::debug("test.sh");
        \Log::debug(getenv("tt"));
    }

}

apache配置文件中的环境变量

<VirtualHost *>
  ServerName borg-localhost
  DocumentRoot /var/www/borg/public
  DirectoryIndex index.html index.php index.cgi
  SetEnv FUEL_ENV development      //此处的环境变量通过浏览器访问服务器apache的方式是可以通过getenv取到的,dan通过命令行运行php的方式是取不到的
                       //此处的环境变量通过$_SERVER["FUEL_ENV"]的方式也是可以取道的
 <Directory "/var/www/borg/public">
    AllowOverride All
    #AllowOverride AuthConfig
    Options Indexes FollowSymLinks
    Require all granted
 </Directory>

这两种方式通过getenv获取环境变量时有所不同

通过浏览器的方式访问时,getenv可以获取到在apache配置文件中的环境变量,而无法获取linux主机的环境变量(比如/etc/environment,/etc/profile等文件中设置的环境变量)

而通过shell命令行的方式运行php时,getenv可以获得运行php时的shell进程的环境变量,而无法获得apache配置文件中设置的环境变量

个人原因猜测,apache运行php时,并不会加载apache所在linux系统的环境变量,而shell命令行的方式运行php文件时,因为没有通过apache,所以也不会加载apache配置文件的环境变量

原文地址:https://www.cnblogs.com/gaoBlog/p/12290121.html

时间: 2024-10-03 21:00:26

关于php的getenv()方法获取环境变量的问题的相关文章

java调用python的惨痛史(无法获取环境变量)

环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle        事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用python使用外部传参做一个处理,再写回到数据库.如果使用java直接搞的话需要绕很大一个圈,比较麻烦,用python的话就很简单了,于是就有了下面的故事,希望和我遇到同样问题的同学能对你们有一些帮助,少绕一些圈子,java和python功能开发都很顺利,于是到了java调用python环节 大概把需要

java中获取环境变量

分为获取java自身的一些环境变量和和操作系统相关的环境变量. 获取JVM相关的一些变量 在运行时设置一个环境变量 debug 为 true: java -Ddebug=true YourClass在程序中设置一个环境变量 debug 为 true: System.setProperty( "debug", "true" );获取一个环境变量 debug : String debug = System.getProperty( "debug" )

PHP获取环境变量

使用PHP的exec等函数与:Linux进行交互是很常见的方式,但是有时候发现,在终端里面通过命令行模式运行的代码可行,放到网站上去访问就出问题了,这里主要是因为在通过Nginx调起PHP-FPM的时候,会存在一些参数的配置问题下面就简单介绍一下这两种方式. 解决-PHP-FPM模式 通过Nginx传递 如在nginx的配置里设置:fastcgi_param ENV_XXX 123456;每次页面请求nginx都会将此变量传递给php,php可以通过getenv函数或$_SERVER全局变量获得

node 获取环境变量

node有时候需要获取环境变量,可以用node 内置对象process来实现, 例如:获取环境变量中 名为GRUNT_PATH的值:var gruntPath=process.env.GRUNT_PATH:还可以获取当前项目相对于gruntPath 的相对路径:var nodepath = path.relative(__dirname, process.env.GRUNT_PATH); 原文地址:https://blog.51cto.com/13496570/2402127

springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法

环境变量的读取以及系统属性的设置 环境变量只能读取,不能修改,系统属性可以修改 系统变量的读取方式: System.getEnv() 系统属性有多重读取和修改方式: 其修改方式为: 读取系统属性: @Autowired AbstractEnvironment environment; System.setProperty("today","tuesday"); environment.getProperty("test"); 增加新的系统属性:

批处理,修改环境变量path的方法(加环境变量)

方法一:批处理中,修改环境变量,一次性有效(也就是在当前的脚本中有效) CMD中运行 set path==%path%;d:/mypath 用 set path可以查看,当前的环境变量 方法二 :批处理中,修改环境变量,永久有效 ::更改path环境变量值,新增e:\toolswmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools

Jenkins Python Plugin获取环境变量

Jenkins Python Plugin 官方wiki:https://wiki.jenkins-ci.org/display/JENKINS/Python+Plugin 它使得在构建时可以执行Python脚本(前提:Python必须已经被添加到path环境变量中) 当然,它也也可以使用Jenkins提供的一系列环境变量,如:BUILD_NUMBER BUILD_ID JOB_NAME JENKINS_HOME 等等 具体这些环境变量可以点击如下链接查看详情,http://ip[:port]/

class_copyIvarList方法获取实例变量问题引发的思考

在runtime.h中,你可以通过其中的class_copyIvarList方法来获取实例变量.具体的实现如下(记得导入头文件<objc/runtime.h>): - (NSArray *)ivarArray:(Class)cls { unsigned int stuIvarCount = 0; Ivar *ivars = class_copyIvarList(cls, &stuIvarCount); if (stuIvarCount == 0) { return nil; } NSM

Python 获取环境变量的几种方式

第一种 import os os.environ.get('key_name') 第二种 import os os.getenv('key_name') 第三种 import os os.getenvb('key_name') # 返回bytes 前面两种使用的场景使用比较多,使用哪个就由你自己决定,记住哪个就用哪个咯. 原文地址:https://www.cnblogs.com/1lin24/p/11811118.html