Laravel 5.2 tidak membaca file env

111

Setelah meningkatkan ke Laravel 5.2, tidak ada file .env nilai file yang dibaca. Saya mengikuti instruksi peningkatan ; tidak ada file konfigurasi saya yang diubah kecuali auth.php. Semuanya berfungsi dengan baik di versi sebelumnya, 5.1.19

.env berisi nilai-nilai seperti

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php mengandung

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

Saya mendapatkan kesalahan ini:

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

Jelas tidak menarik konfigurasi env saya. Ini memengaruhi setiap file konfigurasi saya, termasuk pihak ketiga seperti bugsnag.

Saya juga mencoba

php artisan config:clear
php artisan cache:clear

Memperbarui

Mencoba php artisan tinker

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

Saya telah mencoba menginstal salinan baru Laravel 5.2. Saya pada dasarnya hanya menyalin di appfolder saya ; tidak ada paket komposer tambahan yang disertakan. Masih mengalami masalah yang sama. Saya memiliki proyek Laravel 5.2 lainnya di server yang sama yang berfungsi dengan baik.

andrewtweber
sumber
1
Apakah Anda yakin file .env hanya diberi nama .env? Bukan .env.example?
James Elliott
Andrew, apakah Anda mengedit file .env dengan antarmuka forge atau menguploadnya?
Mark Davidson
@JamesElliott ya itu.env
andrewtweber
1
Atau apakah Anda menjalankan ini secara lokal? Jika Anda menjalankan layanan pengrajin, Anda perlu memulai ulang untuk berjaga-jaga jika itu masalahnya.
Mark Davidson
@MarkDavidson mengeditnya melalui vi di baris perintah, dan tidak ada di server lengkap
andrewtweber

Jawaban:

92

Dari Catatan Peningkatan Laravel 5.2 resmi:

Jika Anda menggunakan config:cacheperintah selama penerapan, Anda harus memastikan bahwa Anda hanya memanggilenv fungsi dari dalam file konfigurasi Anda, dan bukan dari mana pun dalam aplikasi Anda.

Jika Anda menelepon envdari dalam aplikasi Anda, sangat disarankan agar Anda menambahkan nilai konfigurasi yang tepat ke file konfigurasi Anda dan memanggil envdari lokasi itu sebagai gantinya, memungkinkan Anda untuk mengubah envpanggilan Anda menjadi configpanggilan.

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

Gaurav Gupta
sumber
36
php artisan config:cachememecahkannya untuk saya - tidak ada lagi yang membantu. Bahkan tidak php artisan config:clear- terima kasih!
kair
36
Laravel 5.3 php artisan config:clearadalah satu-satunya hal yang berhasil untuk saya
Peon
9
Laravel 5.4 - digunakan pada VPS: php artisan config:clearbekerja untuk saya. Saya tidak melakukan config: cache sebelumnya, jadi sepertinya agak aneh karena saya harus menghapus cache.
Antonio
pastikan Anda mengedit .envalih-alih .env.examplefile
Connor Leech
85

Jika salah satu .envvariabel Anda berisi spasi, pastikan Anda membungkusnya dengan tanda kutip ganda. Sebagai contoh:

SITE_NAME="My website"

Jangan lupa untuk membersihkan cache Anda sebelum menguji:

php artisan config:cache
php artisan config:clear
benjolly1989
sumber
Ya, itu berhasil. Setelah Mengubah nilai apa pun dalam .envfile, jalankan php artisan config:cache & php artisan config:clearperintah. Ini akan berhasil.
Chandan Sharma
42

Wow. Menyedihkan. Itu karena saya memiliki nilai env dengan spasi di dalamnya, tidak dikelilingi tanda kutip

Ini

SITE_NAME=My website

Berubah menjadi ini

SITE_NAME="My website"

Diperbaiki. Saya pikir ini ada hubungannya dengan Laravel 5.2 yang sekarang memutakhirkan vlucas / phpdotenv dari 1.1.1 ke 2.1.0

andrewtweber
sumber
Pemikiran yang sama - sepertinya spasi menyebabkan masalah di .envbawah 5.2 sedangkan di 5.1 tidak.
thomthom
5
Dan ini adalah salah satu dari (banyak) gangguan saya dengan Laravel: ia memiliki kebiasaan terkadang diam-diam mengabaikan dan menerima berbagai konfigurasi dan / atau jenis kesalahan lainnya, tanpa indikasi ada yang salah. Mengingat, ini mungkin merupakan "fitur" dari phpdotenv, tetapi Laravel masih tahu ada .envfile yang perlu disertakan, dan itu tidak berhasil, tetapi tidak repot-repot memberi tahu siapa pun.
dKen
2
Aku sudah menghabiskan berjam-jam untuk sesuatu yang sangat konyol. Terima kasih telah menghentikan saya membuang lebih banyak!
Jenski
30

Bagi saya ini telah berhasil dalam urutan ini:

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

