Laravel 5.2 ไม่อ่านไฟล์ env


111

หลังจากอัปเกรดเป็น Laravel 5.2 จะไม่มี.envการอ่านค่าไฟล์ของฉันเลย ผมทำตามคำสั่งการอัพเกรด ; ไม่มีการเปลี่ยนแปลงไฟล์ config ของฉันเลยยกเว้น auth.php พวกเขาทั้งหมดทำงานได้ดีในเวอร์ชันก่อนหน้า 5.1.19

.env ประกอบด้วยค่าต่างๆเช่น

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php ประกอบด้วย

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

ฉันได้รับข้อผิดพลาดนี้:

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

เห็นได้ชัดว่าไม่ดึงการกำหนดค่า env ของฉัน สิ่งนี้ส่งผลกระทบต่อทุกไฟล์กำหนดค่าของฉันรวมถึงบุคคลที่สามเช่น bugsnag

ฉันยังพยายาม

php artisan config:clear
php artisan cache:clear

อัปเดต

พยายาม php artisan tinker

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

ฉันได้ลองติดตั้ง Laravel 5.2 ใหม่แล้ว โดยทั่วไปฉันคัดลอกเฉพาะในappโฟลเดอร์ของฉัน ไม่รวมแพ็คเกจนักแต่งเพลงเพิ่มเติม ยังคงมีปัญหาเดิม ฉันมีโปรเจ็กต์ Laravel 5.2 อื่น ๆ บนเซิร์ฟเวอร์เดียวกันที่ทำงานได้ดี


1
แน่ใจหรือว่าไฟล์. env มีชื่อว่า. env เท่านั้น? ไม่ใช่. env.example?
James Elliott

Andrew คุณกำลังแก้ไขไฟล์. env โดยใช้อินเทอร์เฟซ forge หรืออัปโหลด?
Mark Davidson

@JamesElliott ใช่แล้ว.env
andrewtweber

1
หรือคุณใช้งานในพื้นที่ หากการทำงานของคุณภายใต้ช่างฝีมือคุณต้องเริ่มต้นใหม่ในกรณีที่อาจเป็นเช่นนั้น
Mark Davidson

@MarkDavidson แก้ไขผ่าน vi ในบรรทัดคำสั่งและไม่มีบนเซิร์ฟเวอร์เต็ม
andrewtweber

คำตอบ:


92

จากบันทึกการอัพเกรด Laravel 5.2 อย่างเป็นทางการ:

หากคุณกำลังใช้config:cacheคำสั่งระหว่างการปรับใช้คุณ ต้องแน่ใจว่าคุณกำลังเรียกใช้envฟังก์ชันจากภายในไฟล์คอนฟิกูเรชันของคุณเท่านั้นไม่ใช่จากที่อื่นในแอปพลิเคชันของคุณ

หากคุณกำลังโทรenvจากภายในแอปพลิเคชันของคุณขอแนะนำอย่างยิ่งให้คุณเพิ่มค่าการกำหนดค่าที่เหมาะสมลงในไฟล์การกำหนดค่าของคุณและโทรenvจากตำแหน่งนั้นแทนเพื่อให้คุณสามารถแปลงการenvโทรเป็นการconfigโทรได้

อ้างอิง: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cacheแก้ไขให้ฉัน - ไม่มีอะไรช่วยอีกแล้ว ไม่ได้php artisan config:clear- ขอบคุณ!
kair

36
Laravel 5.3 php artisan config:clearเป็นสิ่งเดียวที่ใช้ได้ผลสำหรับฉัน
Peon

9
Laravel 5.4 - ติดตั้งบน VPS: php artisan config:clearใช้ได้ผลสำหรับฉัน ฉันไม่ได้ทำ config: cache มาก่อนดังนั้นมันจึงดูแปลก ๆ นิดหน่อยที่ฉันต้องล้างแคช
อันโตนิโอ


ตรวจสอบให้แน่ใจว่าคุณกำลังแก้ไข.envแทน.env.exampleไฟล์
Connor Leech

85

หาก.envตัวแปรใด ๆ ของคุณมีช่องว่างให้ตรวจสอบว่าคุณได้ใส่เครื่องหมายอัญประกาศคู่ ตัวอย่างเช่น:

SITE_NAME="My website"

อย่าลืมล้างแคชก่อนทดสอบ:

php artisan config:cache
php artisan config:clear

ใช่มันใช้งานได้ หลังจากเปลี่ยนค่าใด ๆ ใน.envไฟล์ให้รันphp artisan config:cache & php artisan config:clearคำสั่ง มันจะทำงาน.
Chandan Sharma

