Właściwie jestem całkiem nowy w laravel i próbuję stworzyć swój pierwszy projekt. z jakiegoś powodu ciągle otrzymuję ten błąd (jeszcze nie zacząłem kodować)
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
Czytałem, że ma to coś wspólnego z uprawnieniami, ale w chmod -R 775 storage
ogóle nie pomogło.
Odpowiedzi:
Nigdy nie ustawiaj katalogu na 777 . powinieneś zmienić prawo własności do katalogu. ustaw więc swojego obecnego użytkownika, z którym jesteś zalogowany jako właściciel, a użytkownika serwera WWW (dane www, apache, ...) jako grupę. Możesz spróbować tego:
następnie, aby ustawić uprawnienia do katalogu, spróbuj tego:
Aktualizacja:
Użytkownicy i grupy serwera WWW zależą od serwera WWW i systemu operacyjnego. Aby dowiedzieć się, kto jest użytkownikiem i grupą Twojego serwera WWW, użyj następujących poleceń. do użytku nginx:
ps aux|grep nginx|grep -v grep
do użytku apache:
ps aux | egrep '(apache|httpd)'
źródło
sudo chown -R {your current user}:www-data storage bootstrap/cache
chown: www-data: illegal group name
. Ustawienie katalogu na 777 to jedyna rzecz, która działa_www
spróbuj tegosudo chgrp -R _www bootstrap/cache
.Nigdy nie używaj 777 dla katalogów na twoim serwerze live, ale na twoim własnym komputerze czasami musimy zrobić więcej niż 775, ponieważ
Znaczy
Jeśli twój serwer WWW nie działa jako Vagrant, nie będzie mógł na nim pisać, więc masz 2 opcje:
lub zmień grupę na użytkownika serwera WWW, zakładając, że jest to
www-data
:źródło
chown -R apache:apache laravelproject
chown -R vagrant:www-data storage
Miałem zrobiłem to dla mnie, dzięki.www-data: illegal group name
Aby rozwiązać ten problem, musisz zmienić własność katalogu na użytkownika uniksowego, z którego korzysta serwer WWW.
Mimo że utworzyłem projekt w maszynie wirtualnej przy użyciu użytkownika maszyny wirtualnej, folder należał do użytkownika na rzeczywistym komputerze; tak, kiedy próbujesz
Teraz to działa.
Dziękuję wszystkim, którzy pomogli mi to rozgryźć
EDYTOWAĆ:
Właściwie to nadal nie działało, nadal powodował problem z odmową pozwolenia.
Oto, co zrobiłem, zmodyfikowałem mój plik Vagrantfile w ten sposób:
źródło
Może to być również SELinux. (Centos, RedHat)
Określ status SElinux na terminalu:
Jeśli status jest włączony, wpisz polecenie wyłączenia SElinux
Lub możesz wykonać to polecenie
$ sudo setenforce 0
źródło
Musisz dostosować uprawnienia
storage
ibootstrap/cache
.cd
do swojego projektu Laravel.sudo chmod -R 755 storage
sudo chmod -R 755 bootstrap/cache
Możesz spróbować 777, jeśli 755 nie działa. 777 nie jest jednak bezpieczne!
W zależności od tego, jak skonfigurowany jest serwer WWW, możesz być w stanie określić swoje uprawnienia bardziej szczegółowo i nadać je tylko użytkownikowi serwera WWW. Google,
WEB SERVER NAME Laravel file permissions
aby uzyskać więcej informacji.W chwili pisania tego tekstu dotyczy to Laravel 5.4
źródło
Dodać do
composer.json
Po
composer install
źródło
Uruchom następujące polecenia i możesz dodać
sudo
na początku polecenia w zależności od systemu:źródło
Dla wszystkich użytkowników Centos 7 w kontekście Laravel nie ma potrzeby wyłączania Selinux, wystarczy uruchomić następujące polecenia:
Na koniec upewnij się, że Twoje hosty, adresy IP i wirtualne hosty są poprawnie dostępne do zdalnego dostępu.
Selinux ma na celu ograniczenie dostępu nawet do użytkowników root, więc można uzyskać dostęp tylko do niezbędnych rzeczy, przynajmniej w ogólnym przeglądzie, to dodatkowe bezpieczeństwo, wyłączenie tego nie jest dobrą praktyką, istnieje wiele linków do nauki Selinux, ale do tego jeśli nie jest to nawet wymagane.
źródło
Jeśli używasz cmd
Jeśli używasz GUI
Najpierw przejdź do projektu i kliknij prawym przyciskiem myszy magazyn, sprawdź właściwości i przejdź do zakładki Uprawnienia
Zmień uprawnienia za pomocą poniższego kodu
Wtedy właściwości pliku mogą być
Następnie sprawdź swoje ustawienia i wykonaj polecenie laravel to zadziała :)
źródło
W Laravel powinieneś ustawić ACL
storage
icache
katalog tak, aby użytkownik serwera WWW mógł czytać / pisać w katalogu. Otwórz nowy terminal i uruchom:Bibliografia:
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
źródło
Może być późno, ale może komuś pomóc, zmiana uprawnień do katalogu zadziałała.
Zakładając, że Twój projekt Laravel znajduje się w
/var/www/html/
katalogu.Następnie zmień uprawnienia katalogów
storage/
ibootstrap/cache/
.źródło
To rozwiązanie jest specyficzne dla Laravel 5.5
Musisz zmienić uprawnienia do kilku folderów: chmod -R -777 przechowywanie / logi chmod -R -777 przechowywanie / framework dla powyższych folderów 775 lub 765 nie działa dla mojego projektu
Również własność folderu projektu powinna wyglądać następująco (bieżący użytkownik): (użytkownik serwera WWW)
źródło
Mógłbyś:
źródło
Nie chciałem zmieniać uprawnień do folderów na 777. Oto jak rozwiązałem ten problem.
Najpierw zmieniłem użytkownika, który uruchamia serwer WWW na moim komputerze lokalnym (uruchamiam nginx, ale zasady obowiązują wszędzie):
Następnie utworzyłem kolejny
index.php
plik wpublic/
folderze, aby dowiedzieć się, kto używa mojej wersji php-fpm i gdzie powinienem to zmienić:Przeładowując stronę, dowiedziałem się, że
www-data
był to użytkownik (w sekcji środowisko). Dowiedziałem się również, że korzystam z php 7.1. Przystąpiłem do zmiany użytkownika:Na koniec nadałem folderom następujące uprawnienia:
Teraz upewniłem się, że jestem właścicielem folderów, używając prostego:
Jeśli ustawisz serwer i użytkowników php-fpm na siebie, a foldery są własnością roota, na przykład, będziesz napotykać ten problem. Może się to zdarzyć, jeśli masz uprawnienia
sudo laravel new <project>
roota. W takim przypadku upewnij się, że używasz wchown
projekcie polecenia rekurencyjnego, aby zmienićuser:group
ustawienia. W większości domyślnych przypadkówwww-data
jest głównym ustawieniem serwera i php, w tym przypadku należy upewnić się, że folder nie jest pozawww-data
zasięgiem.Mój projekt jest ustawiony w moim katalogu domowym. W Ubuntu 16.04 i Laravel 5.5.
źródło
Spróbuj tego
źródło
setenforce
ale w każdym przypadku całkowite wyłączenie SELinuxa tylko po to, aby naprawić jeden problem z uprawnieniami.W moim konkretnym przypadku miałem wygenerowany plik konfiguracyjny i buforowany w
bootstrap/cache/
katalogu, więc moje kroki, w których:rm bootstrap/cache/*.php
Utwórz nowy
laravel.log
plik i zastosuj aktualizację uprawnień do pliku za pomocą:chmod -R 775 storage
źródło
(na Ubuntu ): Można to rozwiązać w 2 prostych krokach:
I
źródło
Usuń
"/var/www/laravel/app/storage/logs/laravel.log"
i spróbuj ponownie:rm storage/logs/laravel.log
źródło
Miałem ten problem i znalazłem to i rozwiązało problem.
źródło
Ten błąd można naprawić, wyłączając system Linux.
Sprawdź, czy została włączona
sestatus
Próbujesz..
setenforce 0
źródło
W przypadku tego błędu:
Błąd w module obsługi wyjątków: nie można otworzyć strumienia lub pliku „/var/www/laravel/app/storage/logs/laravel.log”: nie można otworzyć strumienia: odmowa uprawnień w / var / www / laravel / bootstrap / compiled .php: 8423
użyj tego polecenia w terminalu:
źródło
Naprawiono mój problem z tym poleceniem w Centos 7.6 Server
źródło