我正在尝试访问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。
答案 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 request和this answer(this one too)。我可以在PHP
上访问Apache
的任何环境变量。希望这有所帮助,但不能更具体。