Laravel 5.2 not reading env file

PhpLaravelEnvironment VariablesLaravel 5.2

Php Problem Overview


After upgrading to Laravel 5.2, none of my .env file values are being read. I followed the upgrade instructions; none of my config files were changed except auth.php. They were all working fine in previous version, 5.1.19

.env contains values such as

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php contains

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

I get this error:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)

Clearly not pulling in my env config. This is affecting every single one of my config files, including third party such as bugsnag.

I also tried

php artisan config:clear
php artisan cache:clear

Update

Trying php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]

I have tried installing a fresh copy of Laravel 5.2. I basically only copied in my app folder; no additional composer packages are included. Still having the same issue. I have other Laravel 5.2 projects on the same server that are working fine.

Php Solutions


Solution 1 - Php

If any of your .env variables contains white space, make sure you wrap them in double-quotes. For example:

SITE_NAME="My website"

Don't forget to clear your cache before testing:

php artisan config:cache
php artisan config:clear

Solution 2 - Php

From the official Laravel 5.2 Upgrade Notes:

> If you are using the config:cache command during deployment, you > must make sure that you are only calling the env function from within > your configuration files, and not from anywhere else in your > application. > > If you are calling env from within your application, it is strongly > recommended you add proper configuration values to your configuration > files and call env from that location instead, allowing you to convert > your env calls to config calls.

Reference: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

Solution 3 - Php

For me it has worked this in this order:

php artisan config:cache
php artisan config:clear
php artisan cache:clear

And I've tried all the rests without luck.

Solution 4 - Php

Wow. Good grief. It's because I had an env value with a space in it, not surrounded by quotes

This

SITE_NAME=My website

Changed to this

SITE_NAME="My website"

Fixed it. I think this had to do with Laravel 5.2 now upgrading vlucas/phpdotenv from 1.1.1 to 2.1.0

Solution 5 - Php

I had a similar issue in my config/services.php and I solved using config clear and optimize commands:

php artisan config:clear
php artisan optimize

Solution 6 - Php

You can solve the problem by the following recommendation

Recommendation 1:

You have to use the .env file through configuration files, that means you are requrested to read the .env file from configuration files (such as /config/app.php or /config/database.php), then you can use the configuration files from any location of your project.

Recommendation 2: Set your env value within double quotation

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"

Recommendation 3: Maintain the following command sequence after changing any configuration or env value.

 composer dump-autoload
 composer dump-autoload -o

 php artisan clear-compiled
 php artisan optimize

 php artisan route:clear
 php artisan view:clear

 php artisan cache:clear
 php artisan config:cache
 php artisan config:clear
 
 

Recommendation 4: When the syntax1 is not working then you can try another syntax2

   $val1 = env('VARIABLE_NAME');     // syntax1
   $val2 = getenv('VARIABLE_NAME');  // syntax2
   echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;

Recommendation 5: When your number of users is high/more then you have to increase the related memory size in the server configuration.

Recommendation 6: Set a default probable value when you are reading .env variable.

 $googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
 $googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
 $googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");

Solution 7 - Php

I missed this in the upgrade instructions:

> Add an env configuration option to your app.php configuration file that looks like the following: 'env' => env('APP_ENV', 'production')

Adding this line got the local .env file to be read in correctly.

Solution 8 - Php

I had the same issue on local environment, I resolved by

  1. php artisan config:clear
  2. php artisan config:cache
  3. and then cancelling php artisan serve command, and restart again.

Solution 9 - Php

Same thing happens when :port is in your local .env

again the double quotes does the trick

APP_URL="http://localhost:8000"

and then

php artisan config:clear

Solution 10 - Php

Also additional to what @andrewtweber suggested make sure that you don't have spaces between the KEY= and the value unless it is between quotes

.env file e.g.:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

to:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...

Solution 11 - Php

I solved this problem generating a new key using the command: php artisan key:generate

Solution 12 - Php

if you did call config:cache during local development, you can undo this by deleting the bootstrap/cache/config.php file. and this is work for me.

