Qué es cURL

En estos artículos vamos a conocer una de las herramientas más interesantes que PHP nos ofrece para conectar nuestra aplicación con servidores externos, para intercambio de datos. Se trata de cURL. Las conexiones por cURL llegan, a menudo, a donde no llegan otras formas de comunicación, lo que lo convierte en un preciado recurso. QUÉ ES cURL Esto es lo primero que tenemos que tener claro. cURL es una librería, disponible en el sistema operativo, orientada a la transferencia de archivos. Por defecto está en los sistemas de *nix, como es el caso de las distintas distros de Linux. Eso no quiere decir, por supuesto, que una herramienta tan útil no esté disponible, también, para Windows. Puedes obtenerla en https://curl.haxx.se/windows/. Además, cURL es también un intérprete de comandos, gestionado por el lenguaje que empleemos para programar nuestra aplicación, que nos permite emplear sus prestaciones. En estos artículos hablaremos del uso de cURL con PHP, pero también está disponible desde Python, C, Java y, en general, desde cualquier lenguaje de programación. El centrarnos en PHP es debido a la amplísima difusión que este lenguaje tiene en el mundo del desarrollo web, así como a las facilidades que nos ofrece. La librería …

Seguir leyendo

Inicializar cURL en PHP

Ahora que ya tenemos una idea de lo que es cURL, vamos a ver como emplearlo desde PHP para leer o escribir datos desde nuestra aplicación en un servidor remoto al que podamos acceder por alguno de los protocolos que cURL emplea. Como hemos visto en el artículo anterior, son suficientes para cubrir casi cualquier necesidad que se nos pueda presentar. Y digo casi, porque siempre habrá algún repositorio de datos antiguo que use algún protocolo descatalogado, en alguna parte. Con eso no se puede luchar. Afortunadamente, no es el caso habitual. En desarrollo web se tiende, cada vez más, a usar estándares aprobados por el consorcio y aceptados por la comunidad (por suerte). INICIALIZAR UN RECURSO cURL Para poder usar la librería, debemos crear un recurso que haga uso de las prestaciones de PHP para la gestión de cURL. Un recurso es un manejador, como los que se emplean para lectura o escritura de ficheros, o para conexión con bases de datos, etc, sólo que orientado, específicamente, a la librería cURL. Para crear este recurso, y configurarlo adecuadamente para que funcione necesitamos contar con los siguientes datos: Protocolo. El protocolo por el que se establecerá la conexión con el …

Seguir leyendo

Enviando archivos por cURL

En el artículo anterior hemos hecho el trabajo “pesado” de configurar nuestra conexión cURL, salvo un par de detalles que dejamos, específicamente, para este artículo. Aquí vamos a ver como enviar archivos por cURL a un servidor remoto, de tipo FTPS, con protocolo FTP implícito sobre TLS (el caso más rebuscado de configurar). De este modo, seremos capaces de programar cualquier envío por cURL. ATENCIÓN. Recuerda que PHP te ofrece otros tipos de conexión para transferencia de archivos, como puedan ser ssh2_connect() o ftp_connect(), que no recurren a cURL. Sin embargo, en casos como el propuesto, donde usamos FTP implícito sobre TLS, ninguna de estas alternativas funciona, por lo que cURL es, en muchos casos, la única solución aceptable y, en última instancia, cURL siempre funciona, sea cual sea el protocolo, si está correctamente configurado. USANDO cURL PARA ENVÍO Ya casi tenemos todo listo para hacer el envío de un fichero a un servidor remoto por cURL. Empecemos viendo lo que ya tenemos declarado y explicado:

El siguiente paso es establecer la ruta del directorio del archivo remoto donde se depositará el contenido que enviemos por cURL. Este directorio deberá existir en el servidor remoto, ya que cURL no …

Seguir leyendo

cURL. Más modos de envío.

En el artículo anterior vimos como subir el contenido de un archivo, situado en la ubicación de nuestra aplicación, a un servidor remoto empleando cURL. En este artículo vamos a comprender como ocurre ese proceso, y comparar la forma de hacerlo con otro método, para el caso de aquellos archivos que, por su tamaño u otras circunstancias, no puedan ser enviados con tanta facilidad, y como solucionarlo mediante un flujo de datos. CREAR UN FLUJO DE DATOS Un flujo de datos, dentro del contexto de PHP, es una manera de canalizar el contenido de un fichero en un archivo temporal, empleando un protocolo nativo del propio lenguaje. Observa el siguiente código:

Observa que $stream es un manejador que crea un archivo, al que llamamos temp, bajo una envoltura específica del lenguaje, llamada php://. El lenguaje incorpora distintas envolturas para encapsular contenidos de acuerdo con el uso que se les quiera dar. La envoltura php:// está diseñada, específicamente, para su uso en flujos de datos, como se detalla en este enlace. El uso de php://temp crea un archivo temporal (que desaparece cuando se cierra el manejador). La alternativa sería, por ejemplo, usar php://memory. Sin embargo, en previsión de que el …

Seguir leyendo

Leer archivos por cURL

