Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Soluzioni in PHP: una galleria di immagini

Come creare una galleria di immagini in PHP senza necessità di un database: codice completo e tutorial di programmazione
Come creare una galleria di immagini in PHP senza necessità di un database: codice completo e tutorial di programmazione
Link copiato negli appunti

Questo è il primo articolo della sezione Soluzioni in PHP, una sezione in cui suggeriamo semplici strumenti di programmazione PHP per le più comuni necessità di un sito Web. Indirizzati soprattutto a programmatori non esperti, possono essere d'aiuto anche a chi di PHP sa tutto, o quasi.

In un Web sempre più multimediale, è di fondamentale importanza includere in un sito Web un sistema per gestire immagini e gallerie. PHP mette a disposizione dei programmatori strumenti eccezionalmente validi per risolvere questi problemi.

In questo articolo realizzeremo, in ogni suo aspetto, un completo strumento per la gestione delle immagini, per la creazione di gallerie e per la loro navigazione, il tutto senza ricorrere al supporto di un database.

Per far ciò sarà necessario che il nostro applicativo possa leggere il contenuto delle directory del nostro sito, creare nuove directory, gestire l'upload delle immagini. L'unica risorsa necessaria sono le librerie GD2 che utilizzeremo per ridimensionare le immagini.

Il codice completo della mini-applicazione può essere scaricato e usato liberamente a partire dal link download presente in alto in questo articolo.

Creazione delle Gallerie

Nel nostro esempio, creare una galleria vuol dire creare una nuova directory. Infatti le nostre gallerie avranno come nome quello della directory che andremo a creare tramite la funzione mkdir($percordoDirectory, $Mode) dove il parametro $Mode corrisponde ai permessi della cartella (es. 0755).

Un'accortezza, dato che i nomi di file e directory non possono contenere spazi, sostituiremo questi con il carattere _ (underscore) utilizzando la funzione str_replace($daSostituire, $sostituto, $stringa), procedura che utilizzeremo più volte nel corso della creazione della galleria. Ovviamente eseguiremo la procedura inversa ogni volta che vorremo procedere alla stampa del nome della galleria.

Potremmo anche dover cancellare una galleria, quindi dovremo cancellare la directory corrispondente utilizzando la funzione rmdir($percordoDirectory). Da notare che questa funzione è in grado di cancellare solo directory vuote, se la galleria contiene delle immagini dovremo procedere alla loro cancellazione (utilizzando unlink($nomeFile)) prima di poter eliminare la directory, vedremo più avanti come creare una funzione che legge il contenuto di una directory e come sfruttare il tutto a nostro vantaggio.

Upload delle immagini

Per procedere all'upload di una immagine faremo ricorso ad una funzione che creeremo appositamente.

function UploadFile ($File, $DirectoryPrincipale, $SubDirectory)
   {
     $NomeFile = $_FILES[$File] ['name'];
     $NomeFile = str_replace(" ", "_", $NomeFile);
     $FileSplit = explode(".",$NomeFile);
     $Estensione = array_pop($FileSplit);
   
     if(strcasecmp($Estensione, "jpg") != 0 && strcasecmp($Estensione, "jpeg") != 0 && strcasecmp($Estensione, "gif") != 0 && strcasecmp($Estensione, "png") != 0)
       {
         return "Il file inserito non è accettato";
       }
     
     
     if (is_uploaded_file($_FILES[$File]['tmp_name']))
       {
         $DestinazioneFile = "".$DirectoryPrincipale."/".$SubDirectory."/".$NomeFile."";
         if(move_uploaded_file($_FILES[$File]['tmp_name'], $DestinazioneFile))
            {
              return "Upload eseguito con successo";
            }
         else
            {
              return "Impossibile eseguire l'upload";
            }
       }     
     else
       {
         return "Il file non è stato caricato";
       }
   }

