Cuando realizamos una web, es conveniente no tener las imágenes en servidores de terceros, sino en nuestros propios servidores, o en un CDN. ¿Cómo descargamos las imágenes de otro servidor?

Podemos hacerlo de varias formas:

$url = "http://www.dominio.inicial/imagen.png";
$dir = "/var/www/directorio/fisico/en/nuestro/server/local/";

$archivoInicial = fopen($url, "r");
$archivoFinal   = fopen($dir . basename($url), "w");

while(!feof($url)) 
    fwrite($archivoFinal, fread($archivoInicial, 1), 1);

fclose($archivoFinal);
fclose($archivoInicial);

O:

$imagen = file_get_contents("http://www.dominio.es/imagen.png");
$save = file_put_contents('/var/www/directorio/servidor/destino/imagen.png',$imagen);

Y la más eficiente de todas, si tenemos que descargar muchas imágenes, es hacerlo con cURL:

$url = "http://www.dominio.com/imagen.png";
$dir = "/var/www/directorio/local/";
$archivoFinal = fopen($dir . basename($url), "w");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
curl_setopt($ch, CURLOPT_FILE, $archivoFinal);

fclose($archivoFinal);
curl_close($ch);