42

ว้าว. ความเศร้าโศกที่ดี เป็นเพราะฉันมีค่า env ที่มีช่องว่างอยู่ไม่ได้ล้อมรอบด้วยเครื่องหมายคำพูด

นี้

SITE_NAME=My website

เปลี่ยนเป็นสิ่งนี้

SITE_NAME="My website"

ซ่อมมัน. ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับ Laravel 5.2 ตอนนี้อัปเกรดvlucas / phpdotenvจาก 1.1.1 เป็น 2.1.0


คิดเหมือนกัน - ดูเหมือนว่าช่องว่างทำให้เกิดปัญหา.envภายใต้ 5.2 โดยที่ 5.1 ไม่ได้
58

5
และนี่เป็นหนึ่งในบักแบร์ (หลายตัว) ของฉันที่มี Laravel: มันมีนิสัยที่บางครั้งก็เพิกเฉยและยอมรับการกำหนดค่าและ / หรือข้อผิดพลาดประเภทอื่น ๆ โดยไม่มีข้อบ่งชี้ว่ามีอะไรผิดพลาด ระบุว่านี่อาจเป็น "คุณลักษณะ" phpdotenvแต่ Laravel ยังคงทราบดีว่ามี.envไฟล์ที่ต้องรวมไว้และไฟล์นั้นไม่ประสบความสำเร็จ แต่ไม่ต้องกังวลที่จะบอกใคร
dKen

2
ฉันเสียเวลาไปหลายชั่วโมงแล้วกับบางสิ่งที่โง่เขลา ขอบคุณที่หยุดฉันเสียอีก!
Jenski

30

สำหรับฉันมันได้ผลตามลำดับนี้:

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

และฉันพยายามที่เหลือทั้งหมดโดยไม่มีโชค


2
คำสั่งซื้อนี้ช่วยแก้ปัญหาของฉันได้หลังจากแก้ไขข้อบกพร่องไม่กี่ชั่วโมง
Minion

ช่วยชีวิตฉันไว้. Tks. แต่ id ไม่เข้าใจว่าทำไม
Mateus Galasso

คำสั่งซื้อนี้ช่วยฉันได้ ขอบคุณ
Asad ullah

ขอบคุณคนแปลกหน้าอินเทอร์เน็ตที่ทำให้สำเร็จ!
Eduardo

หากคุณได้รับ $ 1 ทุกครั้งที่ฉันได้รับคำตอบนี้คุณจะรวยอยู่แล้ว ขอบคุณ!
Altin

26

ฉันมีปัญหาที่คล้ายกันในของฉันconfig/services.phpและฉันแก้ไขโดยใช้config clearและoptimizeคำสั่ง:

php artisan config:clear
php artisan optimize

26

สำหรับฉันการทำงานต่อไปนี้

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


13

เมื่อคุณยิงคำสั่งphp artisan config:cacheมันจะล้างenvตัวแปรทั้งหมดและenv()จะให้ค่า null ลองรันคำสั่งต่อไปนี้และบูมที่นั่นenv()อีกครั้งคุณจะเริ่มจับenvตัวแปรทั้งหมด

php artisan config:clear

เหมือนเวทมนตร์สิ่งนี้ใช้ได้ผลสำหรับฉัน - คำตอบที่ดี!
David Partyka

12

ฉันมีปัญหาเดียวกันกับสภาพแวดล้อมในท้องถิ่นฉันแก้ไขโดย

  1. php artisan config: ชัดเจน
  2. php ช่างศิลป์ config: cache
  3. จากนั้นยกเลิกคำสั่ง php artisan serve แล้วรีสตาร์ทอีกครั้ง

12

คุณสามารถแก้ปัญหาได้ตามคำแนะนำต่อไปนี้

คำแนะนำ 1:

คุณต้องใช้ไฟล์. env ผ่านไฟล์คอนฟิกูเรชันซึ่งหมายความว่าคุณจำเป็นต้องอ่านไฟล์. env จากไฟล์คอนฟิกูเรชัน (เช่น /config/app.php หรือ /config/database.php) จากนั้นคุณสามารถใช้การกำหนดค่า ไฟล์จากตำแหน่งใดก็ได้ในโครงการของคุณ

คำแนะนำ 2: ตั้งค่า env ของคุณภายในใบเสนอราคาคู่

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

คำแนะนำ 3:รักษาลำดับคำสั่งต่อไปนี้หลังจากเปลี่ยนคอนฟิกูเรชันหรือค่า 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

คำแนะนำ 4: เมื่อ syntax1 ไม่ทำงานคุณสามารถลองใช้ syntax2 อื่นได้

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

