我正在尝试访问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
中的任何环境变量。希望这能有所帮助,但再具体不过了。