Come salvare un’immagine remota sul proprio server con PHP

In prima battuta, starai pensando: “A cosa potrebbe servirmi scaricare un’immagine tramite PHP?”. Le risposte possono essere molteplici, si tratta di una pratica molto più diffusa di quanto tu creda, ma sicuramente uno dei motivi che vanno per la maggiore è lo scraping.
Immagina infatti di dover inserire le immagini ai centinaia di prodotti del tuo e-commerce, sarebbe impensabile farlo una per una!
Se invece tu avessi la lista delle URL delle immagini da associare, residenti su vari siti, ecco che questo snippet diventa più utile che mai!
- Leggi l'articolo, ti bastano solo 2 minuti, 40 secondi
Sei di fretta? Scarica il PDF e consultalo quando vuoi!
Il codice
La prima cosa da fare, ovviamente, è prelevare l’immagine dal server su cui risiede. Per farlo è sufficiente avere a disposizione la URL completa dell’immagine ed utilizzare la funzione nativa PHP file_get_contents(). Ad esempio, volendo prelevare il logo di WordPress dal sito ufficiale:
<?php // Preleva l'immagine dal server remoto $url = 'https://s.w.org/about/images/logos/wordpress-logo-stacked-rgb.png'; $image = file_get_contents( $url );
Bene, ora che abbiamo “prelevato” il contenuto della URL, non ci resta che salvarlo sul nostro server, utilizzando la funzione opposta, file_put_contents():
<?php // Scrive l'immagine sul proprio server $path = '/logo_wp.png'; file_put_contents( $path, $image );
Ed il gioco è fatto! In pochissime righe, abbiamo effettuato il download dell’immagine remota e l’abbiamo salvata sul nostro server. Nell’esempio, abbiamo assegnato un nome arbitrario all’immagine salvata (logo_wp.png) e l’abbiamo posizionata nella root del nostro server, ma ovviamente, modificando il valore della variabile $path potrai assegnare il percorso ed il nome che preferisci.
Riassumendo, ecco il codice completo; crea un file .php (ad esempio: preleva_immagine.php) sul tuo server ed inserisci al suo interno:
<?php // Preleva l'immagine dal server remoto $url = 'https://s.w.org/about/images/logos/wordpress-logo-stacked-rgb.png'; $image = file_get_contents( $url ); // Scrive l'immagine sul proprio server $path = '/logo_wp.png'; file_put_contents( $path, $image );
Ora richiama la URL del file, ad esempio:
https://www.tuodominio.com/preleva_immagine.php
e controlla nel tuo FTP: come per magia troverai il file logo_wp.png!
Ma non fermarti in superficie! Per approfondire l’argomento, ti consiglio di dare un’occhiata alla documentazione ufficiale della funzione file_get_contents():
ed alla documentazione della sua complementare, file_put_contents():