Laravel 5 show ErrorException file_put_contents nie otworzył strumienia: Brak takiego pliku lub katalogu

84

Mam projekt na Laravel 5 i pracuję z nim w biurze i w domu. Działa dobrze, ale ostatnio w domu przestał działać. Laravel pokaż mi dwa wyjątki ErrorException

file_put_contents(G:\project\storage\framework\views/751d8a0fd8a7d4138c09ceb6a34bb377aa2d6265.php):
failed to open stream: No such file or directory

i

file_put_contents(G:\project\storage\framework/sessions/aIXycR4LIAUBVIqZu0T590paOMIpV8vfZGIroEp0):
failed to open stream: No such file or directory

Poszukuję decyzji problemowych w Google i znajduję informacje o właściwych prawach. Wszystkie rady dotyczą Linuksa, ale pracuję w systemie Windows w biurze i w domu.

Kiedy próbuję wyczyścić pamięć podręczną aplikacji i wyświetlić pamięć podręczną, mówi do mnie rzemieślnik - ... wyczyszczono. Ale dane i widoki pamięci podręcznej są obecne w pamięci.

Jak mogę rozwiązać ten problem?

Z góry dziękuję!

Evgeniy
źródło
6
Możesz spróbować wyczyścić pamięć podręczną "php artisan cache: clear" Jestem na Linuksie, więc nie jestem pewien co do uprawnień w Windows, ale sprawdź właściwości folderu, jeśli nie jest on tylko do odczytu (kliknij prawym przyciskiem na folder-> właściwości)
Educolo
@educolo Nie sądzę, żeby problem dotyczył praw do katalogów, bo kilka miesięcy było ok.
Evgeniy

Odpowiedzi:

148

Najlepszym sposobem rozwiązania tego problemu jest przejście do katalogu laravel/bootstrap/cachei usunięcie config.phppliku. lub możesz zmienić jego nazwę, tak jak config.php.old I Twój problem zostanie rozwiązany. Miłego kodowania :-)

Amit Verma
źródło
7
Tak, to by pomogło, ale wyczyszczenie pamięci podręcznej może załatwić sprawę. Uruchomienie poza Vagrant Box php artisan config:cacheodbuduje ścieżki dla aplikacji. Kiedy uruchamiamy aplikację w pudełku wędrowca, ścieżki są inne niż na przykład ścieżki do testów o zmierzchu.
George Mylonas
Dlaczego konfiguracja laravela powoduje, że laravel umiera? Działa dzięki.
Andrew,
config: cache z jakiegoś powodu nie został naprawiony.
Andrew,
Czysty, prosty i bezpośredni dla tych, którzy nie mogą uzyskać dostępu przez SSH w danym momencie lub ogólnie. Świetna odpowiedź!
lzoesch
config: czyszczenie działa dla mnie oprócz zmiany nazwy pliku,
Mohammed Omer
66

php artisan config:cacheKomendę należy zazwyczaj uruchamiać w ramach procedury wdrażania produkcyjnego. Aby rozwiązać Twój problem, sugeruję odtworzenie pliku pamięci podręcznej, aby przyspieszyć ładowanie konfiguracji.

Aby to zrobić, uruchom następujące polecenia Artisan w wierszu poleceń

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

Możesz programowo wykonać polecenie, dodając następujące elementy do swoich tras:

Route::get('/clear-cache', function() {
    $exitCode = Artisan::call('cache:clear');
    $exitCode = Artisan::call('config:cache');
    return 'DONE'; //Return anything
});

A następnie wywołaj clear-cachetrasę z przeglądarki.

Mam nadzieję, że to jest pomocne.

Elisha Senoo
źródło
49

Po kilku badaniach rozumiem - mam bardzo podobne, ale różne lokalizacje projektu głównego i jego pamięć podręczną /bootstrap/cache. Po uruchomieniu projektu czyszczenia pamięci podręcznej.

Evgeniy
źródło
to rozwiązało mój problem, po wielu sugerowanych rozwiązaniach zawiodło, dziękuję
Agung Sagita
@AgungSagita no problem;)
Evgeniy
ratujesz życie
Festus Yuma
To rozwiązało mój problem, wypróbowując wiele innych alternatyw. Dzięki :)
binmosa
Szkoda, że ​​nie widziałem tego, ponieważ jest to odpowiedź na moje pytanie dotyczące zaginionego dostawcy usług: stackoverflow.com/questions/58192052/…
j3py
14

Właściwie napotkałem ten problem, kiedy przeniosłem projekt z serwera na lokalny.

w

przechowywanie / ramy

cztery podstawowe foldery to wymagana pamięć podręczna, sesje, testy, widoki

