【问题标题】:Laravel 4 accessing environment variablesLaravel 4 访问环境变量
【发布时间】:2013-11-18 23:53:01
【问题描述】:

我正在尝试访问我的 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。

【问题讨论】:

  • 我尝试在app/config/database.php 中访问$_SERVER["REDIRECT_URL"],它工作得很好。可能是您尝试访问可能无法用于 Web 请求的 CLI 特定变量。

标签: php nginx laravel


【解决方案1】:

在与此问题进行了长时间的斗争后,正确的方法是使用 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')

像冠军一样工作。

【讨论】:

  • +1,方便日后参考,谢谢回答。
【解决方案2】:

看起来像nginx相关的问题,nginx通过fastcgi_param指令将参数传递给PHP,所以,你必须设置它,只需在你设置其他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 answer (this one too)。我可以在Apache 上从PHP 访问任何环境变量。希望这会有所帮助,但不能更具体。

【讨论】:

  • 我调查使用fastcgi_params 来实现我的目标已经有一段时间了。我一直用这种方法遇到障碍。请参阅我接受的答案,了解我最终做了什么。不过,感谢您的贡献。您的源链接对于理解 nginx 如何与 fastCGI 交互非常有帮助。
猜你喜欢
  • 2014-02-21
  • 2014-10-16
  • 2018-03-17
  • 1970-01-01
  • 2021-05-19
  • 2014-08-18
  • 2022-01-04
  • 2020-11-12
  • 2021-11-01
相关资源
最近更新 更多