คำแนะนำที่ 5:เมื่อจำนวนของผู้ใช้คือสูง / อื่น ๆแล้วคุณจะต้องเพิ่มขนาดหน่วยความจำที่เกี่ยวข้องกันในการกำหนดค่าเซิร์ฟเวอร์

คำแนะนำ 6:ตั้งค่าน่าจะเป็นเริ่มต้นเมื่อคุณกำลังอ่านตัวแปร. env

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

10

ฉันพลาดสิ่งนี้ในคำแนะนำการอัพเกรด:

เพิ่มอ็อพชันคอนฟิกูเรชัน env ให้กับapp.phpไฟล์คอนฟิกูเรชันของคุณที่มีลักษณะดังต่อไปนี้: 'env' => env('APP_ENV', 'production')

การเพิ่มบรรทัดนี้ทำให้.envไฟล์ในเครื่องอ่านได้อย่างถูกต้อง


1
ฉันเดาว่าฉันมีข้อผิดพลาดเดียวกันเนื่องจากแอปของฉันคือ Laravel 4 จากนั้นอัปเกรดเป็น 5.0 จากนั้นเป็น 5.1 เป็นต้นอาจจะพลาดการเพิ่มค่านี้ใน app.php ของฉัน ขอบคุณที่ช่วยฉันได้มาก นี่คือการโหวตเพิ่ม!
Bruno P. Kinoshita

9

ความเรียบง่ายคือพลัง:

php artisan config:cache

คุณจะได้รับ:

ล้างแคชการกำหนดค่าแล้ว!

แคชการกำหนดค่าเรียบร้อยแล้ว!


7

สิ่งเดียวกันเกิดขึ้นเมื่อ: พอร์ตอยู่ใน. env ท้องถิ่นของคุณ

อีกครั้งคำพูดคู่ทำเคล็ดลับ

APP_URL="http://localhost:8000"

แล้ว

php artisan config:clear


4

เพิ่มเติมจากสิ่งที่ @andrewtweber แนะนำตรวจสอบให้แน่ใจว่าคุณไม่มีช่องว่างระหว่างKEY =และค่าเว้นแต่จะอยู่ระหว่างเครื่องหมายคำพูด

ไฟล์. envเช่น:

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

ถึง:

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

3

ฉันพบปัญหาเดียวกันนี้ในพื้นที่ของฉันและฉันได้ลองคำตอบทั้งหมดที่นี่แล้ว แต่ก็ไม่เป็นประโยชน์ เพียงแค่นี้ทำงานสำหรับฉัน และphp artisan config:clear restart serverใช้งานได้เหมือนมีเสน่ห์!


4
@RameshMhetre ลองphp artisan config:cache, php artisan config:clearแล้วphp artisan cache:clear
Dexter Bengil


2

หากคุณเรียก config: cache ระหว่างการพัฒนาโลคัลคุณสามารถเลิกทำได้โดยการลบไฟล์ bootstrap / cache / config.php และนี่คืองานสำหรับฉัน


2

หากคุณเรียก config: cache ระหว่างการพัฒนาโลคัลคุณสามารถเลิกทำได้โดยการลบไฟล์ bootstrap / cache / config.php และนี่คืองานสำหรับฉัน

@Payal Pandav ได้แสดงความคิดเห็นไว้ข้างต้น

ฉันต้องการบอกวิธีแก้ปัญหาง่ายๆ เพียงแก้ไขไฟล์ config.php ในโฟลเดอร์ bootstrap / cache / และเปลี่ยนข้อมูลประจำตัว สิ่งนี้ได้ผลสำหรับฉัน โปรดอย่าลบไฟล์นี้เนื่องจากอาจมีข้อมูลสำคัญอื่น ๆ ในสภาพแวดล้อมการใช้งานจริง


2

ในกรณีของฉัน laravel 5.7 env('APP_URL')ไม่ทำงาน แต่ใช้config('app.url')งานได้ ถ้าฉันเพิ่มตัวแปรใหม่ไปenvยัง config - มันไม่ทำงาน - แต่หลังจากที่php artisan config:cacheมันเริ่มทำงาน


3
หากคุณอยู่ในสภาพแวดล้อมการพัฒนาคุณไม่ควรแคชการกำหนดค่าและเส้นทางของคุณ ในการลบแคชทั้งหมดคุณสามารถใช้ได้:php artisan optimize:clear
Zohaib

@ZohaibHassan จะปิดแคชสำหรับ config และเส้นทางในสภาพแวดล้อม dev ได้อย่างไร?
Kamil Kiełczewski

