Laravel 4 accessing environment variables

2020-02-11 08:23发布

问题:

I am trying to access an system variable within my Laravel 4 project. Similar to using ENV['VARIABLE_NAME'] to access a system variable in an RoR project.

Within my Laravel code getenv('VARIABLE_NAME') returns an empty string. However, I can access and print this variable to the screen using php -r "echo getenv('VARIABLE_NAME')" at the command prompt.

php -i confirmed that this variable is also stored in php's $_SERVER superglobal. However, attempting to access $_SERVER['VARIABLE_NAME'] from the database.php file of my project results in an Undefined index: VARIABLE_NAME error.

Can I not access arbitrary system variables from php for some reason (e.g., potential security issue, perhaps) ? If this is the case, how can I expose the system variable I need to my Laravel 4 project?

If configuration matters, I'm using php5-fpm and nginx to serve up my PHP on Ubuntu 13.04 Server. PHP version is 5.5.

回答1:

After fighting with this for much longer than necessary, the proper approach is to use the php5-fpm www.conf file in the pool.d directory of your php5-fpm install. For me this was at /etc/php5/fpm/pool.d/www.conf.

In www.conf there is a specific section of the file that lists several environment variables with the following syntax:

env[VARNAME] = $ENV_VAR_NAME

So just add your own and then you can then access these variables in your Laravel app with

getenv('VARNAME')

Works like a champ.



回答2:

It looks like an nginx related problem, nginx passes parameters to PHP through fastcgi_param directives, so, you have to set it up, just add one you need where you set up other params, this is an example (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;

Check How nginx processes a request and this answer (this one too) as well. I can access any environment variable from PHP on Apache. Hope this helps but can't be more specific.