Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Utilizar Curl para copiar una imagen de una web en nuestro disco duro


Vamos a ver un ejemplo de utilización de la librería CURL para copiar una imagen que está en una página web a nuestro disco duro.


17/1/07 - Vamos a realizar un ejemplo complejo de utilización de PHP, en el que nos conectamos con un servidor web para recibir un archivo de imagen que está alojado en dicho servidor. Para especificar la imagen que queremos extraer utilizamos la URL y luego especificamos otra ruta dentro de nuestro disco duro, donde copiaremos la imagen que hemos recibido de dicha URL.

Yo he utilizado este código para facilitar la migración automática de un sitio web. El sitio web nuevo tenía una estructura distinta y por eso se tenían que recibir las imágenes para guardarlas en otros directorios. Con esta función, y otras similares, he podido extraer todas las imágenes del sitio web antiguo y colocarlas en los directorios correctos en el sitio web nuevo.

Como decía, vamos a utilizar CURL para realizar esta tarea. Seguro que existen otras maneras de llevarla a cabo, pero esta me ha parecido bastante práctica. Curl es una librería para trabajo y tratamiento de información en URLs, es decir, para hacer cosas con direcciones URL, como explorar el contenido que tienen, copiar el contenido a otros lugares, comprobar la existencia de una URL. He de admitir que no controlo mucho la librería Curl, pero podría decir que es bastante potente y compleja.

CURL se encuentra en PHP

Según la instalación que tengamos de PHP tendremos disponibles, o no, las funciones de la librería CURL. La mejor manera de saber si disponemos de Curl en nuestra instalación PHP es invocar una de sus funciones. Si nos muestra un error de función no existente, es que no tenemos posibilidad de usar Curl. El propio manual de PHP especifica qué debemos hacer para poder utilizar las librerías.

Para poder usar estas funciones, se debe compilar PHP añadiendo el parámetro --with-curl[=DIR], donde DIR apunta al directorio que contiene los directorios lib y include de la librería. En el directorio include, debe existir una carpeta llamada "curl" y que contiene los archivos easy.h y curl.h. Además, debe existir un archivo llamado libcurl.a en el directorio "lib". A partir de la versión de PHP 4.3.0 se puede configurar que PHP haga uso de CURL para el manejo de las conexiones con URLs, mediante la opción --with-curlwrappers.

Nota para los usuarios de plataformas Windows: Para activar este módulo en entornos Windows, se deben copiar los archivos libeay32.dll y ssleay32.dll que se encuentran en la carpeta DLL del directorio PHP/Win32 a la carpeta SYSTEM de Windows, que normalmente se encuentra en C:\WINNT\SYSTEM32 o C:\WINDOWS\SYSTEM.

No obstante, en mi ordenador local utilizo Easy PHP, que es un paquete que te instala el conjunto Apache-PHP-MySQL en tu sistema Windows, sin que tengas que hacer nada, ni aprender a configurar los distintos sistemas. Easy PHP no dispone por defecto de soporte para Curl, pero cambiando una línea del archivo de configuración de PHP (el archivo php.ini) podremos dar soporte a Curl. La línea en concreto es:

;extension=php_curl.dll

Esta línea en principio está comentada, por eso empieza por ";". Simplemente habrá que quitar el "punto y coma" para que EasyPHP disponga de soporte Curl. Aunque no utilizes EasyPHP prueba a descomentar esta línea, si es que no dispones de soporte para CURL.

Función para obtener una imagen de una URL determinada

Vamos a tratar ya el objetivo final del artículo, que es traerse una imagen alojada en una web a nuestro disco duro. Para ello hemos creado una función que recibe dos parámetros. El primero es la URL de la imagen que deseamos obtener y el segundo es el nombre del archivo que queremos generar en el disco duro, donde copiaremos la imagen. El nombre del archivo destino es relativo al documento, pudiendo indicar una ruta relativa, compuesta por varios directorios y un nombre de archivo.

function recibe_imagen ($url_origen,$archivo_destino){
$mi_curl = curl_init ($url_origen);
$fs_archivo = fopen ($archivo_destino, "w");
curl_setopt ($mi_curl, CURLOPT_FILE, $fs_archivo);
curl_setopt ($mi_curl, CURLOPT_HEADER, 0);
curl_exec ($mi_curl);
curl_close ($mi_curl);
fclose ($fs_archivo);
}


En esta función se da de alta una sesión CURL, con curl_init($url_origen), en donde pasamos la URL a la que deseamos acceder.

Luego utilizamos las funciones del sistema de archivos de PHP para crear un nuevo archivo en el disco duro del ordenador. Si nos fijamos, se indica el archivo destino y el parámetro "w" que quiere decir que la conexión con el archivo es para escritura.

Luego indicamos un par de opciones en la sesión CURL.

curl_setopt ($mi_curl, CURLOPT_FILE, $fs_archivo);
curl_setopt ($mi_curl, CURLOPT_HEADER, 0);

La más importante es la primera, en la que se indica el valor CURLOPT_FILE, donde se asigna el archivo en el que se va a guardar los datos de la URL. El parámetro $fs_archivo debe ser un recurso de tipo stream o flujo de datos. En este caso es el archivo destino, conectado con el sistema de archivos del servidor anteriormente en la misma función.

La segunda opción definida hace que el encabezamiento no se incluya en la salida.

Para continuar, ejecutamos la conexión CURL con curl_exec() y por último, se cierran tanto la conexión CURL como el archivo donde hemos guardado la imagen.

Conclusión

CURL es una librería muy potente. Esta es sólo una de las utilidades de la librería, que puede servir de ejemplo para entender el uso y dar pie a otras utilidades interesantes. Podría haberse complicado un poco el script simplemente comprobando que la URL indicada en el parámetro es correcta o realizando otro tipo de acciones de validación o tratamiento de la imagen recibida en la URL.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 1 comentario (Añadir)
+ 3 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Miguel Angel Alvarez*
Director de DesarrolloWeb.com

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de PHP

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Scripts en PHP


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestra un comentario revisado

 Comentario de Bruj0
23/1/07 
Hola, podria alguien indicar como seria para verificar que el archivo existe o que la ruta es correcta? gracias

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 3 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de PHP
Categorías
+Scripts en PHP

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia