Laravel 5.2 env dosyasını okumuyor


111

Laravel 5.2'ye yükselttikten sonra .envdosya değerlerimin hiçbiri okunmuyor. Yükseltme talimatlarını takip ettim ; auth.php dışında yapılandırma dosyalarımın hiçbiri değiştirilmedi. Önceki sürüm olan 5.1.19'da hepsi iyi çalışıyordu.

.env gibi değerler içerir

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php içerir

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

Bu hatayı alıyorum:

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

Açıkça ortam yapılandırmamı çekmiyor. Bu, bugsnag gibi üçüncü taraflar da dahil olmak üzere yapılandırma dosyalarımın her birini etkiliyor.

Ben de denedim

php artisan config:clear
php artisan cache:clear

Güncelleme

Denemek php artisan tinker

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

Laravel 5.2'nin yeni bir kopyasını yüklemeyi denedim. Temelde sadece appklasörüme kopyaladım ; hiçbir ek besteci paketi dahil değildir. Hala aynı sorunu yaşıyorum. Aynı sunucuda iyi çalışan başka Laravel 5.2 projelerim var.


1
.Env dosyasının yalnızca .env olarak adlandırıldığından emin misiniz? .Env.example değil mi?
James Elliott

Andrew .env dosyasını forge arayüzü ile düzenliyor musunuz yoksa yüklüyor musunuz?
Mark Davidson

@JamesElliott yes it is.env
andrewtweber

1
Yoksa bunu yerel olarak mı çalıştırıyorsunuz? Zanaatkarın altında çalışıyorsanız, durum böyle olabilir diye yeniden başlatmanız gerekir.
Mark Davidson

@MarkDavidson bunu komut satırında vi aracılığıyla düzenliyor ve hayır tam bir sunucuda
andrewtweber

Yanıtlar:


92

Resmi Laravel 5.2 Yükseltme Notlarından:

config:cacheKomutu dağıtım sırasında kullanıyorsanız, işlevi uygulamanızın herhangi bir yerinden değil , yalnızca yapılandırma dosyalarınızın içinden çağırdığınızdan emin olmalısınızenv .

Aradığınız Eğer envuygulama içinde, kuvvetle yapılandırma dosya ve çağrıya uygun yapılandırma değerlerini eklemek önerilir envsize dönüştürmek için izin yerine bu konumdan envaramaları configaramalar.

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


36
php artisan config:cachebenim için çözdü - başka hiçbir şeyin yardımı olmadı. Hatta değil php artisan config:clear- teşekkürler!
kair

36
Laravel 5.3 php artisan config:clearbenim için işe yarayan tek şey
Peon

9
Laravel 5.4 - bir VPS'de konuşlandırıldı: php artisan config:clearbenim için çalıştı. Daha önce config: cache yapmadım, bu yüzden önbelleği temizlemem biraz garip geldi.
Antonio


dosya .envyerine düzenleme yaptığınızdan emin olun.env.example
Connor Leech

85

.envDeğişkenlerinizden herhangi biri beyaz boşluk içeriyorsa, onları çift tırnak içine aldığınızdan emin olun. Örneğin:

SITE_NAME="My website"

Test etmeden önce önbelleğinizi temizlemeyi unutmayın:

php artisan config:cache
php artisan config:clear

Evet çalışıyor. .envDosyadaki herhangi bir değeri değiştirdikten sonra php artisan config:cache & php artisan config:clearkomutu çalıştırın . Çalışacak.
Chandan Sharma

42

Vay. İyi keder. Bunun nedeni, içinde tırnak işaretleri olmayan, içinde boşluk bulunan bir ortam değerine sahip olmamdır.

Bu

SITE_NAME=My website

Buna değiştirildi

SITE_NAME="My website"

Onu düzeltti. Bu laravel 5.2 şimdi yükseltme ile yapmak zorunda düşünüyorum vlucas / phpdotenv 1.1.1 den 2.1.0 için


Aynı düşünce - boşluklar .env5.2'nin altında sorunlara neden olurken , 5.1'de olmadığı gibi görünüyor .
thomthom

5
Ve bu, Laravel'deki (birçok) böcek ayılarımdan biri: bazen sessizce çeşitli konfigürasyonları ve / veya başka tür hataları görmezden gelme ve kabul etme alışkanlığına sahip, herhangi bir şeyin yanlış gittiğine dair hiçbir gösterge olmadan. phpdotenvVerildiğinde , bu bir "özellik" olabilir , ancak Laravel hala .envdahil edilmesi gereken bir dosya olduğunu ve başarılı olmadığını biliyor , ancak kimseye söyleme zahmetine girmiyor.
dKen

2
Zaten bu kadar aptalca bir şey için saatler harcadım. Daha fazla israf etmeme engel olduğun için teşekkürler!
Jenski

30

Benim için şu sırayla çalıştı:

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

Ve tüm dinlenmeleri şanssız denedim.


2
Bu sipariş, birkaç saatlik hata ayıklamadan sonra sorunumu çözdü.
Minion

Hayatımı kurtardı. Tks. Ama id nedenini anlamadı.
Mateus Galasso

bu sipariş beni kurtardı. Teşekkürler
Esad ullah

Teşekkürler kibar internet yabancısı, bu işi halletti!
Eduardo

Bu cevaba her geldiğimde 1 dolar alırsan çoktan zengin olursun. Teşekkürler!
Altın

26

Benim de benzer bir sorun config/services.phpyaşadım config clearve ve optimizekomutlarını kullanarak çözdüm:

php artisan config:clear
php artisan optimize

26

Benim için aşağıdakiler çalıştı

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

18

bunu çalıştır:

php artisan config:clear
php artisan cache:clear

sonra
php artisan config:cache


13

Komutu çalıştırdığınızda, php artisan config:cachetüm envdeğişkenleri silecek ve env()boş değerler verecek, aşağıdaki komutu çalıştırmayı deneyin ve orada env()tekrar tüm envdeğişkenleri yakalamaya başlayın

php artisan config:clear

Sihir gibi bu benim için çalıştı - harika cevap!
David Partyka

12

Yerel ortamda da aynı sorunu yaşadım, çözdüm

  1. php esnaf yapılandırması: temizle
  2. php artisan yapılandırması: önbellek
  3. ve sonra php artisan service komutunu iptal edip yeniden başlatın.

12

Sorunu aşağıdaki öneri ile çözebilirsiniz

Öneri 1:

.Env dosyasını yapılandırma dosyaları aracılığıyla kullanmanız gerekir, bu da .env dosyasını yapılandırma dosyalarından (/config/app.php veya /config/database.php gibi) okumanız gerektiği anlamına gelir, ardından yapılandırmayı kullanabilirsiniz projenizin herhangi bir konumundan dosyalar.

Öneri 2: Env değerinizi çift tırnak içinde ayarlayın

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

Öneri 3: Herhangi bir yapılandırmayı veya ortam değerini değiştirdikten sonra aşağıdaki komut dizisini koruyun.

 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

Öneri 4: Sözdizimi çalışmadığında başka bir sözdizimix2'yi deneyebilirsiniz.

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

Öneri 5: Kullanıcı sayınız yüksek / fazla olduğunda, sunucu yapılandırmasında ilgili bellek boyutunu artırmanız gerekir .

Öneri 6: .env değişkenini okurken varsayılan bir olası değer ayarlayın.

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

10

Bunu yükseltme talimatlarında kaçırdım:

app.phpYapılandırma dosyanıza aşağıdakine benzer bir env yapılandırma seçeneği ekleyin : 'env' => env('APP_ENV', 'production')

Bu satırı eklemek yerel .envdosyanın doğru okunmasını sağladı.


1
Sanırım benim uygulamam Laravel 4 olduğu için aynı hatayı aldım, sonra 5.0'a, sonra 5.1'e yükseltildi, vb. Muhtemelen bu değeri app.php'ye eklemeyi kaçırdım. Bana çok zaman ayırdığın için teşekkürler. İşte bir olumlu oy!
Bruno P. Kinoshita

9

Basitlik güçtür:

php artisan config:cache

Alacaksınız:

Yapılandırma önbelleği temizlendi!

Yapılandırma başarıyla önbelleğe alındı!


7

Aynı şey şu durumlarda da olur: bağlantı noktası yerel .env'nizde olduğunda

yine çift tırnak işe yarar

APP_URL="http://localhost:8000"

ve sonra

php artisan config:clear


4

Ayrıca @andrewtweber'in önerdiklerine ek olarak, tırnak işaretleri arasında olmadığı sürece KEY = ile değer arasında boşluk olmadığından emin olun

.env dosyası, örneğin:

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

to:

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

3

Aynı problemle kendi bölgemde de karşılaştım ve buradaki tüm cevapları denedim ama işe yaramadı. Sadece bu benim için çalıştı php artisan config:clearve restart server. Tıkır tıkır çalışıyor!


4
@RameshMhetre try php artisan config:cache, php artisan config:clearthenphp artisan cache:clear
Dexter Bengil

2

Şu komutu kullanarak yeni bir anahtar oluşturarak bu sorunu çözdüm: php artisan key:generate


2

yerel geliştirme sırasında config: cache çağrısı yaptıysanız, bootstrap / cache / config.php dosyasını silerek bunu geri alabilirsiniz. ve bu benim için iş.


2

