Hata: laravel.log nasıl düzeltilir?


186

Laravel'de oldukça yeniyim ve aslında ilk projemi yaratmaya çalışıyorum. nedense bu hatayı almaya devam ediyorum (henüz kodlamaya başlamamıştım)

Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423

Bunun izinlerle ilgisi olduğunu okudum ama chmod -R 775 storagehiç yardımcı olmadı.

İzinler


Bu chmod komutunu çalıştırırken doğru dizinde olduğunuzdan emin misiniz? Chmod -R 755 / var / www / laravel / app / storage öğesini deneyin. Ayrıca, kullanıcı ve grup neye göre ayarlanmıştır? Ls -al / var / www / laravel / app / storage
Ryan LaB

aynı sonuçlar (Klasörün izinlerini göstermek için orijinal yazımı güncelledim)
FRR

: / bazı nedenlerden dolayı hala çalışmıyor. Daha önce bahsetmedim, ama vagrant kullanıyorum. www klasörüm bir sanal makinede (apache, php ve üzerinde çalışan her şey) çalışıyor. Bunun bir şeyle ilgisi olup olmadığından emin değilim ama her ihtimale karşı bahsettiğimi düşündüm. (Besteciyi kullanarak projemi vm ile oluşturuyorum)
FRR

13
777 önerenler, google bu ifadeyi deneyin: "production db_password filetype: env inurl: com"
Tarasovych

1
SELINUX'u devre dışı bırakmak benim için çalıştı.
Prakash P

Yanıtlar:


307

Asla bir dizini 777 olarak ayarlamayın . dizin sahipliğini değiştirmelisiniz. sahip olarak oturum açtığınız geçerli kullanıcıyı ve web sunucusu kullanıcısını (www-data, apache, ...) grup olarak ayarlayın. Bunu deneyebilirsiniz:

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache

daha sonra dizin iznini ayarlamak için şunu deneyin:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

Güncelleme:

Web sunucusu kullanıcı ve grubu web sunucunuza ve işletim sisteminize bağlıdır. web sunucusu kullanıcı ve grubunuzun ne olduğunu bulmak için aşağıdaki komutları kullanın. nginx kullanımı için:

ps aux|grep nginx|grep -v grep

apache kullanımı için:

ps aux | egrep '(apache|httpd)'


4
Teşekkürler! Kısaca şunları da yapabilirsiniz:sudo chown -R {your current user}:www-data storage bootstrap/cache
Ramesh Pareek

2
@RameshPareek Haklısın ama sadece daha açık olmak istedim;)
Hamid Parchami

1
Bu benim için işe yaramıyor. Sadece anladım chown: www-data: illegal group name. Dizini 777 olarak ayarlamak işe
Matt D

3
@MattD Mac'teki apache grubunun _wwwbunu deneyin sanırım sudo chgrp -R _www bootstrap/cache. bu yazıya bir göz
Hamid Parchami

3
Bu seçilen cevap olmalıdır,% 100 sistem yöneticilerinin gerçek sorunu çözmek için her şeye erişime izin vermemesi gerektiğini kabul eder.
HyperionX

134

Canlı sunucunuzdaki dizinler için asla 777 kullanmayın, ancak kendi makinenizde, bazen 775'ten fazlasını yapmamız gerekir, çünkü

chmod -R 775 storage

Anlamına geliyor

7 - Owner can write
7 - Group can write
5 - Others cannot write!

Web sunucunuz Vagrant olarak çalışmıyorsa, ona yazamaz, bu nedenle 2 seçeneğiniz vardır:

chmod -R 777 storage

veya grubu varsayarak web sunucusu kullanıcısı olarak değiştirin www-data:

chown -R vagrant:www-data storage

Zaten iyi ayarlanmış gibi benim durumda chmod gerek yoktu, Ancak Fedora 20 üzerinde gerekli:chown -R apache:apache laravelproject
misterjaytee

Samba / vagrant üzerinden klasörleri montaj sorunları yaşıyordu - chown -R vagrant:www-data storagebenim için yaptım, teşekkürler.
Lewis

1
chmod -R 777 depolama benim için çalıştı. Grubu değiştirmeyi denedim, ama almaya devam ettimwww-data: illegal group name
Matt D

57

Bu sorunu gidermek için, dizinin sahipliğini web sunucusunun kullandığı unix kullanıcısı olarak değiştirmeniz gerekir.

  1. VM'den çıkın
  2. Konsolu kullanarak senkronize edilen klasörünüze gidin (vagrant)
  3. sudo chown -R $ KULLANICI: www-veri depolama
  4. chmod -R 775 depolama