Ya sabemos como podemos enviar archivos vía cURL a un servidor remoto, que, conceptualmente, era la parte más compleja. En este artículo vamos a aprender como leer un archivo remoto y grabarlo en el servidor donde tenemos nuestra aplicación. Los cambios necesarios son mínimos, pero necesarios para poder llevar la lectura a buen puerto. PRECAUCIONES Para leer un archivo desde un servidor remoto y grabarlo en el servidor de nuestra aplicación, debemos tomar dos precauciones específicas: En primer lugar, la ubicación de nuestro servidor donde vayamos a grabar los contenidos que leamos del remoto debe tener permiso de escritura. Esto parece una obviedad, pero, a menudo, se tiende a olvidarlo. La opción CURLOPT_UPLOAD debe desactivarse (valor false). De lo contrario, se perderá el contenido del archivo en el servidor remoto, y se grabará un archivo vacío. Esto es importante porque esa pérdida del contenido afecta, directamente, al archivo del servidor remoto, y es irreversible. Por lo tanto, antes de iniciar la lectura, y después de inicializar el manejador de cURL, emplearemos el siguiente comando: curl_setopt($curl_handle, CURLOPT_UPLOAD, false); Con estos dos detalles en mente, no tendremos problemas en leer archivos remotos, y grabarlos en nuestro servidor, como se describe en este …

Seguir leyendo

Clase para usar cURL en PHP

En los artículos anteriores hemos aprendido a usar cURL con PHP. Por supuesto, hay una gran cantidad de opciones que no hemos tratado. Es lógico. Son tantas que, prácticamente, necesitaríamos un libro para analizarlas todas detalladamente. Sin embargo, con las que ya conocemos podemos sacarle mucho partido a cURL. Y, claro, ahora vamos a lo cómodo. Nos creamos una clase, que ya la tendremos y nos servirá para cualquier proyecto. Después, mostraremos un ejemplo de uso de esa clase, instanciándola en un objeto, para comunicar nuestra aplicación con un servidor remoto. LA CLASE Curl_Connect El código de la clase que podemos usar para enviar ficheros a un servidor remoto, o recibirlos del mismo, usando cURL es Curl_Connect.class.php, con el siguiente listado:

No vamos a entrar en muchos detalles aquí sobre el funcionamiento de cada método, porque todo lo que contienen se ha explicado en los artículos previos de esta serie, por lo que sería repetirnos. La clase se basa en un manejador de cURL (llamado $ch por curl handle). Emplea cuatro métodos: un constructor y un destructor que son de los llamados métodos mágicos de PHP (puedes leer más sobre métodos mágicos en este enlace). Como ya sabes, el …

Seguir leyendo

Editar formularios PDF con PHP (I)

A veces nos encontramos con con documentos PDF que contienen campos de formulario que deben ser cumplimentados por un usuario. Esto, por ejemplo, es muy habitual en documentos de las Administraciones públicas, aunque muchas corporaciones privadas también los emplean. En ocasiones debemos incluir estos formularios en nuestro sitio con algunos de esos campos precumplimentados, con valores estándar, para facilitarles la tarea a los usuarios. Aunque pueda parecer que un documento PDF es un formato cerrado, que es como te lo dan, y es poco lo que se puede hacer con él, con los recursos adecuados es fácil “trabajarlo” del modo que necesitemos.

Editar formularios PDF con PHP (II)

En el artículo anterior preparamos el escenario para poder editar, por programación, el contenido de campos de formulario en archivos PDF. En este artículo vamos a ver, ahora que ya tenemos preparado lo básico, conceptos fundamentales de la edición de campos en formularios PDF. Explicaremos cómo funciona la utilidad PDFTK para esta finalidad. En el próximo artículo veremos el funcionamiento del ejemplo práctico que vamos a usar, que podrás descargar para experimentar, y veremos como está estructurado, y como lleva a cabo el proceso deseado, hasta obtener el resultado buscado.

Editar formularios PDF con PHP (y III)

Ahora sí. Ya tenemos el conocimiento básico acerca de qué queremos hacer, qué herramientas vamos a usar, y cómo está constituido, internamente, un formulario PDF con campos editables. Ha llegado el momento de poner los dedos sobre el teclado, y empezar a programar. En este artículo vamos a ver como actúa todo el proceso PHP necesario.

Los datos de un control select múltiple

En esta ocasión vamos a revelar un sencillo truco para obtener los datos de un control de tipo select, cuando admite múltiples opciones (cuando tiene el atributo multiple). Como sabes, tú puedes incluir en tu formulario un selector de opciones que le permita al usuario escoger varias de ellas. Lo importante es que debemos ser capaces de recoger, en un script de destino, todas las respuestas elegidas por el usuario. Un ejemplo del tipo de selector del que hablamos sería el siguiente:

Vaaaale. Se nota que me gusta el “alpiste” 😉 .  Bromas aparte, si el usuario selecciona más de una opción, y envía el formulario, intentamos recuperar, en el script de destino (es PHP, pero podría ser cualquier otro lenguaje), las opciones elegidas, así: $bebidas = $_POST[“bebidas”]; Y ya tenemos el problema. Sólo nos aparece la última opción de las seleccionadas. Por ejemplo, si el usuario ha seleccionado las opciones con los valores 1, 5 y 6, en la variable $bebidas sólo aparece el valor 6. Los otros se han perdido. La solución a esto es tan simple que resulta paradójico que muchos desarrolladores, incluso con años de oficio, no la conozcan, pero esta entrada está porque me …

Seguir leyendo