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ę!


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 :-)


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.


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.


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ć.


3
To prawda
Ahmad Jamil Al Rasyid


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.


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

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!


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.


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.


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


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.


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.


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.


1

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


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 ...


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

0

Wyczyszczenie zawartości storage/framework/cachepomogło mi. Nic innego nie działał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



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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.