VM kullanıcısını kullanarak sanal makinede projeyi oluştursam da, klasör gerçek bilgisayardaki kullanıcıya aitti; yani, denerken

Şimdi çalışıyor.

Bu şeyi anlamama yardımcı olan herkese teşekkürler

DÜZENLE:

Aslında hala işe yaramıyordu, yine de bana "izin verilmedi" sorunu verdi.

İşte yaptığım, Vagrantfile'ımı şu şekilde değiştirdim:

config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]

Bunu yaptım ... ve ben KABUL EDİYORUM! Hala çalışmıyor ... laravel 5 ... günlük dosyasını yeniden adlandırdı, laravel yeni bir tane oluşturdu ... aynı hata
ied3vil

1
Homestead kullandığım için config.vm.synced_folder'ım yok, bu sorunu nasıl düzeltebilirim?
oleynikd

21
777 willy nilly kullanmamalısınız.
IIllIIll

Bir klasörde 777 kullanmayla ilgili bir sorun görmüyorum İçinde tam olarak ne olduğunu biliyorum (kukla bir örnek proje)
FRR

2
Bu kesinlikle kabul edilen cevap olmamalıdır. Bu korkunç. Asla 777 ayarlanmadı.
CGriffin

39

SELinux da olabilir. (Centos, RedHat)

Terminaldeki SElinux durumunu belirleyin:

$ sestatus

Durum etkinse, SElinux'u devre dışı bırakmak için komut yazın

$ setenforce Permissive

Veya bu komutu yürütebilirsiniz

$ sudo setenforce 0


6
Bu işe yarayan tek şey, lütfen ne yaptığını açıklayabilir misiniz?
hack4mer

2
@ hack4mer seLinux hakkında daha fazla bilgi okuyabilirsiniz. en.wikipedia.org/wiki/Security-Enhanced_Linux
Turan Zamanlı

şimdiye kadar gördüğüm garip şeyler, neden 6 saatten fazla aradıktan sonra cehennemde çalışıyor
Muhamad Yulianto

1
Benim için işe yarayan tek çözüm .. teşekkür ederim. Ancak sunucu her başlatıldığında sorun tekrar ortaya çıkıyor, sunucu yeniden başlatılmış olsa bile uygulamanın nasıl uygulanacağını biliyor musunuz?
Juan Angel

1
@JuanAngel hizmeti Kalıcı olarak devre dışı bırakmanız gerekir. editör vim / etc / sysconfig / selinux ile açın ve SELinux = zorlama yönergesini SELinux = devre dışı olarak değiştirin
Turan Zamanlı

32

Sen izinlerini ayarlamak gerekir storageve bootstrap/cache.

  • cd Laravel projenize.
  • sudo chmod -R 755 storage
  • sudo chmod -R 755 bootstrap/cache

755 işe yaramazsa 777'yi deneyebilirsiniz. 777 yine de güvenli değil!

Web sunucunuzun kurulumuna bağlı olarak, izinleriniz konusunda daha spesifik olabilir ve yalnızca web sunucusu kullanıcısına verebilirsiniz. WEB SERVER NAME Laravel file permissionsDaha fazla bilgi için Google .

Yazma sırasında bu Laravel 5.4 içindir


14

a ekle composer.json

"scripts": {
    "post-install-cmd": [
          "chgrp -R www-data storage bootstrap/cache",
          "chmod -R ug+rwx storage bootstrap/cache"
     ]
}

Sonra composer install


12

Aşağıdaki komutları sudoçalıştırın ve komutun başlangıcında sisteminize bağlı olarak ekleyebilirsiniz :

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 

1
Asla 777 kullanmayın. 777 izinleriyle, bağlantısı olan herkese bu izinlere sahip dosyalara veya dizinlere tam erişim izni verirsiniz. Kötü niyetli olarak da dahil olmak üzere, istedikleri şekilde değiştirebilirler. Birçok hesap hackleme olayı 777 izinden kaynaklanmaktadır.
Odyssee

8

Laravel bağlamındaki tüm Centos 7 kullanıcıları için Selinux'u devre dışı bırakmanıza gerek yoktur, sadece şu komutları çalıştırın:

yum install policycoreutils-python -y # might not be necessary, try the below first

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache

restorecon -Rv /var/www/html/ # this command is very important to, it's like a restart to apply the new rules