W moim przypadku brakowało sesji może być w gitignore.

Więc ręcznie utworzyłem folder sesji i odświeżyłem przeglądarkę i działało.

Więc każdy z brakujących folderów, jeśli usuniemy ten problem, można rozwiązać.

shivanisdev
źródło
3
To prawda
Ahmad Jamil Al Rasyid
7

Ten typ problemu zwykle występuje podczas migracji jednego serwera na inny, jednego folderu do drugiego. Laravel zachowuje pamięć podręczną i konfigurację (nazwę pliku), gdy folder jest inny, wtedy pojawia się ten problem.

Rozwiązanie Uruchom następujące polecenie:

php artisan config:cache

https://laravel.com/docs/5.6/configuration#configuration-caching

Bijaya Kumar Oli
źródło
6

Apache + WSL w systemie Windows

To głupi błąd i inna odpowiedź w porównaniu do innych, ale dodam to, ponieważ mi się to przydarzyło.

Jeśli używasz WSL (linux bash w systemie Windows) do zarządzania aplikacją laravel, podczas korzystania z apache systemu Windows do uruchamiania serwera, uruchomienie dowolnych poleceń buforowania w wsl będzie przechowywać ścieżkę linuxa zamiast ścieżki systemu Windows do sesji i innych folderów .

Rozwiązanie

Po prostu uruchom polecenia czyszczenia pamięci podręcznej w PowerShell, a nie w WSL.

$ php artisan optimize

To mi wystarczyło.

Azeirah
źródło
Napotkałem ten sam problem. Używam systemu Windows, a także instancji Linux na maszynie wirtualnej VMWare. To pozwala mi testować zarówno w systemie Windows, jak i Linux, ale kiedy uruchomiłem php artisan config:cachepolecenie w systemie Windows, mój Linux nie ładował już stron internetowych aplikacji. Przejście do folderu bootstrap / cache i usunięcie tam pliku config.php rozwiązało problem.
David Tran
4

Wypróbuj te polecenia, które były przydatne w przypadku tych błędów

ścieżka \ projekt \ magazyn \ framework \ widoki ...

php artisan view:clear

ścieżka \ projekt \ magazyn \ framework / sesje ...

php artisan config:cache
Carlos Avalos
źródło
2
Jeśli opublikujesz nową odpowiedź, podczas gdy istnieje już wiele odpowiedzi za pozytywnymi, powinieneś dodać do niej więcej wyjaśnień, aby inni mogli się czegoś nauczyć z Twojej odpowiedzi
Nico Haase
4

W przypadku hostingu współdzielonego, gdy nie masz dostępu do wiersza poleceń, po prostu przejdź do folderu laravel / bootstrap / cache i usuń (lub zmień nazwę) config.php i gotowe!

Dibyendu Mitra Roy
źródło
2

Najlepszym sposobem rozwiązania tego problemu jest przejście do katalogu laravel/bootstrap/cachei usunięcie wszystkich plików z pamięci podręcznej.

Aby to zrobić, uruchom następujące polecenia Artisan w wierszu poleceń
1. php artisan config:clear
2. php artisan cache:clear
3. php artisan config:cache

W swoim panelu lub serwerze możesz wykonywać polecenia, dodając do swoich tras:

    Route::get('/clear-cache', function() {
        $run = Artisan::call('config:clear');
        $run = Artisan::call('cache:clear');
        $run = Artisan::call('config:cache');
        return 'FINISHED';  
    });

A następnie wywołaj  www.yourdomain.com/clear-cache trasę z przeglądarki.

Rashed Zaman
źródło
2

zmiana nazwy /bootstrap/cache/config.php na config.php.old nie działa dla mnie ani czyszczenie pamięci podręcznej poleceniami artisan

  1. Konfiguracja php artisan: wyczyść
  2. php artisan cache: wyczyść
  3. php artisan config: cache

I z jakiegoś dziwnego powodu nie mogę zmienić uprawnień właściciela do katalogów, więc moje rozwiązanie uruchamiało moje IDE (Visual Studio Code) jako administrator i wszystko działa.

Mój projekt znajduje się w ścieżce F: / innego dysku.

hidroquino
źródło
1

