5 gennaio 2015

PHP: leggere dinamicamente immagini da una cartella

Oltre alla funzione opendir, che abbiamo utilizzato in questo post, esiste la funzione glob che, con poche righe di codice, restituisce un array con i nomi dei file, presenti in una cartella, che corrispondono al pattern specificato.

DEMO

Codice PHP:
foreach (glob("nomecartella/*.{jpg,png,gif}", GLOB_BRACE) as $filename) {
    echo "<img class='gallery' src='$filename' alt='' />";
}

Un ciclo foreach scorre gli elementi dell'array individuato dalla funzione glob, elementi che corrispondono al percorso/nome di ogni file immagine con estensione specificata tra le parentesi graffe grazie al parametro GLOB_BRACE che permette di indicare più pattern di ricerca quindi, nel nostro caso, immagini con tre diverse estensioni. Ad ogni iterazione il ciclo genera con echo la riga di codice HTML necessaria per visualizzare l'immagine.

Nell'esempio abbiamo integrato inoltre queste caratteristiche:
  • il nome del file immagine viene assegnato al valore dell'attributo alt
    $nomefile = pathinfo(basename($filename)); 
    [...]
    alt='".$nomefile['filename'].'
  • le miniature quadrate vengono create a partire dall'immagine originale, indipendentemente dal suo aspect ratio, grazie allo script PHP Smart Image Resizer
    src='http://example.com/nomecartella/image.php?width=90&height=90&cropratio=1:1&image=http://example.com/nomecartella/$filename'
  • inserito un link all'immagine originale che viene visualizzata in showbox grazie alla funzione JavaScript descritta in questo post
    $imgsize = getimagesize ($filename);
    [...]
    <a href="$filename" onclick="fullboximg(\"$filename\", $imgsize[0], $imgsize[1], 15, 2); return false;">[...]</a>

Questo il codice PHP completo:
<?php
    foreach (glob("nomecartella/*.{jpg,png,gif}", GLOB_BRACE) as $filename) {
    $imgsize = getimagesize ($filename);
    $nomefile = pathinfo(basename($filename));
    echo "<a href='$filename' onclick='fullboximg(\"$filename\", $imgsize[0], $imgsize[1], 15, 2); return false;'><img class='gallery' src='http://example.com/nomecartella/image.php?width=90&height=90&cropratio=1:1&image=http://example.com/nomecartella/$filename' alt='".$nomefile['filename']."' /></a>";
}
?>


Per approfondire l'argomento:


4 commenti:

  1. salve, esiste qualcosa di completo e che possa essere integrato.. uno script dove cambiare alcuni parametri e usarlo? grazie

    RispondiElimina
    Risposte
    1. Ciao,
      veramente il codice PHP da usare è già tutto presente nell'articolo... comunque adesso lo abbiamo riportato interamente in fondo all'articolo. Dovrai personalizzare il nome della cartella in cui si trovano le immagini e il percorso del sito. Puoi ricavare il resto del codice (CSS e JS) dal sorgente della demo online.
      Ti facciamo presente che lo script per la visualizzazione dell'immagine ingrandita non è responsive.

      Elimina
  2. ok, grazie, io ho scritto così.. ma non carica nulla..
    nomecartella/*.{jpg,png,gif} con https://www.nasosan.it/alima/originali/1/*.{JPG}
    http://example.com/nomecartella/image.php?width=90&height=90&cropratio=1:1&image=http://example.com/nomecartella/ con https:///www.nasosan.it/alima/originali/1/image.php?width=90&height=90&cropratio=1:1&image=https:///www.nasosan.it/alima/originali/1/

    mentre se carico una immagine con lo stesso percorso la visualizzo regolarmente.. https://www.nasosan.it/alima/originali/1/ALima00001.JPG

    può essere che ci sono 5k foto in quella cartella? quindi non riesce a visualizzarle?
    grazie ancora per la velocità e la gentilezza dimostratami. ;)

    RispondiElimina
    Risposte
    1. Ciao,
      il file image.php (Smart Image Resizer) non è presente nella cartella indicata nel percorso assoluto.
      Ti consigliamo di utilizzare la versione modificata da Lucio Rota: trovi il link in fondo all'articolo.

      Imoltre, 5000 foto potrebbero crearti problemi, prova a suddividerle in più cartelle.

      Elimina