Son olarak, ana makinelerinizin, ips'lerinizin ve sanal ana makinelerinizin uzaktan erişim için doğru olduğundan emin olun.

Selinux'un root kullanıcılarına bile erişimi kısıtlaması amaçlanmıştır, bu nedenle en azından genel bir bakışta sadece gerekli şeylere erişilebilir, ekstra güvenlik, devre dışı bırakmak iyi bir uygulama değildir, Selinux'u öğrenmek için birçok bağlantı vardır, ancak bunun için gerekli bile değilse.


Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir. - Yorumdan
Patrick Mevzek

Bağlantı çok açık, böyle bir mekanizmaya gerek yok, hatta özellikle Laravel SELinux bağlamı için bir bölüm var. Düşüncelerinizin basit bir kuraldan biraz daha mantıkla desteklenmesi gerektiğini düşünüyorum. Bu arada, büyük olasılıkla% 99'u Selinux'u devre dışı bırakmak gibi kötü uygulamalara uymadan sorunları çözecek bir cevabı düşürdünüz.
Daniel Santos

Açık olmak ya da olmamak bir sorun değildir. Bu sitenin fikri, ilgili tüm bilgileri içermesidir, bu nedenle bir cevabı okuyarak hepsini alırız. Dış bağlantılar çürüyebilir ve daha sonra cevap değersiz hale gelebilir. Bu, stackoverflow.com/help/how-to-answer adresindeki yardım merkezinde açıklanmaktadır : "Dış kaynaklara bağlantılar teşvik edilir, ancak lütfen diğer kullanıcıların ne olduğu ve neden orada olduğu hakkında bir fikir sahibi olmaları için bağlantının çevresine bağlam ekleyin. . Her zaman hedef sitesi erişilemiyor veya kalıcı çevrimdışı duruma durumunda, önemli bir bağlantının en uygun kısmını alıntı. "
Patrick Mevzek

Sorunuz incelenmek üzere işaretlendi, hepsi bu. Ve alıntıladığım Yardım Merkezi'nde yazılanlarla çelişiyor. Sadece bağlantı içeren ve hiçbir açıklama içermeyen tüm yanıtlar indirilmez ve hatta kaldırılır. Açıklamanın ilgili kısmını burada vermek için cevabınızı düzenlemekten çekinmeyin. Ve kötü olduğunu düşündüğünüz tüm cevapları küçümsemekte özgürsünüz. Yorum linkinden cevabınızın kapatılmasını tavsiye etmede yalnız olmadığımı görebilirsiniz. Bir teknik yeterli olmadığı için teknik değerlerde değil.
Patrick Mevzek

Açıklık için teşekkürler, bu tür rehberlerin var olduğunu bilmiyordum ya da kayıt sürecinde kaynakları okumak için bir ipucu alsanız bile, hatırlamıyorum. Söyledikleriniz doğru olabilir, bağlantı çürümüş olabilir, ancak bir cevaba çaba göstermeden ulaşılabilir, ne olursa olsun, onu düzenleyeceğim.
Daniel Santos

6

Cmd kullanıyorsanız

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache

GUI kullanıyorsanız

İlk olarak projeye gidin ve depoya sağ tıklayın ve özellikleri kontrol edin ve İzinler sekmesine gidin

resim açıklamasını buraya girin

Aşağıdaki kodu kullanarak izinleri değiştirin

sudo chmod -R 777 storage

Ardından dosya özellikleriniz

resim açıklamasını buraya girin

Sonra ayarlarınızı kontrol edin ve çalışacak laravel komutunu çalıştırın :)


Teşekkürler yoouuuuuu
viniciussvl

5

Laravel'de, web sunucusu kullanıcısının dizini okuyabilmesi / yazabilmesi için ACL'yi storageve cachedizini ayarlamalısınız . Yeni bir terminal açın ve aşağıdakileri çalıştırın:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/

Referanslar:

https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

https://linux.die.net/man/1/setfacl


5

Geç olabilir ama dizin izinlerini değiştirmek benim için çalıştı birine yardımcı olabilir.

Laravel projenizin /var/www/html/dizinde olduğunu varsayarsak .

cd /var/www/html/

Ardından storage/ve bootstrap/cache/dizinlerinin izinlerini değiştirin .

sudo chmod -R gu+w storage/
sudo chmod -R guo+w storage/
sudo chmod -R gu+w bootstrap/cache/
sudo chmod -R guo+w bootstrap/cache/

2

Bu çözüm laravel 5.5 için özeldir

