Laravel 5 show ErrorException file_put_contents konnte den Stream nicht öffnen: Keine solche Datei oder kein solches Verzeichnis

80

Ich habe ein Projekt auf Laravel 5 und arbeite damit im Büro und auch zu Hause. Es funktioniert gut, aber vor kurzem zu Hause hat es aufgehört zu funktionieren. Laravel zeigt mir zwei ErrorException

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

und

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

Ich suche bei Google nach einer Problementscheidung und finde Informationen zu den richtigen Rechten. Alle Ratschläge beziehen sich auf Linux, aber ich arbeite unter Windows im Büro und auch zu Hause.

Wenn ich versuche, den Anwendungscache zu löschen und den Cache anzuzeigen, spricht der Handwerker mit mir - ... gelöscht. Cache-Daten und -Ansichten sind jedoch im Speicher vorhanden.

Wie kann ich dieses Problem beheben?

Danke im Voraus!

Evgeniy
quelle
6
Yo kann den Cache „php Handwerker cache: clear“ versuchen Reinigung ich auf Linux bin, so dass ich auf Windows nicht sicher Erlaubnis bin, aber auf Ordner - Eigenschaften prüfen , ob es nicht read_only ist (Rechtsklick auf Ordner-> Eigenschaften)
educolo
@educolo Ich glaube nicht, dass es um Verzeichnisrechte geht, da es mehrere Monate in Ordnung war.
Evgeniy

Antworten:

144

Der beste Weg, um dieses Problem zu lösen, ist, in das Verzeichnis zu gehen laravel/bootstrap/cacheund die config.phpDatei zu löschen . oder Sie können es auch umbenennen wie config.php.old Und Ihr Problem wird behoben. Viel Spaß beim Codieren :-)

Amit Verma
quelle
4
Ja, das würde helfen, aber das Löschen des Caches kann den Job erledigen. Wenn Sie außerhalb der Vagrant Box ausführen, php artisan config:cachewerden die Pfade für die Anwendungen neu erstellt. Wenn wir eine Anwendung in der Vagrant-Box ausführen, unterscheiden sich die Pfade beispielsweise von Pfaden für Dämmerungstests.
George Mylonas
Warum lässt die Konfiguration von Laravel Laravel sterben? Funktioniert danke.
Andrew
config: Cache wurde aus irgendeinem Grund nicht repariert.
Andrew
Sauber, einfach und direkt für diejenigen, die zu diesem Zeitpunkt oder allgemein nicht über SSH zugreifen können. Gute Antwort!
lzoesch
config: clear funktioniert für mich neben dem Umbenennen der Datei funktioniert auch,
Mohammed Omer
60

Sie sollten den php artisan config:cacheBefehl normalerweise als Teil Ihrer Produktionsbereitstellungsroutine ausführen . Als Lösung für Ihr Problem empfehle ich Ihnen, die Cache-Datei neu zu erstellen, um das Laden der Konfiguration zu beschleunigen.

Führen Sie dazu die folgenden Artisan-Befehle in Ihrer Befehlszeile aus

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

Sie können den Befehl programmgesteuert ausführen, indem Sie Ihren Routen Folgendes hinzufügen:

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

Rufen Sie dann die clear-cacheRoute über Ihren Browser auf.

Ich hoffe das ist hilfreich.

Elisha Senoo
quelle
47

Nach einigen Recherchen verstehe ich - ich habe sehr ähnliche, aber unterschiedliche Stammprojektpositionen und deren Cache /bootstrap/cache. Nachdem das Cache-Löschprojekt gestartet wurde.

Evgeniy
quelle
Dies löste mein Problem, nachdem viele Lösungsvorschläge fehlgeschlagen waren, danke
Agung Sagita
@ AgungSagita kein Problem;)
Evgeniy
Du bist ein Lebensretter
Festus Yuma
Dies löste mein Problem, nachdem ich viele andere Alternativen ausprobiert hatte. Danke :)
binmosa
Ich wünschte, ich hätte dies als Antwort auf meine Frage zu einem fehlenden Dienstanbieter gesehen: stackoverflow.com/questions/58192052/…
j3py
12

Eigentlich war ich mit diesem Problem konfrontiert, als ich mein Projekt vom Server auf den lokalen verschoben habe.

im

Speicher / Framework

Vier grundlegende Ordner sind Cache, Sitzungen, Tests, Ansichten erforderlich

