Laravel 4访问环境变量

时间:2013-11-18 23:53:01

标签: php nginx laravel

我正在尝试访问Laravel 4项目中的系统变量。与使用ENV['VARIABLE_NAME']访问RoR项目中的系统变量类似。

在我的Laravel代码中getenv('VARIABLE_NAME')返回一个空字符串。但是,我可以在命令提示符下使用php -r "echo getenv('VARIABLE_NAME')"访问该变量并将其打印到屏幕上。

php -i确认此变量也存储在php的$_SERVER超全局中。但是,尝试从我的项目的database.php文件中访问$_SERVER['VARIABLE_NAME']会导致Undefined index: VARIABLE_NAME错误。

我是否可以出于某种原因从php访问任意系统变量(例如潜在的安全问题)?如果是这种情况,我怎样才能将我需要的系统变量暴露给我的Laravel 4项目?

如果配置很重要,我使用php5-fpm和nginx在Ubuntu 13.04服务器上提供我的PHP。 PHP版本是5.5。

2 个答案:

答案 0 :(得分:7)

在与此争吵的时间超过必要时间后,正确的方法是使用php5-fpm安装的www.conf目录中的php5-fpm pool.d文件。对我而言,这是/etc/php5/fpm/pool.d/www.conf

www.conf中,文件的某个特定部分列出了几个环境变量,其语法如下:

env[VARNAME] = $ENV_VAR_NAME

因此,只需添加您自己的,然后您就可以使用

在Laravel应用中访问这些变量
getenv('VARNAME')

像冠军一样工作。

答案 1 :(得分:0)

看起来似乎是nginx相关问题,nginx通过PHP指令将参数传递给fastcgi_param,所以,你必须设置它,只需添加一个你需要的您在其中设置了其他params,这是一个示例(Setting up FastCGI Variables

; /etc/nginx/fastcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO $fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

同时检查How nginx processes a requestthis answerthis one too)。我可以在PHP上访问Apache的任何环境变量。希望这有所帮助,但不能更具体。