PhpPer motivi di lavoro, oggi mi sono trovato di fronte a questa difficoltà: verificare se esiste un’immagine – prima di stamparla tramite html – che potrebbe essere anche un’immagine remota su un altro server/dominio, ovvero controllare a partire dall’url dell’immagine.

Se l’immagine è sul filesystem, come probabilmente già saprete conviene sicuramente utilizzare la funzione file_exists, che funziona indistintamente per qualsiasi tipo di file. Per i file remoti sembra invece che non esista una funzione analoga, almeno non una funzione pensata specificatamente per questo scopo. In rete si consiglia di utilizzare file_get_contents, che dovrebbe (non ho provato…) funzionare perfettamente e che però non dovrebbe essere proprio il massimo in termini di performance, visto che – come recita lo stesso manuale – la funzione “reads entire file into a string”, che è troppo per la nostra esigenza iniziale.

Ho invece risolto ricorrendo all’uso di getimagesize, una funzione (anche molto sofisticata) pensata originariamente per leggere le dimensioni di un’immagine. Il ragionamento è semplice: se restituisce le dimensioni dell’immagine che vogliamo verificare, evidentemente l’immagine esiste; se le dimensioni non sono restituite, il contrario. Semplice.

Per facilitarsi la vita, è sufficientemente quindi riscrivere la funzione, sia per inserirla nelle nostre librerie, sia per far sì che in ogni caso restituisca un valore booleano:

function image_exists($url) {
   if(getimagesize($url))
      return(TRUE);
   else
      return(FALSE);
}

Fine. Non penso si possa rendere la questione più semplice di così.
Ricordate che se l’url contiene dei caratteri speciali, qualsiasi sia la vostra scelta dovrete comunque affidarvi a urlencode per la codifica.

Espandi/comprimi Commenti
Mirko
(09/09/2011, 12:09)

Grande era proprio quello che cercavo!!!

Andrea
(23/01/2012, 00:05)

Mille grazie per questo tutorial. Stavo impazzendo per trovare una soluzione e non conoscevo un metodo per risolvere.

:)

XHTML - Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>