Laravel 5.2 không đọc tệp env


110

Sau khi nâng cấp lên Laravel 5.2, không có .envgiá trị tệp nào của tôi được đọc. Tôi đã làm theo hướng dẫn nâng cấp ; không có tệp cấu hình nào của tôi bị thay đổi ngoại trừ auth.php. Tất cả chúng đều hoạt động tốt trong phiên bản trước, 5.1.19

.env chứa các giá trị như

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php chứa đựng

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

Tôi gặp lỗi này:

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

Rõ ràng là không kéo trong cấu hình env của tôi. Điều này ảnh hưởng đến từng tệp cấu hình của tôi, bao gồm cả bên thứ ba, chẳng hạn như bugnag.

Tôi cũng đã thử

php artisan config:clear
php artisan cache:clear

Cập nhật

Cố gắng php artisan tinker

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

Tôi đã thử cài đặt một bản sao mới của Laravel 5.2. Về cơ bản tôi chỉ sao chép trong appthư mục của mình ; không có gói nhà soạn nhạc bổ sung nào được bao gồm. Vẫn gặp vấn đề tương tự. Tôi có các dự án Laravel 5.2 khác trên cùng một máy chủ đang hoạt động tốt.


1
Bạn có chắc chắn tệp .env chỉ được đặt tên là .env không? Không phải .env.example?
James Elliott

Andrew bạn đang chỉnh sửa tệp .env bằng giao diện giả mạo hay tải nó lên?
Mark Davidson

@JamesElliott vâng, đúng rồi.env
andrewtweber

1
Hay bạn đang chạy cục bộ này? Nếu bạn đang chạy dưới chế độ giao bóng thủ công, bạn cần phải khởi động lại nó đề phòng trường hợp đó xảy ra.
Mark Davidson

@MarkDavidson chỉnh sửa nó thông qua vi trong dòng lệnh và không có nó trên máy chủ đầy đủ
andrewtweber

Câu trả lời:


91

Từ Ghi chú nâng cấp Laravel 5.2 chính thức:

Nếu bạn đang sử dụng config:cachelệnh trong khi triển khai, bạn phải đảm bảo rằng bạn chỉ đang gọi envhàm từ bên trong tệp cấu hình của mình chứ không phải từ bất kỳ nơi nào khác trong ứng dụng của bạn.

Nếu bạn đang gọi envtừ trong ứng dụng của mình, bạn nên thêm các giá trị cấu hình thích hợp vào tệp cấu hình của mình và envthay vào đó hãy gọi từ vị trí đó, cho phép bạn chuyển đổi envcuộc gọi của mình thành configcuộc gọi.

Tham khảo: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cacheđã giải quyết nó cho tôi - không có gì khác đã giúp. Thậm chí không php artisan config:clear- cảm ơn!
kair

36
Laravel 5.3 php artisan config:clearlà điều duy nhất mà làm việc cho tôi
Peon

9
Laravel 5.4 - được triển khai trên VPS: php artisan config:clearphù hợp với tôi. Tôi đã không thực hiện config: cache trước đó nên có vẻ hơi lạ khi tôi phải xóa bộ nhớ cache.
Antonio


chắc chắn rằng bạn đang chỉnh sửa .envthay vì .env.exampletập tin
Connor Leech

84

Nếu bất kỳ .envbiến nào của bạn chứa khoảng trắng, hãy đảm bảo bạn đặt chúng trong dấu ngoặc kép. Ví dụ:

SITE_NAME="My website"

Đừng quên xóa bộ nhớ cache của bạn trước khi thử nghiệm:

php artisan config:cache
php artisan config:clear

Có Nó đang hoạt động. Sau khi thay đổi bất kỳ giá trị nào trong .envtệp, hãy chạy php artisan config:cache & php artisan config:clearlệnh. Nó sẽ hoạt động.
Chandan Sharma

41

