Jestem nowy w Laravel. Próbowałem się otworzyć http://localhost/test/public/
i dostałem
Błąd w obsłudze wyjątków.
Przeszukałem go i zmieniłem uprawnienia do katalogu przechowywania, chmod -R 777 app/storage
ale bezskutecznie.
Zmieniłem debug=>true
się app.php
i odwiedził stronę i mam błąd w obsługi wyjątków:
Nie można otworzyć strumienia lub pliku „/var/www/html/test/app/storage/logs/laravel.log”: otwarcie strumienia nie powiodło się: Odmowa uprawnień w / var / www / html / test / bootstrap / compiled. php: 8423
Następnie zmieniłem uprawnienia katalogu przechowywania za pomocą polecenia chmod -R 644 app/storage
i błąd „Błąd obsługi wyjątków” zniknął i strona została załadowana. Ale tam otrzymuję to:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): nie udało się otworzyć strumienia: Odmowa dostępu
php artisan cache:clear
wtedychmod -R 777 app/storage
wreszciephp artisan dump-autoload
Odpowiedzi:
Sugestia vsmoraes zadziałała dla mnie:
Laravel> = 5,4
Laravel <5,4
UWAGA: NIE ROBIĆ TEGO NA ŻADNYM ZDALNYM SERWERZE (URZĄDZENIE LUB PRODUKCJA)
Kiedy zadałem to pytanie, był to problem na moim hoście lokalnym, działającym na maszynie wirtualnej. Pomyślałem więc, że skonfigurowanie 777 jest wystarczająco bezpieczne, jednak ludzie mają rację, kiedy mówią, że powinieneś poszukać innego rozwiązania. Najpierw spróbuj 775
źródło
php artisan cache:clear
wtedychmod -R 777 storage
, a potemcomposer dump-autoload
chmod -R 777 storage
zamiastphp artisan cache:clear
to poprawna odpowiedź. Następniesudo chmod -R ug+rw storage
daje mi odpowiednie uprawnienia, bez nadawaniaothers
777
Laravel nie jest specyficzny, ale proces myślowy dla programistów Laravel jest następujący: „zrób to TERAZ, nie obchodzi mnie jak”, po prostu777
). Z zasady nigdy, przenigdy nie ustawiaj niczego,777
aby coś zadziałało. ZROZUMIEĆ serwer i użytkowników / role i odpowiednio je ustawić; nie rób tego. Twoi klienci ufają, że zrobisz to dobrze.Dla pracowników Google, którzy mieli ten problem z Laravel 5.
Jest to problem z uprawnieniami spowodowany przez różnych użytkowników próbujących pisać w tym samym pliku dziennika w
storage/logs
folderze z różnymi uprawnieniami.Co się dzieje, jeśli twoja konfiguracja laravel jest prawdopodobnie ustawiona tak, aby codziennie rejestrować błędy i dlatego twój serwer WWW (apache / nginx) może utworzyć ten plik dla domyślnego użytkownika, w zależności od środowiska, może to być coś w rodzaju
_www
OSX lubwww-data
systemów * NIX, wtedy problem pojawia się, gdy mogłeś uruchomić jakieś polecenia rzemieślnika i napotkałeś błędy, więc rzemieślnik napisze ten plik, ale z innym użytkownikiem, ponieważ PHP na terminalu jest wykonywane przez innego użytkownika, a właściwie twojego użytkownika logowania, możesz to sprawdzić, uruchamiając to polecenie :Jeśli użytkownik logujący się utworzył ten plik dziennika na serwerze sieciowym, nie będzie można w nim zapisywać błędów i odwrotnie, ponieważ laravel domyślnie zapisuje pliki dziennika z
655
uprawnieniami, które pozwalają tylko właścicielowi na zapis.Aby naprawić ten
664
plik tymczasowy, musisz ręcznie nadać grupie uprawnienia do tego pliku, aby zarówno użytkownik logujący się, jak i użytkownik serwera WWW mogli zapisywać w tym pliku dziennika.Aby uniknąć tego problemu na stałe, możesz chcieć ustawić odpowiednie uprawnienia podczas tworzenia nowego pliku w katalogu
storage/logs
, dziedzicząc uprawnienia z katalogu, ta odpowiedź https://unix.stackexchange.com/a/115632 może pomóc w rozwiązaniu problemu że.źródło
Nie powinieneś nadawać 777 uprawnień. To zagrożenie bezpieczeństwa. Użytkownikom Ubuntu w Laravel 5 proponuję rekursywną zmianę właściciela katalogu:
Spróbuj wykonać następujące czynności:
W systemach opartych na Ubuntu www-data jest użytkownikiem apache.
źródło
chmod 777
odpowiedzi. Dzięki ~chmod 777
to kompletny koszmar.chmod 777
konsekwencje?Dla wszystkich użytkowników Laravel 5, Homestead i Mac spróbuj tego:
źródło
bootstrap/cache/compiled.php
próbowałem pisać do tego katalogu, ale on nie istniał i spowodował błąd uprawnień. Dziękuję Ci.czasami SELINUX powodował ten problem; możesz wyłączyć selinux za pomocą tego polecenia.
źródło
Problem rozwiązany
umożliwia to uprawnienie do zapisu w aplikacji, strukturze i dziennikach Mam nadzieję, że to pomoże
źródło
NIGDY NIE UDZIELAJ GO ZEZWOLENIA 777!
przejdź do katalogu projektu laravel na swoim terminalu i napisz:
W ten sposób nadajesz swojemu użytkownikowi uprawnienia właściciela i dajesz mu uprawnienia:
1 wykonanie, 2 zapis, 4 odczyt
1 + 2 + 4 = 7 środków (rwx)
2 + 4 = 6 środków (rw) w
końcu, dla dostępu do pamięci, ug + rwx oznacza, że dajesz użytkownikowi i grupie 7
źródło
Dla włóczęgów rozwiązaniem jest:
(vagrant) pamięć podręczna php artisan: wyczyść
(poza vagrantem) chmod -R 777 app / storage
(w włóczęgach) kompozytor dump-autoload
Upewnij się, że poruszasz się w swoim lokalnym środowisku, a nie wewnątrz włóczęgi, jest tutaj ważne!
źródło
Spróbuj ponownie z
chmod -R 755 /var/www/html/test/app/storage
. Używaj z sudoOperation not permitted
w chmod. Użyj uprawnień Sprawdź właściciela, jeśli nadal występuje błąd.źródło
Zgodnie z Laravel 5.4, który jest najnowszy w chwili, gdy to piszę, jeśli masz taki problem, musisz zmienić uprawnienia. NIE SŁUCHAJ NIKOGO, KTÓRZY POWIEDZIE, ABY USTAWIĆ 777 DLA ŻADNEGO KATALOGU. Ma problem z bezpieczeństwem. Zmień uprawnienia do folderu przechowywania w ten sposób
Zmień uprawnienia do folderu bootstrap w ten sposób
Teraz upewnij się, że wykonujesz oba polecenia z katalogu aplikacji. W przyszłości nie będziesz mieć problemów z pozwoleniem. 775 nie zagraża bezpieczeństwu Twojej maszyny.
źródło
Zaproponuj poprawne pozwolenie, jeśli dla Apache,
źródło
Jeśli masz Laravel 5 i szukasz stałego rozwiązania, odpowiednie zarówno
php artisan
użycie wiersza poleceń, jak i serwer Apache, użyj tego:sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Zobacz szczegółowe wyjaśnienie tutaj .
źródło
DLA KAŻDEGO URUCHAMIAJĄCEGO SYSTEM OPERACYJNY Z SELINUX: Prawidłowy sposób zezwolenia httpd na zapis w folderze magazynu laravel to:
Następnie, aby natychmiast zastosować zmiany:
SELinux może być trudny do pokonania, ale jeśli jest obecny, MOCNIE RADZĘ, abyś się go nauczył, zamiast całkowicie go ominąć.
źródło
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
Miałem ten sam problem, a poniższe kroki pomogły mi go rozwiązać.
<?php echo exec('whoami'); ?>
I uruchom plik z przeglądarki internetowej. Dałoby to użytkownikowi apache. W moim przypadku jest to ec2-user, ponieważ używałem aws z cronjob zainstalowanym w /etc/cron.d/. Dla innych może to być inny użytkownik.
sudo chown -R ec2-user:<usergroup> /app-path/public
Musisz tutaj zidentyfikować i użyć odpowiednich „użytkowników” i „grup użytkowników”.
źródło
Jeśli korzystasz z Linuksa lub Maca, nawet możesz uruchomić
ssh terminal
. Możesz użyć terminala do uruchomienia tego polecenia,Jeśli korzystasz z systemu Windows, możesz uruchomić za pomocą
git bash
.Możesz pobrać formularz git https://git-scm.com/downloads .
źródło
Xampp do użytku:
źródło
Za każdym razem, gdy zmieniam app.php, otrzymuję odmowę pozwolenia na zapisanie bootstrap / cache / services.json, więc zrobiłem to, aby to naprawić:
źródło
rozwiązał to dla mnie
źródło
Ustawienie pozwolenia na 777 to zdecydowanie okropny pomysł!
... ale
Jeśli otrzymujesz błąd uprawnień związany z folderem „przechowywanie”, to zadziałało:
źródło
Jeśli używasz laradock, spróbuj
chown -R laradock:www-data ./storage
w kontenerze obszaru roboczegoźródło
W moim przypadku rozwiązaniem była zmiana uprawnień do katalogów
app/storage/framework/views
iapp/storage/logs
.źródło
Jeśli ktoś inny napotka podobny problem z błędem uprawnień do plików fopen, ale jest wystarczająco mądry, aby nie ślepo chmod 777, oto moja sugestia.
Sprawdź polecenie, którego używasz, aby uzyskać uprawnienia, których potrzebuje apache:
Litera „r” oznacza, że jest otwarta tylko do odczytu, a jeśli nie edytujesz pliku, powinieneś ustawić go jako. Oznacza to, że apache / www-data potrzebuje przynajmniej uprawnień do odczytu tego pliku, które jeśli plik zostanie utworzony przez laravel, będzie miał już uprawnienia do odczytu.
Jeśli z jakiegoś powodu musisz napisać do pliku:
Następnie upewnij się, że apache również ma uprawnienia do zapisu w pliku.
http://php.net/manual/en/function.fopen.php
źródło
Po prostu uruchom serwer za pomocą
artisian
php artisian serve
Następnie uzyskaj dostęp do swojego projektu z określonego adresu URL:
źródło
Mam ten sam problem podczas uruchamiania Vagrant na Macu. rozwiązano problem poprzez zmianę użytkownika serwera Apache w pliku https.conf:
Uruchom apache jako użytkownika php zamiast demona użytkownika, aby rozwiązać problem z dostępem do plików w php
teraz plik pamięci podręcznej utworzony przez php może być odczytywany i edytowany przez apache bez pokazywania błędu uprawnień dostępu.
źródło
Po wielu próbach i błędach z uprawnieniami do katalogu skończyło się objawieniem ... na partycji dysku zabrakło miejsca. Chciałem się tylko podzielić, aby upewnić się, że nikt inny nie jest na tyle głupi, by szukać rozwiązania w złym kierunku.
W Linuksie możesz użyć
df -h
do sprawdzenia rozmiaru dysku i wolnego miejsca.źródło
Ten problem jest faktycznie spowodowany przez różnych użytkowników, którzy chcą
write/read
złożyć wniosek, ale odmówiono mu dostępu różnych praw własności. może jako „root” zainstalowałeś laravela, zanim zalogujesz się do swojej witryny jako użytkownik „laravel”, gdzie „laravel” jest domyślnym właścicielem, więc to jest prawdziwy problem. Więc kiedy użytkownik „laravel” chce domyślnie odczytywać / zapisywać wszystkie pliki na dysku, należy odmówić mu prawa własności do tego pliku przez „root”.Aby rozwiązać ten problem, możesz wykonać następujące czynności:
sudo chown -hR your-user-name /root /nameforlder
lub w moim przypadku
sudo chown -hR igmcoid /root /sublaravel
Notatka:
root
jako pierwszy właściciel, który zainstalował wcześniejyour-user-name
jako domyślny właściciel, który faktycznie pisze / czyta w witrynie.namefolder
jako folder nazw, dla których chcesz zmienić własność.źródło
Mam nadzieję, że gdzieś to pomoże ...
źródło
Podczas pracy na Windows 10 z Laragonem i Laravelem 4 wydawało mi się, że nie ma możliwości ręcznej zmiany uprawnień, ponieważ wykonywanie
chmod
-poleceń w terminalu wbudowanym w Laragon nie przyniosło żadnego efektu.Jednak w tym terminalu można było przejść do folderu przechowywania i ręcznie dodać żądane foldery, takie jak ten:
Polecenie
cd
-w terminalu przenosi Cię do folderu (może być konieczne dostosowanie tej ścieżki do struktury plików).mkdir
-Polecenie stworzy katalog o podanej nazwie.Nie miałem okazji przetestować tego podejścia w Laravel 5, ale oczekuję, że podobne podejście powinno zadziałać.
Oczywiście może być lepszy sposób, ale przynajmniej było to rozsądne obejście mojej sytuacji (naprawienie błędu:)
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
.źródło
W ten sposób rozwiązałem swój problem.
źródło
Próbowałem dać
777
dostęp do folderu przechowywania i działa dla mnie1) przejdź do katalogu głównego laravel (
/var/www/html
dla mnie) i uruchom następujące polecenieźródło