In meinem Fall fehlten möglicherweise Sitzungen in gitignore.

Also habe ich manuell einen Sitzungsordner erstellt und den Browser aktualisiert und es hat funktioniert.

Wenn wir dieses Problem löschen, kann jeder fehlende Ordner behoben werden.

Shivanikoko
quelle
2
Dieser ist wahr
Ahmad Jamil Al Rasyid
7

Diese Art von Problem tritt im Allgemeinen bei der Migration eines Servers auf einen anderen, eines Ordners auf einen anderen auf. Laravel behält den Cache und die Konfiguration (Dateiname) bei, wenn der Ordner anders ist als dieses Problem.

Lösung Führen Sie den folgenden Befehl aus:

php artisan config:cache

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

Bijaya Kumar Oli
quelle
6

Apache + WSL unter Windows

Dies ist ein dummer Fehler und eine andere Antwort als die anderen, aber ich werde es hinzufügen, weil es mir passiert ist.

Wenn Sie WSL (Linux Bash unter Windows) verwenden, um Ihre Laravel-Anwendung zu verwalten, während Sie Ihren Server mit Windows Apache ausführen, werden beim Ausführen von Caching-Befehlen in der WSL der Linux-Pfad und nicht der Windows-Pfad zu den Sitzungen und anderen Ordnern gespeichert .

Lösung

Führen Sie einfach die Cache- Löschbefehle in der Powershell und nicht in der WSL aus.

$ php artisan optimize

War genug für mich.

Azeirah
quelle
Ich bin auf dasselbe Problem gestoßen. Ich verwende Windows und auch eine Linux-Instanz auf einer virtuellen VMWare-Maschine. Auf diese Weise kann ich sowohl unter Windows als auch unter Linux testen. Wenn ich den php artisan config:cacheBefehl jedoch unter Windows ausführte, lud mein Linux die Webseiten der Anwendung nicht mehr. Wenn Sie in den Ordner bootstrap / cache gehen und dort die Datei config.php löschen, wurde das Problem behoben.
David Tran
4

Wenn Sie kein Shared Hosting haben und keinen Befehlszeilenzugriff haben, navigieren Sie einfach zum Ordner laravel / bootstrap / cache und löschen (oder benennen) Sie die Datei config.php um. Fertig!

Dibyendu Mitra Roy
quelle
3

Versuchen Sie es mit diesen Befehlen, die bei diesen Fehlern hilfreich waren

Pfad \ Projekt \ Speicher \ Framework \ Ansichten ...

php artisan view:clear

Pfad \ Projekt \ Speicher \ Framework / Sitzungen ...

php artisan config:cache
Carlos Avalos
quelle
2
Wenn Sie eine neue Antwort veröffentlichen, während es bereits mehrere Antworten gibt, sollten Sie weitere Erklärungen hinzufügen, damit andere aus Ihrer Antwort lernen können
Nico Haase
2

Der beste Weg, um dieses Problem zu lösen, ist, in das Verzeichnis zu gehen laravel/bootstrap/cacheund alle Dateien aus dem Cache zu löschen.

Führen Sie dazu die folgenden Artisan-Befehle in Ihrer Befehlszeile aus
1. php artisan config:clear
2. php artisan cache:clear
3. php artisan config:cache

In Ihrem Panel oder Server können Sie Befehle ausführen, indem Sie Ihren Routen Folgendes hinzufügen:

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

Rufen Sie dann die  www.yourdomain.com/clear-cache Route über Ihren Browser auf.

Rashed Zaman
quelle
2

Das Ändern des Namens von /bootstrap/cache/config.php in config.php.old funktioniert bei mir nicht und das Löschen des Caches mit den Befehlen artisan

  1. PHP Artisan Config: klar
  2. PHP Artisan Cache: klar
  3. PHP Artisan Config: Cache

Und aus irgendeinem seltsamen Grund kann ich die Berechtigung für den Eigentümer in den Verzeichnissen nicht ändern, sodass meine Lösung meine IDE (Visual Studio Code) als Administrator ausführte und alles funktioniert.

Mein Projekt befindet sich in einem F: / Pfad einer anderen Festplatte.

Hidroquino
quelle
1