Chà. Xin chào. Đó là bởi vì tôi đã có một giá trị env với một khoảng trắng trong đó, không được bao quanh bởi dấu ngoặc kép

Điều này

SITE_NAME=My website

Đã thay đổi thành này

SITE_NAME="My website"

Đã sửa nó. Tôi nghĩ điều này phải làm với Laravel 5.2 hiện đang nâng cấp vlucas / phpdotenv từ 1.1.1 lên 2.1.0


Cùng suy nghĩ - có vẻ như khoảng trắng gây ra vấn đề trong phần .envdưới 5.2 trong khi ở 5.1 thì không.
thomthom

5
Và đây là một trong những lỗi (nhiều) lỗi của tôi với Laravel: nó có thói quen đôi khi im lặng bỏ qua và chấp nhận nhiều loại cấu hình và / hoặc các loại lỗi khác, mà không có dấu hiệu nào cho thấy đã xảy ra lỗi. Cho rằng, đây có thể là một "tính năng" của phpdotenv, nhưng Laravel vẫn biết rằng có một .envtệp cần được đưa vào và nó đã không thành công, nhưng không buồn nói với ai.
dKen

2
Tôi đã lãng phí hàng giờ cho một việc ngớ ngẩn. Cảm ơn bạn đã ngăn tôi lãng phí nhiều hơn!
Jenski

28

Đối với tôi, nó đã hoạt động theo thứ tự này:

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

Và tôi đã thử tất cả các phần còn lại mà không gặp may.


2
Đơn đặt hàng này đã giải quyết vấn đề của tôi sau vài giờ gỡ lỗi.
Minion

Cứu cuộc đời tôi. Tks. Nhưng id không hiểu tại sao.
Mateus Galasso

đơn đặt hàng này đã cứu tôi. Cảm ơn
Asad ullah

Cảm ơn người lạ tốt bụng trên internet, điều này đã hoàn thành!
Eduardo

Nếu bạn nhận được 1 đô la mỗi khi tôi trả lời câu trả lời này, bạn đã giàu rồi. Cảm ơn!
Altin

25

Tôi đã gặp sự cố tương tự trong của mình config/services.phpvà tôi đã giải quyết bằng cách sử dụng config clearoptimizecác lệnh:

php artisan config:clear
php artisan optimize

24

Đối với tôi những điều sau đây đã hiệu quả

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

17

chạy cái này:

php artisan config:clear
php artisan cache:clear

sau đó
php artisan config:cache


11

Tôi đã gặp vấn đề tương tự về môi trường địa phương, tôi đã giải quyết bằng cách

  1. php Artian config: clear
  2. php Artian config: cache
  3. và sau đó hủy lệnh phục vụ nghệ nhân php, và khởi động lại.

11

Bạn có thể giải quyết vấn đề theo đề xuất sau

Khuyến nghị 1:

Bạn phải sử dụng tệp .env thông qua các tệp cấu hình, nghĩa là bạn được yêu cầu đọc tệp .env từ các tệp cấu hình (chẳng hạn như /config/app.php hoặc /config/database.php), sau đó bạn có thể sử dụng cấu hình tệp từ bất kỳ vị trí nào trong dự án của bạn.

Đề xuất 2: Đặt giá trị env của bạn trong dấu ngoặc kép

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

Khuyến nghị 3: Duy trì chuỗi lệnh sau sau khi thay đổi bất kỳ cấu hình hoặc giá trị env nào.

 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

Khuyến nghị 4: Khi cú pháp1 không hoạt động thì bạn có thể thử cú pháp khác2

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

Khuyến nghị 5: Khi số lượng người dùng của bạn cao / nhiều hơn thì bạn phải tăng kích thước bộ nhớ liên quan trong cấu hình máy chủ .

Đề xuất 6: Đặt giá trị có thể xảy ra mặc định khi bạn đang đọc biến .env.

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

11

