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:
1 2 3 4 5 6 7 8 9 10 11 |
$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:
1 2 |
$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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$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.