Möglicherweise liegt ein Problem mit Ihrer Composer-Datei vor. Du könntest es versuchen:

  • composer install installiert die Herstellerpakete gemäß composer.lock (oder erstellt composer.lock, falls nicht vorhanden).
  • Das Composer-Update regeneriert immer composer.lock und installiert die neuesten Versionen der verfügbaren Pakete basierend auf composer.json

  • Composer Dump-Autoload lädt nichts herunter. Es wird lediglich die Liste aller Klassen neu generiert, die in das Projekt aufgenommen werden müssen (autoload_classmap.php). Ideal, wenn Sie eine neue Klasse in Ihrem Projekt haben. Im Idealfall führen Sie Composer dump-autoload -o aus, um das Laden Ihrer Webseiten zu beschleunigen. Der einzige Grund, warum es nicht standardmäßig ist, ist, dass die Generierung etwas länger dauert (aber nur geringfügig auffällt).

Quelle

Rachael MacKeigan
quelle
Leider hat es nicht geholfen. Ich versuche alle Ihre Ratschläge.
Evgeniy
Entschuldigung :( Sie haben in Ihrem ursprünglichen Beitrag gesagt, dass Sie dachten, es könnten die Rechte / Berechtigungen sein. Dieser Beitrag enthält viele Informationen zum Ändern der Rechte an Dateien und Ordnern, wenn Sie glauben, dass dies das Problem sein könnte. Ich arbeite nicht mit Windows, also weiß ich nicht viel darüber. Ich hoffe, es funktioniert für Sie.
Rachael MacKeigan
Ich glaube nicht, dass das Problem die Verzeichnisrechte betrifft, da es mehrere Monate in Ordnung war. Soweit ich mich erinnere, aktualisiere ich einige Laravel-Pakete zuvor und dann funktioniert es nicht mehr. Aber am nächsten Tag im Büro begann das Projekt gut.
Evgeniy
1

Der Grund für dieses Problem sind die Cache-Dateien in localhost. Demnach habe ich verschiedene Dinge wie folgt versucht, um den Cache in meinem Projekt zu leeren, aber jedes Mal, wenn ich fehlgeschlagen bin.

  • Es wurde versucht, Cahe-Befehle durch Ändern der Datei web.php (mit handwerklichen Codes) zu löschen.
  • Versucht, den Cache durch Verbinden von SSH zu löschen (über PUTTY)
  • Es wurde versucht, mein Projekt in der Subdomain zu erstellen und ein neues öffentliches Verzeichnis zu erstellen

Ich habe also eine Lösung für dieses Problem gefunden, nachdem alle oben genannten Schritte fehlgeschlagen sind und es für mich perfekt funktioniert hat. Ich habe die Datei cache.php im Verzeichnis host_route / bootstrap / cache gelöscht .

Ich denke, diese Antwort wird Ihrem Problem helfen.

Roshan Aravinda
quelle
1

In meinem Fall war es nichts, was mit PHP Artisan Befehlen behoben werden konnte. Das Problem waren Ordnerberechtigungen für den Ordner / storage. Der Fehler machte das nicht klar.

Peter Drinnan
quelle
1

Wenn Sie Laravel im Docker ausführen, greifen Sie auf das Dateisystem zu

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

Navigieren Sie als Nächstes zum Stammverzeichnis Ihres Laravel-Projekts. Stellen Sie sicher, dass Sie sich im Speicher- / Framework- Ordner befinden:

  1. Zwischenspeicher
  2. Sitzungen
  3. testen
  4. Ansichten

Und sie sollten sowohl lesbar als auch beschreibbar sein.

Bimal
quelle
1

Ich habe dieses Problem durch Erstellen eines storage\framework\sessionsOrdners gelöst .

tyasird
quelle
0

Ich hatte ähnliche Probleme aufgrund von .gitignore für den /storageOrdner auf dem ersten Computer, dann geklontem Repository auf dem zweiten Computer und Laravel wurde überarbeitet, um den Sitzungscache aufzuschreiben

Das manuelle Erstellen eines Ordners /storage/sessionskönnte also eine Lösung sein.

Sergey Khmelevskoy
quelle
0

Die Lösung, die für mich funktioniert hat, besteht darin, die App nur als Administrator zu verwenden, wenn Sie es sind

  1. auf macoder linuxverwendensudo php artisan serve
  2. auf Windows versuchen zu öffnen , CMDals ein adminstratorund Projektverzeichnis und laufen dann weiterphp artisan serve
Ntwari Clarance Liberiste
quelle
0

Das Löschen des Inhalts von storage/framework/cachehat den Trick für mich getan. Sonst hat nichts funktioniert ...

Karsai Péter
quelle