Być może jest problem z Twoim plikiem kompozytora. Możesz spróbować:

  • instalacja composer instaluje pakiety dostawcy zgodnie z plikiem composer.lock (lub tworzy plik composer.lock, jeśli nie jest obecny),
  • aktualizacja composer zawsze ponownie generuje plik composer.lock i instaluje najnowsze wersje dostępnych pakietów opartych na pliku composer.json

  • Composer dump-autoload niczego nie pobierze. Po prostu odtwarza listę wszystkich klas, które muszą być zawarte w projekcie (autoload_classmap.php). Idealny, gdy masz nową klasę w swoim projekcie. Idealnie byłoby, gdybyś wykonał plik Composer dump-autoload -o, aby przyspieszyć ładowanie stron internetowych. Jedynym powodem, dla którego nie jest to ustawienie domyślne, jest to, że jego wygenerowanie zajmuje nieco więcej czasu (ale jest tylko nieznacznie zauważalne)

źródło

Rachael MacKeigan
źródło
Niestety to nie pomogło. Próbuję wszystkich twoich rad.
Evgeniy
Przepraszamy :( W swoim oryginalnym poście powiedziałeś, że myślisz, że mogą to być prawa / uprawnienia. Ten post zawiera wiele informacji na temat zmiany praw do plików i folderów, jeśli uważasz, że może to być problem. Nie pracuję z windows, więc nie wiem zbyt wiele na ten temat. Mam nadzieję, że ci się
uda
Nie sądzę, żeby problem dotyczył praw do katalogów, bo kilka miesięcy było ok. O ile pamiętam, wcześniej zaktualizowałem niektóre pakiety Laravel, a potem przestało działać. Ale następny dzień w biurze projekt zaczął się dobrze.
Evgeniy
1

Przyczyną tego problemu są pliki pamięci podręcznej w localhost. W związku z tym próbowałem kilku rzeczy w następujący sposób, aby wyczyścić pamięć podręczną mojego projektu, ale za każdym razem mi się nie udało.

  • Próbowałem usunąć polecenia cahe, zmieniając plik web.php (z kodami rzemieślników)
  • Próbowałem wyczyścić pamięć podręczną, łącząc SSH (przez PUTTY)
  • Próbowałem hostować mój projekt w domenie podrzędnej w ramach tworzenia nowego katalogu publicznego

Więc znalazłem rozwiązanie tego problemu po tym, jak każdy z powyższych kroków zawiódł i zadziałało idealnie. Usunąłem plik cache.php w formacie host_route bootstrap / cache / katalogu.

Myślę, że ta odpowiedź pomoże w twoim problemie.

Roshan Aravinda
źródło
1

W moim przypadku nie było to nic, co można naprawić poleceniami php artisan. Problem dotyczył uprawnień do folderu / storage. Błąd nie wyjaśniał tego jasno.

Peter Drinnan
źródło
1

Jeśli używasz laravela wewnątrz dockera, uzyskaj dostęp do jego systemu plików

$ docker exec -it name-of-laravel-container /bin/bash

Następnie przejdź do katalogu głównego projektów laravel. Upewnij się, że masz w folderze magazynu / struktury :

  1. Pamięć podręczna
  2. sesje
  3. testowanie
  4. wyświetlenia

Powinny być zarówno czytelne, jak i możliwe do zapisania.

Bimal
źródło
1

Rozwiązałem ten problem, tworząc storage\framework\sessionsfolder.

tyasird
źródło
0

Miałem podobne problemy z powodu .gitignore dla /storagefolderu na pierwszej maszynie, potem sklonowane repozytorium na drugiej maszynie, a laravel był wersją zapisującą pamięć podręczną sesji

Tak więc ręczne utworzenie folderu /storage/sessionsmoże być rozwiązaniem ...

Sergey Khmelevskoy
źródło
0

rozwiązaniem, które działało dla mnie, jest po prostu służyć aplikacji jako administrator, jeśli tak jest

  1. na maclub linuxużyjsudo php artisan serve
  2. w CMDsystemie Windows spróbuj otworzyć jako plik, adminstratora następnie przejdź do katalogu projektu i uruchomphp artisan serve
Ntwari Clarance Liberiste
źródło
0

Wyczyszczenie zawartości storage/framework/cachepomogło mi. Nic innego nie działało ...

Karsai Péter
źródło
0

Użyłem Laravel 8, to jest moje rozwiązanie

Idź: dane
katalogu uprawnień do przechowywania / struktury / pamięci podręcznej / zestawu danych to 777

U mnie to zadziałało

Infomaster
źródło
0

To zrobiło dla mnie magię. chmod -Rf 0777 przechowywania

Wyjątkowy
źródło
0

Jeśli nic nie działa, spróbuj wykonać następujące czynności w środowisku produkcyjnym

1-

composer install --optimize-autoloader --no-dev

2-

php artisan cache:clear

3-

php artisan config:clear

4-

php artisan view:clear

5-

php artisan config:cache

6-

php artisan route:cache

Pracuje dla mnie

Moh Alaraabi
źródło