Dan saya sudah mencoba semua yang lain tanpa hasil.

TrOnNe
sumber
2
Pesanan ini menyelesaikan masalah saya setelah beberapa jam melakukan debug.
Minion
Menyelamatkan hidupku. Tks. Tapi aku tidak mengerti kenapa.
Mateus Galasso
pesanan ini menyelamatkan saya. Terima kasih
Asad ullah
Terima kasih orang asing yang baik hati, ini berhasil!
Eduardo
Jika Anda mendapatkan $ 1 setiap kali saya mendapatkan jawaban ini, Anda sudah menjadi kaya. Terima kasih!
Altin
26

Saya memiliki masalah serupa di saya config/services.phpdan saya pecahkan menggunakan perintah config cleardan optimize:

php artisan config:clear
php artisan optimize
Deric Lima
sumber
25

Bagi saya yang berikut ini berhasil

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear
beatusfk.dll
sumber
18

jalankan ini:

php artisan config:clear
php artisan cache:clear

kemudian
php artisan config:cache

Ganesh K
sumber
12

Saya memiliki masalah yang sama di lingkungan lokal, saya menyelesaikannya dengan

  1. php artisan config: jelas
  2. php artisan config: cache
  3. dan kemudian membatalkan perintah php artisan serve, dan restart lagi.
jay_mziray
sumber
12

Anda dapat menyelesaikan masalah dengan rekomendasi berikut

Rekomendasi 1:

Anda harus menggunakan file .env melalui file konfigurasi, artinya Anda diminta untuk membaca file .env dari file konfigurasi (seperti /config/app.php atau /config/database.php), kemudian Anda dapat menggunakan konfigurasi tersebut. file dari lokasi mana pun dalam proyek Anda.

Rekomendasi 2: Tetapkan nilai env Anda dalam tanda petik ganda

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

Rekomendasi 3: Pertahankan urutan perintah berikut setelah mengubah konfigurasi atau nilai env.

 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

Rekomendasi 4: Jika sintaks1 tidak berfungsi, Anda dapat mencoba sintaksx2 lain

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

Rekomendasi 5: Ketika jumlah pengguna Anda tinggi / lebih, maka Anda harus meningkatkan ukuran memori terkait di konfigurasi server .

Rekomendasi 6: Tetapkan nilai kemungkinan default saat Anda membaca variabel .env.

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

Ketika Anda menjalankan perintah php artisan config:cachemaka itu akan menghapus semua envvariabel dan env()akan memberikan nilai null, coba jalankan perintah berikut dan boom di sana Anda env()lagi mulai menangkap semua envvariabel

php artisan config:clear
Shahrukh Anwar
sumber
Seperti sulap, ini berhasil untuk saya - jawaban yang bagus!
David Partyka
10

Saya melewatkan ini di petunjuk peningkatan:

Tambahkan opsi konfigurasi env ke app.phpfile konfigurasi Anda yang terlihat seperti berikut: 'env' => env('APP_ENV', 'production')

Menambahkan baris ini membuat .envfile lokal dibaca dengan benar.

dKen
sumber
1
Saya kira saya mendapat kesalahan yang sama, karena aplikasi saya adalah Laravel 4, kemudian ditingkatkan ke 5.0, lalu ke 5.1, dll. Mungkin melewatkan menambahkan nilai ini di app.php saya. Terima kasih telah menghemat banyak waktu saya. Berikut upvote!
Bruno P. Kinoshita
9

Kesederhanaan adalah kekuatannya:

php artisan config:cache

Anda akan menerima:

Cache konfigurasi dihapus!

Konfigurasi berhasil di-cache!

Adam Kozlowski
sumber
7

Hal yang sama terjadi jika: port ada di .env lokal Anda

sekali lagi tanda kutip ganda berhasil

APP_URL="http://localhost:8000"

lalu

php artisan config:clear
Stavros
sumber
5

hapus cache menggunakan:

    php artisan config:clear
    php artisan config:cache
Diego Santa Cruz Mendezú
sumber
4

Juga tambahan untuk apa yang disarankan @andrewtweber memastikan bahwa Anda tidak memiliki spasi antara KEY = dan nilai kecuali jika di antara tanda kutip

file .env misalnya:

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

untuk:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...
Waqleh
sumber
3

Saya mengalami masalah yang sama ini di lokal saya, dan saya telah mencoba semua jawaban di sini tetapi tidak berhasil. Hanya ini yang berhasil untuk saya, php artisan config:cleardan restart server. Bekerja seperti pesona!

Dexter Bengil
sumber
4
@RameshMhet coba php artisan config:cache, php artisan config:clearlaluphp artisan cache:clear
Dexter Bengil
2

Saya memecahkan masalah ini menghasilkan kunci baru menggunakan perintah: php artisan key:generate

Angel Prieto
sumber
2

