crear acces directe de storage

crear acces directe de storage en hosting compartit

Quan executes php artisan storage:link, aquest comandament crea un enllaç simbòlic entre public/storage i storage/app/public. Aquest error indica que l'enllaç simbòlic ja existeix, per tant no el pot tornar a crear.

Solució:

  • Revisa si dins de public/ ja hi ha la carpeta storage (que és l’enllaç simbòlic).
  • Si existeix i és funcional, no cal tornar-lo a crear. L'enllaç ja està correctament establert.
  • Si necessites tornar a crear l'enllaç per algun motiu, primer esborra l'enllaç existent:
  • rm public/storage
  • (Pots fer-ho mitjançant Windows Explorer o amb un entorn bash tipus Git Bash) I després torna a executar:
  • php artisan storage:link


1. Entendre el Problema

En un entorn de desenvolupament local, normalment faries servir el comandament següent per crear un enllaç simbòlic del directori storage/app/public al directori public/storage:

php artisan storage:link

Això crea un enllaç simbòlic perquè els fitxers emmagatzemats a storage/app/public siguin accessibles públicament a través de public/storage.

2. Problema en Hosting Compartit

En molts entorns de hosting compartit, és possible que no puguis crear enllaços simbòlics amb el comandament php artisan storage:link a causa de les limitacions del servidor (per exemple, deshabilitació d'enllaços simbòlics per seguretat).

3. Solució Manual en Hosting Compartit

Pas 1: Copia el Contingut Manualment

Com que pot ser que no puguis crear enllaços simbòlics, la solució consisteix a copiar manualment el contingut del directori storage/app/public al directori public/storage.

  • Pas a pas:
    1. Accedeix al teu hosting compartit mitjançant FTP o el gestor de fitxers del cPanel.
    2. Navega fins al directori storage/app/public del teu projecte Laravel.
    3. Copia tot el contingut d'aquest directori.
    4. Enganxa aquest contingut dins del directori public/storage.

Pas 2: Configura el Directori Correctament

És important que cada vegada que afegeixes o modifiques fitxers a storage/app/public, repliquis aquests canvis manualment a public/storage.

4. Automatitzar amb un Script

Si prefereixes no fer-ho manualment cada vegada, pots crear un simple script PHP o utilitzar un script en el teu servidor que faci la còpia de fitxers automàticament.

Exemple de script en PHP per copiar fitxers:

<?php

$source = __DIR__.'/../storage/app/public';
$destination = __DIR__.'/storage';

function copyFiles($source, $destination)
{
    $directory = opendir($source);
    @mkdir($destination);

    while ($file = readdir($directory)) {
        if ($file != '.' && $file != '..') {
            if (is_dir($source . '/' . $file)) {
                copyFiles($source . '/' . $file, $destination . '/' . $file);
            } else {
                copy($source . '/' . $file, $destination . '/' . $file);
            }
        }
    }
    closedir($directory);
}

copyFiles($source, $destination);

Instruccions:

  • Guarda aquest script com copy_storage.php al teu directori arrel de Laravel.
  • Executa’l al servidor mitjançant navegador o una crida HTTP si és necessari.

5. Consideracions

  • Permisos: Assegura't que el directori public/storage té els permisos correctes per permetre l'accés públic.
  • Seguretat: Revisa que el directori storage i altres continguts sensibles no són directament accessibles des del web (evita exposar el directori storage/app completament).

Conclusió

Amb aquests passos, podràs crear un accés directe al directori storage en un hosting compartit, fins i tot si no pots utilitzar enllaços simbòlics. La solució manual és senzilla però efectiva, i pots automatitzar el procés si cal.