Khi bạn kích hoạt lệnh php artisan config:cachethì nó sẽ xóa tất cả các envbiến và env()sẽ cung cấp giá trị null, hãy thử chạy lệnh sau và bùng nổ ở đó, bạn env()lại bắt đầu bắt tất cả các envbiến

php artisan config:clear

Giống như phép thuật điều này đã làm việc cho tôi - câu trả lời tuyệt vời!
David Partyka

9

Tôi đã bỏ lỡ điều này trong hướng dẫn nâng cấp:

Thêm tùy chọn cấu hình env vào app.phptệp cấu hình của bạn trông giống như sau: 'env' => env('APP_ENV', 'production')

Thêm dòng này .envđể tệp cục bộ được đọc chính xác.


1
Tôi đoán mình cũng gặp lỗi tương tự, vì ứng dụng của tôi là Laravel 4, sau đó được nâng cấp lên 5.0, rồi lên 5.1, v.v. Có lẽ đã bỏ lỡ việc thêm giá trị này trong app.php của tôi. Cảm ơn vì đã tiết kiệm cho tôi rất nhiều thời gian. Đây là một ủng hộ!
Bruno P. Kinoshita

8

Sự đơn giản là sức mạnh:

php artisan config:cache

Bạn sẽ nhận:

Đã xóa bộ nhớ cache cấu hình!

Cấu hình được lưu trữ thành công!


6

Điều tương tự cũng xảy ra khi: cổng nằm trong .env cục bộ của bạn

một lần nữa dấu ngoặc kép thực hiện thủ thuật

APP_URL="http://localhost:8000"

và sau đó

php artisan config:clear


4

Ngoài ra, bổ sung cho những gì @andrewtweber đề xuất, hãy đảm bảo rằng bạn không có khoảng cách giữa KEY =giá trị trừ khi nó nằm giữa dấu ngoặc kép

.env tệp ví dụ:

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

đến:

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

3

Tôi gặp phải vấn đề tương tự này trên địa chỉ của mình và tôi đã thử tất cả các câu trả lời ở đây nhưng vô ích. Chỉ điều này làm việc cho tôi, php artisan config:clearrestart server. Hoạt động như một sự quyến rũ!


4
@RameshMhetre hãy thử php artisan config:cache, php artisan config:clearsau đóphp artisan cache:clear
Dexter Bengil

2

Tôi đã giải quyết vấn đề này bằng cách tạo khóa mới bằng lệnh: php artisan key:generate


2

nếu bạn đã gọi config: cache trong quá trình phát triển cục bộ, bạn có thể hoàn tác việc này bằng cách xóa tệp bootstrap / cache / config.php. và đây là công việc đối với tôi.


2

nếu bạn đã gọi config: cache trong quá trình phát triển cục bộ, bạn có thể hoàn tác việc này bằng cách xóa tệp bootstrap / cache / config.php. và đây là công việc đối với tôi.

@Payal Pandav đã đưa ra nhận xét ở trên.

Tôi muốn kể một cách giải quyết đơn giản. Chỉ cần chỉnh sửa tệp config.php trong thư mục bootstrap / cache /. Và thay đổi thông tin đăng nhập. Điều này đã làm việc cho tôi. Vui lòng không xóa tệp này vì tệp này có thể chứa dữ liệu quan trọng khác trong môi trường sản xuất.


2

Trong trường hợp của tôi, laravel 5.7 env('APP_URL')không hoạt động nhưng config('app.url')hoạt động. Nếu tôi thêm biến mới vào envvà vào cấu hình - nó không hoạt động - nhưng sau khi php artisan config:cachebắt đầu nó hoạt động.


3
Nếu bạn đang ở trong môi trường phát triển, bạn không nên lưu cấu hình và các tuyến của mình vào bộ nhớ cache. Để loại bỏ tất cả bộ nhớ cache, bạn có thể sử dụng:php artisan optimize:clear
zohaib

