Laravel 4访问环境变量


Laravel 4 accessing environment variables

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

在我的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。

在与之斗争了很长时间之后,正确的方法是使用php5-fpm安装的pool.d目录中的php5-fpm-www.conf文件。对我来说,这是在/etc/php5/fpm/pool.d/www.conf

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

env[VARNAME] = $ENV_VAR_NAME

因此,只需添加您自己的变量,然后您就可以使用在您的Laravel应用程序中访问这些变量

getenv('VARNAME')

像冠军一样工作。

这看起来像是一个与nginx相关的问题,nginx通过fastcgi_param指令将参数传递给PHP,所以,你必须设置它,只需在设置其他params的地方添加一个你需要的,这是一个示例(设置FastCGI变量)

; /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;

检查nginx如何处理一个请求和这个答案(这个也是)。我可以在Apache上访问PHP中的任何环境变量。希望这能有所帮助,但再具体不过了。