jika Anda memang memanggil config: cache selama pengembangan lokal, Anda dapat membatalkannya dengan menghapus file bootstrap / cache / config.php. dan ini bekerja untukku.

Payal Pandav
sumber
2

jika Anda memang memanggil config: cache selama pengembangan lokal, Anda dapat membatalkannya dengan menghapus file bootstrap / cache / config.php. dan ini bekerja untukku.

@Payal Pandav sudah memberikan komentar di atas.

Saya ingin memberi tahu solusi sederhana. Cukup edit file config.php di folder bootstrap / cache /. Dan ubah kredensial. Ini berhasil untuk saya. Harap jangan hapus file ini karena ini mungkin berisi data penting lainnya di lingkungan produksi.

Daya Satheesh
sumber
2

Dalam kasus saya, laravel 5.7 env('APP_URL')tidak berfungsi tetapi config('app.url')berfungsi. Jika saya menambahkan variabel baru ke envdan ke konfigurasi - ini tidak berfungsi - tetapi setelah php artisan config:cacheitu mulai berfungsi.

Kamil Kiełczewski
sumber
3
Jika Anda berada di lingkungan pengembangan, Anda tidak boleh menyimpan konfigurasi dan rute Anda ke dalam cache. Untuk menghapus semua cache Anda dapat menggunakan:php artisan optimize:clear
Zohaib
@ZohaibHassan Bagaimana cara mematikan cache untuk konfigurasi dan rute pada lingkungan dev?
Kamil Kiełczewski
1
Perintah di atas akan mematikan 1. rute cache, 2 cache konfigurasi, 3. menghapus tampilan 4. menghapus file yang dioptimalkan 5. menghapus cache jika ada
Zohaib
1
Untuk konfigurasi saja, Anda dapat menggunakannya php artisan config:clearuntuk menghapus cache konfigurasi dan tidak akan menghasilkan lagi dan ketika Anda melanjutkan produksi, Anda dapat menjalankan php artisan config:cachecache konfigurasi Anda
Zohaib
1

Jika Anda menjalankan php artisan config:cacheperintah ini di konsol maka itu akan menyimpan semua konten file .env di cache, setelah perintah ini jika Anda menambahkan konten apa pun ke file .env, itu tidak akan tersedia sampai Anda menjalankan php artisan config:clearperintah

Chandrakant Ganji
sumber
1

Saya sering menghadapi masalah yang sama selama perkembangan larva. beberapa kali env berhenti bekerja dan tidak mengembalikan nilai apa pun. alasan itu mungkin berbeda, tergantung pada situasi Anda. tetapi dalam kasus saya beberapa hari yang lalu saya hanya lari

 PHP artisan::config:clear

jadi berhati-hatilah menggunakan perintah ini. karena itu akan menghapus semua data konfigurasi dari cache-nya. jadi setelah itu, tidak akan mengembalikan nilai apa pun. Jadi dalam situasi ini, Anda perlu menggunakan ini terlebih dahulu jika Anda telah menjalankan perintah PHP artisan config :: clear .

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!
pankaj kumar
sumber
1

Saya mengalami ini. Alasannya adalah apache (pengguna www-data) tidak dapat membaca .env karena izin file. Jadi saya mengubah izin file untuk memastikan bahwa server (apache) telah membaca izin ke file tersebut. Hanya itu dan boom, semuanya berfungsi sekarang!
Pembaruan:
Cara melakukan ini bervariasi, tergantung pada siapa yang memiliki file .env, tetapi dengan asumsi itu milik www-datagrup Apache , Anda dapat melakukan ini:

sudo chmod g+r .env

Modifikasi itu tergantung pada struktur izin Anda.

gthuo
sumber
So i changed the file permissions to ensure that the server (apache) had read permissions to the file.ini sebenarnya pendekatan yang salah. Anda harus memperbaiki konfigurasi apaxhe sehingga melayani situs tertentu ini sebagai pemilik yang memiliki file-file ini
Marcin Orlowski
0

Saya membuat kesalahan dengan melakukan dd / die / dump di file index.php file. Ini menyebabkan sistem tidak membuat ulang konfigurasi.

Hanya melakukan dump dalam file tampilan akan dilakukan. Perubahan pada .envpembaruan file secara instan.

Bing Han
sumber
0

Saya punya masalah dengan ini. Tampaknya ini adalah masalah izin file di suatu tempat di aplikasi - bukan file .env.

Saya harus - menghentikan buruh pelabuhan saya - menggunakan chown untuk mengatur hak kepemilikan kepada pengguna saya sendiri untuk keseluruhan proyek - mulai buruh pelabuhan lagi

Kali ini berhasil.

thephper
sumber
-1

Mencoba hampir semua hal di atas. Akhirnya melakukan

chmod 666 .env

yang berhasil. Masalah ini tampaknya terus muncul di aplikasi yang saya warisi, namun, kali terakhir ini adalah setelah menambahkan .env.testing. Menjalankan Laravel 5.8

PeterG
sumber