PHP: Copiar imágenes de un servidor remoto al nuestro
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);
El código con curl falla…
Si puedes explicar qué error te da, mejor, porque este código está en varias webs funcionando perfectamente.