@ZohaibHassan Làm cách nào để tắt bộ nhớ cache cho cấu hình và các tuyến trên môi trường nhà phát triển?
Kamil Kiełczewski

1
Trên lệnh sẽ tắt 1. Đường bộ nhớ cache, bộ nhớ cache 2 cấu hình, 3. quan điểm rõ ràng 4. file tối ưu hóa rõ ràng 5. rõ ràng bộ nhớ cache nếu có
zohaib

1
Đối với cấu hình duy nhất mà bạn có thể sử dụng php artisan config:clearnó sẽ xóa bộ nhớ cache cấu hình của bạn và sẽ không tạo ra một lần nữa và khi bạn đi vào sản xuất bạn có thể chạy php artisan config:cachebộ nhớ cache cấu hình của bạn
zohaib

1

Nếu bạn chạy php artisan config:cachelệnh này trên bảng điều khiển thì nó sẽ lưu trữ tất cả nội dung tệp .env trong bộ nhớ cache, sau lệnh này nếu bạn thêm bất kỳ nội dung nào vào tệp .env thì nó sẽ không có sẵn cho đến khi bạn chạy php artisan config:clearlệnh


1

Tôi phải đối mặt với vấn đề tương tự nhiều lần trong quá trình phát triển của ấu trùng. một số lần env ngừng hoạt động và không trả về bất kỳ giá trị nào. lý do đó có thể khác nhau tùy thuộc vào tình hình của bạn. nhưng trong trường hợp của tôi một vài ngày trước, tôi chỉ chạy

 PHP artisan::config:clear

vì vậy hãy cẩn thận khi sử dụng lệnh này. vì nó sẽ xóa tất cả dữ liệu cấu hình tạo thành bộ nhớ cache của nó. vì vậy sau đó, nó sẽ không trả về bất kỳ giá trị nào. Vì vậy, trong tình huống này, bạn cần phải sử dụng lệnh này trước tiên nếu bạn đã chạy lệnh config :: clear của PHP .

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

1

Tôi đã trải nghiệm điều này. Lý do là apache (dữ liệu www của người dùng) không thể đọc .env do quyền đối với tệp. Vì vậy, tôi đã thay đổi quyền đối với tệp để đảm bảo rằng máy chủ (apache) có quyền đọc đối với tệp. Chỉ vậy và bùng nổ, tất cả đã hoạt động ngay bây giờ!
Cập nhật:
Cách thực hiện việc này khác nhau, tùy thuộc vào người sở hữu tệp .env, nhưng giả sử nó thuộc www-datanhóm Apache , bạn có thể thực hiện điều này:

sudo chmod g+r .env

Sửa đổi nó tùy thuộc vào cấu trúc quyền của bạn.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.đây thực sự là cách tiếp cận sai. Bạn nên sửa cấu hình apaxhe để nó phục vụ trang web cụ thể này với tư cách là chủ sở hữu sở hữu những tệp này
Marcin Orlowski

0

Tôi đã mắc sai lầm khi thực hiện dd / die / dump trong index.php tệp. Điều này khiến hệ thống không tạo lại cấu hình.

Chỉ cần thực hiện kết xuất trong các tệp xem sẽ làm. Các thay đổi để .envcập nhật tệp ngay lập tức.


0

Tôi đã có một số vấn đề với điều này. Có vẻ như đây là vấn đề về quyền đối với tệp trong ứng dụng - không phải tệp .env.

Tôi đã phải - dừng docker của mình - sử dụng chown để đặt quyền sở hữu cho người dùng của riêng tôi cho toàn bộ dự án - bắt đầu lại docker

Lần này nó đã hoạt động.


-1

Đã thử gần như tất cả những điều trên. Kết thúc làm

chmod 666 .env

đã hoạt động. Tuy nhiên, sự cố này dường như vẫn tiếp tục xảy ra trên ứng dụng mà tôi kế thừa, lần gần đây nhất là sau khi thêm .env.testing. Chạy Laravel 5.8

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.