Alla funzione UploadFile ($File, $DirectoryPrincipale, $SubDirectory) passeremo il valore File corrispondente all'immagine che intendiamo caricare tramite il campo input-file, in più dovremo dire alla funzione qual è la directory principale in cui stiamo lavorando ($DirectoryPrincipale) ed il nome della galleria in cui caricare il file($SubDirectory).

La funzione si preoccupa di verificare che il file caricato sia un'immagine, confrontando l'estensione finale dopo di che la funzione is_uploaded_file($_FILES[$File]['tmp_name']) verifica che il file sia stato effettivamente caricato in una directory temporanea. Ora non resta che spostare il file dalla directory temporanea nella posizione che desideriamo ed eventualmente modificarne il nome move_uploaded_file($_FILES[$File]['tmp_name'], $DestinazioneFile)).

Se tutto è andato bene riceveremo un messaggio che ci comunicherà Upload eseguito con successo. Con le opportune modifiche, questa funzione è ideale per qualsiasi tipo di upload, anche per upload multipli.

Elenco delle gallerie

Sinora ci siamo preoccupati di creare le gallerie e di riempirle di immagini, ora iniziamo a vedere come visualizzare queste gallerie. Sia per elencare le gallerie che per visualizzare le immagini all'interno di ogni galleria utilizzeremo lo stesso metodo, con le opportune differenze.

if ($Contenuto = opendir($DirectoryGallerie))
   {
     while (false !== ($Dir = readdir($Contenuto)))
       { 
         if($Dir != "." && $Dir != "..")
               {
                  $Dir2   = str_replace("_", " ", $Dir);
                  echo $Dir2;
               }
         }
      
      closedir($Contenuto); 
}

Con la funzione opendir($DirectoryGallerie) possiamo aprire la directory che contiene le nostre gallerie per procedere alla lettura del contenuto, lettura che viene effettuata tramite la funzione readdir() che restituisce i nomi dei file contenuti nella directory secondo l'ordine con cui sono memorizzati nel filesystem.

Queste poche righe di codice sono utilizzabili anche per la lettura delle immagini nella galleria

if(strcasecmp($Estensione, "jpg") == 0 || strcasecmp($Estensione, "jpeg") == 0 || strcasecmp($Estensione, "gif") == 0 || strcasecmp($Estensione, "png") == 0)
   {
      $AltDellImmagine = str_replace("_", " ", $FileName);
      $UrlImmagineOriginale = "".$DirectoryDaAprire."/".$FileName."";
      echo "<img src="thumbnail.php?url=".$UrlImmagineOriginale."&x=100&e=".$Estensione."" alt="".$AltDellImmagine."" border="0" />";
}

La differenza tra il codice precedente e questo è nell'if() che permette la visualizzazione solo di file in formato .jpg, .gif e .png.

Si noti che quando andiamo a chiamare il tag <img>, il valore passato come url di destinazione non è quello diretto alla foto, ma viene passato come url un file chiamato thumbnail.php che ha il compito di ricreare una miniatura dell'immagine originale.

Creare una thumbnail

Il file thumbnail.php contiene funzioni appartenenti alla libreria GD. La prima operazione è leggere il l'immagine originaria utilizzando la funzione corrispondente al formato del file

  • ImageCreateFromJPEG($NomeFile) per i file jpeg
  • ImageCreateFromGIF($NomeFile) per i file gif
  • ImageCreateFromPNG($NomeFile) per i file png
  • ImageCreateFromWBMP($NomeFile) per i file bitmap

Dopo aver letto il file dobbiamo provvedere a ridimensionare il file l'immagine utilizzando la funzione ImageCopyResized, dopo di che possiamo procedere a creare la nuova immagine. La funzione ImageJpeg ci permette di mettere in output l'immagine appena creata mostrandola in formato jpeg, ma è anche possibile fare lo stesso con immagini formato png (ImagePng) ed in formato gif (ImageGif) ma solo se si dispone di una versione delle librerie GD inferiore alla 2.0.

Ti consigliamo anche