1
คำสั่งด้านบนจะปิด 1. เส้นทางแคช 2 แคชกำหนดค่า 3. มุมมองที่ชัดเจน 4. ล้างไฟล์ที่ปรับให้เหมาะสมแล้ว 5. ล้างแคชถ้ามี
Zohaib

1
สำหรับ config เท่านั้นที่คุณสามารถใช้php artisan config:clearมันจะล้างphp artisan config:cacheแคชการกำหนดค่าของคุณและจะไม่สร้างขึ้นอีกและเมื่อคุณดำเนินการผลิตคุณสามารถเรียกใช้เพื่อแคชการกำหนดค่าของคุณได้
Zohaib

1

หากคุณรันphp artisan config:cacheคำสั่งนี้บนคอนโซลคำสั่งนี้จะเก็บเนื้อหาไฟล์. env ทั้งหมดไว้ในแคชหลังจากคำสั่งนี้หากคุณผนวกเนื้อหาใด ๆ ลงในไฟล์. env คำสั่งนั้นจะไม่สามารถใช้งานได้จนกว่าคุณจะเรียกใช้php artisan config:clearคำสั่ง


1

ฉันต้องเผชิญกับปัญหาเดียวกันหลายครั้งในระหว่างการพัฒนาตัวอ่อน บางครั้ง env หยุดทำงานและไม่คืนค่าใด ๆ เหตุผลนั้นอาจแตกต่างกันขึ้นอยู่กับสถานการณ์ของคุณ แต่ในกรณีของฉันไม่กี่วันที่ผ่านมาฉันเพิ่งเรียกใช้

 PHP artisan::config:clear

ดังนั้นโปรดใช้คำสั่งนี้อย่างระมัดระวัง เนื่องจากจะล้างข้อมูลการกำหนดค่าทั้งหมดในรูปแบบแคช ดังนั้นหลังจากนั้นจะไม่คืนค่าใด ๆ ดังนั้นในสถานการณ์นี้คุณต้องใช้สิ่งนี้ก่อนหากคุณเรียกใช้ คำสั่งPHP artisan config :: clear

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

1

ฉันมีประสบการณ์นี้ สาเหตุคือ apache (ผู้ใช้ www-data) ไม่สามารถอ่าน. env เนื่องจากสิทธิ์ของไฟล์ ดังนั้นฉันจึงเปลี่ยนสิทธิ์ของไฟล์เพื่อให้แน่ใจว่าเซิร์ฟเวอร์ (apache) มีสิทธิ์ในการอ่านไฟล์ เพียงแค่นั้นและบูมก็ทำงานได้แล้ว!
อัปเดต:
วิธีการทำจะแตกต่างกันไปขึ้นอยู่กับว่าใครเป็นเจ้าของไฟล์. env แต่สมมติว่าเป็นของwww-dataกลุ่มApache คุณสามารถทำได้:

sudo chmod g+r .env

แก้ไขขึ้นอยู่กับโครงสร้างการอนุญาตของคุณ


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.นี่เป็นแนวทางที่ไม่ถูกต้อง คุณควรแก้ไข apaxhe config เพื่อให้เว็บไซต์นี้เป็นเจ้าของที่เป็นเจ้าของไฟล์เหล่านี้
Marcin Orlowski

0

ฉันทำผิดโดยทำ dd / die / dump ในไฟล์ index.phpไฟล์ ซึ่งทำให้ระบบไม่สามารถสร้างการกำหนดค่าใหม่ได้

เพียงแค่ถ่ายโอนข้อมูลในไฟล์ดูก็จะทำ การเปลี่ยนแปลงในการ.envอัปเดตไฟล์ทันที


0

ฉันมีปัญหากับเรื่องนี้ ดูเหมือนว่าจะเป็นปัญหาการอนุญาตไฟล์ที่ใดที่หนึ่งในแอปไม่ใช่ไฟล์. env

ฉันต้อง - หยุดนักเทียบท่า - ใช้ chown เพื่อตั้งค่าสิทธิ์การเป็นเจ้าของให้กับผู้ใช้ของฉันเองสำหรับทั้งโครงการ - เริ่มนักเทียบท่าอีกครั้ง

คราวนี้มันได้ผล


-1

พยายามเกือบทั้งหมดข้างต้น จบลงด้วยการทำ

chmod 666 .env

ซึ่งได้ผล ปัญหานี้ดูเหมือนจะยังคงครอบตัดอยู่ในแอปที่ฉันได้รับมาอย่างไรก็ตามครั้งล่าสุดนี้เกิดขึ้นหลังจากเพิ่ม. env.testing วิ่ง Laravel 5.8

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.