İzinleri birkaç klasöre değiştirmeniz gerekir: chmod -R -777 depolama / günlükleri chmod -R -777 depolama / çerçeve yukarıdaki klasörler 775 veya 765 için benim projemde işe yaramadı

chmod -R 775 bootstrap/cache 

Ayrıca proje klasörünün mülkiyeti aşağıdaki gibi olmalıdır (mevcut kullanıcı) :( web sunucusu kullanıcısı)



1

Klasör izinlerimi 777 olarak değiştirmeye çok hevesli değildim. Bu sorunu düzeltmeye nasıl başladım.

İlk olarak, yerel makinemde web sunucusunu çalıştıran kullanıcıyı değiştirdim (nginx çalıştırıyorum, ancak ilkeler her yerde geçerlidir):

$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload

Daha sonra, php-fpm sürümümü kimin çalıştırdığını ve nerede değiştireceğimi öğrenmek index.phpiçin public/klasörün altında başka bir dosya oluşturdum :

<?php
phpinfo();
?>

Sayfayı yeniden yüklediğimde, www-datakullanıcının (ortam bölümünün altında) olduğunu öğrendim . Ben de php 7.1 çalıştırdığını öğrendim. Kullanıcıyı değiştirmeye devam ettim:

$> sudo vim /etc/php/7.0/fpm/pool.d/www.conf 
#Look for www-data or the following variables: user, group, listen.user, listen.group.

Son olarak, klasörlere aşağıdaki izinleri verdim:

sudo chmod -R 775 ./storage/

Şimdi, basit bir kullanarak klasörlerin sahibi olduğumu emin oldum:

ls -al

Sunucuyu ve php-fpm kullanıcılarını kendinize ayarlarsanız ve klasörler örneğin root'a sahipse, bu sorunla karşılaşmaya devam edersiniz. sudo laravel new <project>Kök olarak yapıldıysa bu olabilir . Bu durumda, ayarları chowndeğiştirmek için projenizde özyinelemeli bir komut kullandığınızdan emin olun user:group. Çoğu varsayılan durumda, www-datasunucu ve php için ana ayardır, bu durumda klasörün www-dataulaşamayacağından emin olmak önemlidir .

Projem ana dizinimde ayarlandı. Ubuntu 16.04 ve Laravel 5.5'te.


1

bunu dene

  1. cd / var / www / html
  2. setenforce 0
  3. hizmet httpd yeniden başlatma

Bunun ne yaptığını açıklayabilir misiniz?
Giderek Aptal

1
Kullanılacak dizinleri değiştirmenize gerek yok, setenforceancak her durumda bir izin sorununu gidermek için SELinux'u tamamen devre dışı bırakmak yanlış.
Patrick Mevzek

0

Benim durumumda oluşturulan ve bootstrap/cache/dizine önbelleğe alınan bir yapılandırma dosyası vardı, bu yüzden benim adım nerede:

  1. Oluşturulan tüm önbelleğe alınmış dosyaları kaldırın: rm bootstrap/cache/*.php
  2. Yeni bir laravel.logdosya oluşturun ve dosyadaki izinlerin güncellenmesini aşağıdakileri kullanarak uygulayın:

    • chmod -R 775 storage

0

( Ubuntu'da ): 2 basit adımda çözülebilir:

$ sudo chmod -R 777 storage 

Ve

$ sudo service apache2 restart

3.Adım: Dosyalarınızı dünyaya açtığınız için sunucunuzu ve / veya kullanıcılarınızı saldırıya uğratın.
miken32

0

Silin "/var/www/laravel/app/storage/logs/laravel.log"ve tekrar deneyin:

rm storage/logs/laravel.log



-1

Bu hata Linux devre dışı bırakılarak giderilebilir.

Etkin olup olmadığını kontrol edin

sestatus

Sen dene..

setenforce 0


5
" Linux'u devre dışı bırakarak "? Bu ciddi çok ileri gidiyor :-)!
Patrick Mevzek

-1

Bu hata için:

Özel durum işleyicide hata: "/var/www/laravel/app/storage/logs/laravel.log" akışı veya dosyası açılamadı: akış açılamadı: / var / www / laravel / bootstrap / compiled'de izin reddedildi .php: 8423

terminalde şu komutu kullanın:

sudo chmod -R 777 storage

2
üretim env için çok kötü
Ariful Haque

-1

Centos 7.6 Server'da bu komutla ilgili sorunum düzeltildi

chcon -R -t httpd_sys_content_t $SITE_PATH

chcon -R -t httpd_sys_rw_content_t $SITE_PATH
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.