yerel geliştirme sırasında config: cache çağrısı yaptıysanız, bootstrap / cache / config.php dosyasını silerek bunu geri alabilirsiniz. ve bu benim için iş.

@Payal Pandav yukarıdaki yorumu vermiştir.

Basit bir çözüm söylemek istiyorum. Sadece bootstrap / cache / klasöründeki config.php dosyasını düzenleyin. Ve kimlik bilgilerini değiştirin. Bu benim için çalıştı. Üretim ortamında başka önemli veriler içerebileceğinden lütfen bu dosyayı silmeyin.


2

Benim durumumda laravel 5.7 env('APP_URL')çalışmıyor ama config('app.url')çalışıyor. envYapılandırmaya ve yapılandırmaya yeni değişken eklersem - işe yaramıyor - ama php artisan config:cacheçalışmaya başladıktan sonra .


3
Geliştirme ortamındaysanız, yapılandırmanızı ve rotalarınızı önbelleğe almamalısınız. Tüm önbelleği kaldırmak için şunları kullanabilirsiniz:php artisan optimize:clear
Zohaib

@ZohaibHassan Dev ortamında yapılandırma ve yollar için önbellek nasıl kapatılır?
Kamil Kiełczewski

1
Yukarıdaki komut kapatır 1. önbelleği yönlendirir, 2 yapılandırma önbelleği, 3. görünümleri temizle 4. optimize edilmiş dosyaları temizle 5. varsa önbelleği temizle
Zohaib

1
Yapılandırma için yalnızca siz kullanabilirsiniz php artisan config:clear, yapılandırma önbelleğinizi temizler ve tekrar üretilmez ve üretime başladığınızda php artisan config:cacheyapılandırmalarınızı önbelleğe almak için çalıştırabilirsiniz
Zohaib

1

Bu php artisan config:cachekomutu konsolda çalıştırırsanız , tüm .env dosya içeriklerini önbellekte depolar, bu komuttan sonra .env dosyasına herhangi bir içerik eklerseniz, php artisan config:clearkomutu çalıştırana kadar kullanılamayacaktır.


1

Larva gelişimi sırasında aynı problemle çok zaman karşılaşıyorum. bazen env çalışmayı durdurur ve herhangi bir değer döndürmez. bu neden durumunuza bağlı olarak farklı olabilir. ama birkaç gün önce benim durumumda koştum

 PHP artisan::config:clear

bu yüzden bu komutu kullanırken dikkatli olun. çünkü tüm yapılandırma verilerini önbelleğinden silecektir. böylece bundan sonra herhangi bir değer döndürmez. Yani bu durumda, eğer PHP artisan config :: clear komutunu çalıştırdıysanız, önce bunu kullanmanız gerekir .

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!

1

Ben bunu yaşadım. Nedeni, apache'nin (kullanıcı www verisi) dosya izinleri nedeniyle .env'yi okuyamamış olmasıdır. Bu yüzden, sunucunun (apache) dosyaya okuma izinlerine sahip olduğundan emin olmak için dosya izinlerini değiştirdim. Sadece bu ve bum, hepsi şimdi çalışıyordu!
Güncelleme: Bunun
nasıl yapılacağı, .env dosyasının sahibine bağlı olarak değişir, ancak Apache www-datagrubuna ait olduğunu varsayarsak , şunu yapabilirsiniz:

sudo chmod g+r .env

İzin yapınıza bağlı olarak değiştirin.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.bu aslında yanlış bir yaklaşım. Apaxhe yapılandırmasını düzeltmiş olmanız gerekir, böylece bu belirli siteye bu dosyaların sahibi olan sahip olarak hizmet verir
Marcin Orlowski

0

index.phpDosyaya dd / die / dump yaparak hata yaptım . Bu, sistemin yapılandırmaları yeniden oluşturmamasına neden olur.

Sadece görünüm dosyalarında döküm yapmak yeterli olacaktır. .envAnında dosya güncelleme değişiklikleri .


0

Bununla bazı sorunlarım vardı. .Env dosyası değil, uygulamanın herhangi bir yerinde bir dosya izni sorunu gibi görünüyordu.

Tüm proje için kendi kullanıcıma sahip olma haklarını ayarlamak için chown'u kullanmak zorunda kaldım - dockerımı durdurdum - docker'ı yeniden başlattım

Bu sefer işe yaradı.


-1

Yukarıdakilerin neredeyse tamamını denedim. Yapmak bitti

chmod 666 .env

hangi çalıştı. Bu sorun, miras aldığım uygulamada kırpılmaya devam ediyor gibi görünüyor, ancak bu en yakın zamanda bir .env.testing ekledikten sonra oldu. Laravel 5.8'i Çalıştırma

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.