Der Laravel-Speicherlink funktioniert nicht in der Produktion
Lesezeit: 7 Minuten
Ich benutze storage_path um meine Bilder zu speichern und ich symbolisch meinen Speicherordner dazu public_html
php artisan storage:link
Auf der lokalen Seite funktioniert alles einwandfrei, wenn ich ein Bild hochlade, wird es in den Speicherordner hochgeladen und der Link davon wird darin angezeigt public Ordner, aber seit ich in den Live-Host- und Produktionsmodus gewechselt bin, werden meine Bilder in den Speicherordner hochgeladen, aber nichts in meinen public_html/storage und ich bin nicht in der Lage, sie in meinem Front-End zu bekommen.
Du verwendest kein public Verzeichnis, das Sie verwenden public_html. Ich mag diese Strategie nicht. Erstellen Sie ein öffentliches Verzeichnis in public_html und setze die url zu env('APP_URL').'/public/storage'.
– Oh Gott warum
6. Juni 2018 um 22:10 Uhr
Sie müssen den Sym-Link auf dem Server neu erstellen, er wird nicht mit übertragen
– ATechGuy
6. Juni 2018 um 22:27 Uhr
@Ohgodwarum tut mir leid, aber ich bin verwirrt, 1) Make a public directory in public_html Ich habe Ordner in meinem public_html Es wurde erstellt, als ich den Handwerkerbefehl ausführte, 2) habe ich getan 'url' => env('APP_URL').'/public/storage', aber es hat sich nichts geändert, ich kann meine Bilder immer noch nicht abrufen
– mafortis
6. Juni 2018 um 22:30 Uhr
@ATechGuy wie mache ich das? Ich habe kein Terminal in meinem Host (nicht sicher!)
– mafortis
6. Juni 2018 um 22:30 Uhr
Sind Sie wirklich sicher, dass Sie verwenden sollten? $image->getClientOriginalExtension();? Das würde mir erlauben, eine .php-Datei auf Ihrem Server zu speichern und jeglichen Code darin auszuführen.
– Schwester
7. Juni 2018 um 3:54 Uhr
Chetam Okafor
Ich sehe, dass die Frage beantwortet wurde, aber ich möchte eine andere Lösung vorschlagen, die ich als einfach empfand. Gehen Sie zum Routenordner your-app-folder/routes/web.php und registrieren Sie eine neue Route wie folgt
Route::get('/linkstorage', function () {
Artisan::call('storage:link');
});
gehen Sie dann auf Ihre Website www.example.com/linkstorage und Sie gelangen auf eine leere Seite. das ist es. Der Speicherordner wird erstellt. Ich hoffe es hilft jemandem.
Dies ist am einfachsten, es ist nicht erforderlich, den Pfad zu bearbeiten (der in vielen Umgebungen variieren kann). Jedes Mal, wenn Sie zum Produktionsserver migrieren, müssen Sie dies nur aufrufen.
– Toni Tegar Sahidi
19. November 2020 um 2:59 Uhr
Brillant!! Ich weiß nicht, warum das nicht in der offiziellen Laravel-Dokumentation steht … ich denke … Danke.
– Adriana Hernández
2. April 2021 um 11:04 Uhr
Kann bei mir auch nicht funktionieren.. Protokollfehler
– ii iml0sto1
25. August 2021 um 9:34 Uhr
@iiiml0sto1 Sie können auch eine Datei erstellen (z. B. symlink.php) in Ihrem öffentlichen Verzeichnis und fügen Sie die folgenden Codezeilen hinzu <?php symlink('/home/your-host-namespace/public_html/your-app-folder/storage/app/public', '/home/your-host-namespace/public_html/storage'); Sie können den Code auch entsprechend dem Speicherort Ihres Verzeichnisses anpassen. Wenn Sie fertig sind, besuchen Sie www.your-domain.com/symlink.php, und das sollte für Sie ausreichen.
– Chetam Okafor
28. August 2021 um 14:44 Uhr
Abdel Rahman Kamhawy
Löschen Sie den Ordnerspeicher aus dem öffentlichen Bereich und führen Sie diesen Befehl im Cron-Job aus (einmalig):
Das hat bei mir funktioniert, nur dass Sie bei Verwendung von Laravel Sail wahrscheinlich Folgendes ausführen müssen: ln -s /var/www/html/storage/app/public /var/www/html/public/storage
– BootDev
15. Juli um 10:27 Uhr
Ich bin gerade auf dieses Problem gestoßen, und so habe ich es behoben, ohne dass SSH auf den Server zugreifen oder ein CronJob ausgeführt werden musste:
Zum Laravel 5+ (Nicht mit niedrigerer Version getestet)
Sie dürfen verwenden Artisan::call() Methode in Ihrem Route/Controller, um handwerkliche Befehle auszuführen, ohne das Terminal zu verwenden.
$exitCode = Artisan::call('storage:link', [] );
echo $exitCode; // 0 exit code for no errors.
Sie haben mein Projekt gerettet, Männer. Danke
– KirtJ
17. Juni 2020 um 17:35 Uhr
Ich weiß, es ist ein alter Thread, aber wir können ihn durch eine kleine Änderung in Config/filesystem.php ändern
Danke für all eure Hilfenversuchte ich zu laufen php artisan storage:link auf meinem Server und ich habe herausgefunden, dass mein Server deaktiviert ist symlink aus Sicherheitsgründen.
Also habe ich alle meine Bild-Upload-Funktionen geändert, um Bilder in meine hochzuladen public Ordner statt storage Ordner und jetzt funktioniert alles einwandfrei.
Das Hochladen in die Öffentlichkeit wird nicht empfohlen und entspricht nicht der Laravel-Standardkonvention.
– ein Hauch
14. Oktober 2020 um 12:48 Uhr
Das öffentliche Hochladen von @ahinkle ist überhaupt kein Problem, wenn Sie darauf hinweisen, dass andere Ihre Assets in ihre URLs laden können und Ihre Quellen verwenden, können Sie den Zugriff auf Assets von anderen Quellen mit Ihrem Code oder entweder mit Hilfe des Cloudflare-Link-Schutzes jederzeit einschränken .
– mafortis
14. Oktober 2020 um 12:50 Uhr
“Speicher” gibt es aus einem bestimmten Grund. Es ist das Laravel-Speichersystem. Gegeben, warum die andere Antwort mehr Upvotes hat als Ihre ausgewählte Antwort.
– ein Hauch
14. Oktober 2020 um 12:52 Uhr
Ja, nun, es hängt von Hosting-/Serverbeschränkungen ab, die wir auch verwenden, nicht alles in unseren Händen + niemand sucht nach positiven Stimmen, wir sind hier, um Lösungen zu finden. viel Glück
– mafortis
14. Oktober 2020 um 12:59 Uhr
@ahinkle Was schlagen Sie vor, wenn wir aus irgendeinem Grund keine Symlinks verwenden können?
– Lamar
12. Januar 2021 um 6:56 Uhr
ivqonsanada
Was ich getan habe, um dieses Problem zu lösen:
Gehen Sie mit ssh in den Projektordner
Wenn kein öffentlicher Ordner vorhanden ist, erstellen Sie ihn. Wenn Sie bereits erstellt wurden, stellen Sie sicher, dass der Speicher-Symlink, den Sie in der Entwicklung erstellt haben, gelöscht wurde.
tun php artisan storage:link
Verschieben Sie den erstellten symbolischen Speicherlink in den Ordner public_html
erledigt.
Das Hochladen in die Öffentlichkeit wird nicht empfohlen und entspricht nicht der Laravel-Standardkonvention.
– ein Hauch
14. Oktober 2020 um 12:48 Uhr
Das öffentliche Hochladen von @ahinkle ist überhaupt kein Problem, wenn Sie darauf hinweisen, dass andere Ihre Assets in ihre URLs laden können und Ihre Quellen verwenden, können Sie den Zugriff auf Assets von anderen Quellen mit Ihrem Code oder entweder mit Hilfe des Cloudflare-Link-Schutzes jederzeit einschränken .
– mafortis
14. Oktober 2020 um 12:50 Uhr
“Speicher” gibt es aus einem bestimmten Grund. Es ist das Laravel-Speichersystem. Gegeben, warum die andere Antwort mehr Upvotes hat als Ihre ausgewählte Antwort.
– ein Hauch
14. Oktober 2020 um 12:52 Uhr
Ja, nun, es hängt von Hosting-/Serverbeschränkungen ab, die wir auch verwenden, nicht alles in unseren Händen + niemand sucht nach positiven Stimmen, wir sind hier, um Lösungen zu finden. viel Glück
– mafortis
14. Oktober 2020 um 12:59 Uhr
@ahinkle Was schlagen Sie vor, wenn wir aus irgendeinem Grund keine Symlinks verwenden können?
– Lamar
12. Januar 2021 um 6:56 Uhr
Ändern Sie die storage_path-Einstellungen durch public_path
Du verwendest kein
public
Verzeichnis, das Sie verwendenpublic_html
. Ich mag diese Strategie nicht. Erstellen Sie ein öffentliches Verzeichnis inpublic_html
und setze dieurl
zuenv('APP_URL').'/public/storage'
.– Oh Gott warum
6. Juni 2018 um 22:10 Uhr
Sie müssen den Sym-Link auf dem Server neu erstellen, er wird nicht mit übertragen
– ATechGuy
6. Juni 2018 um 22:27 Uhr
@Ohgodwarum tut mir leid, aber ich bin verwirrt, 1)
Make a public directory in public_html
Ich habe Ordner in meinempublic_html
Es wurde erstellt, als ich den Handwerkerbefehl ausführte, 2) habe ich getan'url' => env('APP_URL').'/public/storage',
aber es hat sich nichts geändert, ich kann meine Bilder immer noch nicht abrufen– mafortis
6. Juni 2018 um 22:30 Uhr
@ATechGuy wie mache ich das? Ich habe kein Terminal in meinem Host (nicht sicher!)
– mafortis
6. Juni 2018 um 22:30 Uhr
Sind Sie wirklich sicher, dass Sie verwenden sollten?
$image->getClientOriginalExtension();
? Das würde mir erlauben, eine .php-Datei auf Ihrem Server zu speichern und jeglichen Code darin auszuführen.– Schwester
7. Juni 2018 um 3:54 Uhr