Solution 13 - Php

I experienced this. Reason was that apache(user www-data) could not read .env due to file permissions. So i changed the file permissions to ensure that the server (apache) had read permissions to the file. Just that and boom, it was all working now!
Update:
How to do this varies, depending on who owns the .env file, but assuming it belongs to the Apache www-data group, you can do this:

sudo chmod g+r .env

Modify it depending on your permission structure.

Solution 14 - Php

if you did call config:cache during local development, you can undo this by deleting the bootstrap/cache/config.php file. and this is work for me.

@Payal Pandav has given the comment above.

I want to tell a simple workaround. Just edit the config.php file in the bootstrap/cache/ folder. And change the credentials. This worked for me. Please don't delete this file since this may contain other crucial data in the production environment.

Solution 15 - Php

In my case laravel 5.7 env('APP_URL') not work but config('app.url') works. If I add new variable to env and to config - it not works - but after php artisan config:cache it start works.

Solution 16 - Php

In my case, I needed to restart my Supervisord jobs (i.e. my queue workers). After doing so, a new environment variable I had added to my .env file was successfully pulled into my application.

> Remember, queue workers, are long-lived processes and store the booted application state in memory. As a result, they will not notice changes in your code base after they have been started. So, during your deployment process, be sure to restart your queue workers. In addition, remember that any static state created or modified by your application will not be automatically reset between jobs.

Source: Official Laravel Docs - Queues

Solution 17 - Php

I made the mistake by doing dd/die/dump in the index.php file. This causes the system to not regenerate the configs.

Just do dump in view files will do. The changes to .env file update instantly.

Solution 18 - Php

I had some problems with this. It seemed to be a file permission issue somewhere in the app - not the .env-file.

I had to

  • stop my docker
  • use chown to set owning-rights to my own user for the whole project
  • start docker again

This time it worked.

Solution 19 - Php

If you're using sail environment right after you change your environment variable just restart a server, otherwise it's going to show the old value.

Solution 20 - Php

In my case (Laravel 7.x) it happen because I had set environmental variable on server. To be precise in Docker container. And because environments variables are higher priority than .env file, nothing changes during .env file edit.

Check if you set the env variable on the server:

echo $VAR_NAME

Solution 21 - Php

Tried almost all of the above. Ended up doing

chmod 666 .env

which worked. This problem seems to keep cropping up on the app I inherited however, this most recent time was after adding a .env.testing. Running Laravel 5.8

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionandrewtweberView Question on Stackoverflow
Solution 1 - Phpbenjolly1989View Answer on Stackoverflow
Solution 2 - PhpGaurav GuptaView Answer on Stackoverflow
Solution 3 - PhpTrOnNeView Answer on Stackoverflow
Solution 4 - PhpandrewtweberView Answer on Stackoverflow
Solution 5 - PhpDeric LimaView Answer on Stackoverflow
Solution 6 - PhpMajbah HabibView Answer on Stackoverflow
Solution 7 - PhpdKenView Answer on Stackoverflow
Solution 8 - Phpjay_mzirayView Answer on Stackoverflow
Solution 9 - PhpStavrosView Answer on Stackoverflow
Solution 10 - PhpWaqlehView Answer on Stackoverflow
Solution 11 - PhpAngel PrietoView Answer on Stackoverflow
Solution 12 - PhpPayal PandavView Answer on Stackoverflow
Solution 13 - PhpgthuoView Answer on Stackoverflow
Solution 14 - PhpDaya SatheeshView Answer on Stackoverflow
Solution 15 - PhpKamil KiełczewskiView Answer on Stackoverflow
Solution 16 - Phpw5mView Answer on Stackoverflow
Solution 17 - PhpBing HanView Answer on Stackoverflow
Solution 18 - PhpthephperView Answer on Stackoverflow
Solution 19 - PhpDavidView Answer on Stackoverflow
Solution 20 - PhpGetoXView Answer on Stackoverflow
Solution 21 - PhpPeterGView Answer on Stackoverflow