Artículos

Cómo mejorar la calidad de tus aplicaciones PHP

Cómo mejorar la calidad de tus aplicaciones PHP

Cómo hacer para...
A nadie le gusta encontrar bugs en sus aplicaciones. Mucho menos que sea el cliente quien los encuentre. ¿Qué podemos hacer para evitar estas desagradables situaciones? Testear. Qué significa testear una aplicación Testear una aplicación puede significar varias cosas pero básicamente, se trata de probar el funcionamiento tratando de confirmar que todo ocurre según lo planeado. La parte desagradable del testing es que sólo puede darnos seguridad de que la aplicación falla. En otras palabras el hecho de que todas las pruebas resulten exitosas puede significar dos cosas: Que efectivamente la aplicación esté libre de erroresQue no hayamos realizado suficientes pruebas Desafortunadamente no es posible determinar si estamos en la situación uno o la dos. ¡Claro que esto no significa que testear no valga la pena! El punto es que…
Leer más

Cómo extraer las imágenes de un PDF usando PHP

Cómo hacer para...
Trabajar con pdfs no es lo más cómodo del mundo.. especialmente cuando se trata de extraer información de ellos. Cuando se requiere realizar una misma tarea muchas veces es sumamente útil crear scripts para automatizar estas tareas. En este ejemplo te mostraré cómo extraer una imagen guardada en un documento como este: Por supuesto que no partiremos desde 0 habiendo tantas librerías disponibles. Qué librería PHP permite leer archivos PDF Existen diversas librerías para leer archivos PDF en PHP. Para este caso, una buena es https://github.com/smalot/pdfparser. Utilizarla es bastante simple. Comenzamos por instalarla usando Composer: composer require smalot/pdfparser Con esto tendremos acceso a objetos de tipo Smalot\PdfParser\Parser con los que podremos interpretar el contenido del archivo sin problemas. Lo próximo entonces es abrir el archivo utilizando las capacidades de la…
Leer más
Cómo testear una aplicación PHP que no usa objetos

Cómo testear una aplicación PHP que no usa objetos

Cómo hacer para...
PHPUnit, al igual que la mayoría de los frameworks de testing, se basa fuertemente en el supuesto de que la aplicación a verificar está desarrollada bajo el paradigma de Orientación a Objetos. Sin embargo, es muy común en nuestros días encontrarnos con aplicaciones tipo spaghetti... ¿es posible hacer testing automatizado sobre ellas? La respuesta es sí. Claro que las respuestas a qué testear y cómo testear son un poco diferentes. Qué puede testearse en una aplicación que no usa objetos Obviamente, no será posible verificar una clase porque... la aplicación no tiene clases. De modo que podemos testear: La página que se presentará al usuario (Lo que podríamos asemejar a un test funcional)El resultado de ejecutar alguna función en particularEl resultado de correr algún script Cómo testear el resultado de…
Leer más
Cómo testear los emails que envía tu aplicación

Cómo testear los emails que envía tu aplicación

Cómo hacer para..., Herramientas
¿Alguna vez te llegó un correo similar a este? Es un hecho: los mails que genera y envía tu aplicación son una parte de ella y, como tal, deben ser testeados. En este artículo te mostraré algunas técnicas que te ayudarán a encarar estas pruebas Testear emails enviando a un único destinatario Una técnica simple es hacer que todos los correos lleguen siempre a un mismo destinatario (a vos). La ventaja de esto es que prácticamente no necesitás nada extra (Nada que no tengas digamos). El problema es que implementar esto puede implicar ensuciar el código con condicionales aquí y allí. Si usas un componente para el envío (Como el Mailer de Symfony), las cosas pueden ser más simples. Basta con especificar el destinatario único en el archivo de configuración…
Leer más
Cómo saber el controlador que maneja una ruta en Symfony

Cómo saber el controlador que maneja una ruta en Symfony

Cómo hacer para...
El framework Symfony es de lo mejorcito que tenemos en el mundillo de PHP (Personalmente es mi favorito por lejos). Para procesar un request se requiere un método de alguna clase (Un controlador). Para decidir cuál es el controlador al que se debe invocar al momento de responder al pedido de un usuario se utiliza un componente llamado Router. Este componente conoce el mapeo entre una URI y dicho controlador. Existen diversos modos de definir este mapeo (por ejemplo mediante annotations). Esto hace que, si una aplicación es grande, puede ser algo complejo encontrar cuál es exactamente el controlador que se esconde detrás de una URL. En este artículo te mostraré un pequeño truco para obtener esa información. Voy a asumir que estás en algún tipo de consola POSIX (Linux,…
Leer más
Cómo resolver el Problema del N+1 en PHP y MySQL

Cómo resolver el Problema del N+1 en PHP y MySQL

Cómo hacer para...
Qué es el problema del N+1 Se trata de un problema de optimización de consultas a una base de datos. Imagina que tienes una base de datos con dos tablas: UsersPhoneNumbers Donde cada usuario puede tener muchos números telefónicos (Relación 1:N). Ahora, imagina que tienes que mostrar un listado de todos los usuarios junto con sus números de teléfono. Una forma de resolverlo sería utilizar una consulta tipo: SELECT * FROM users; Y luego: foreach ($users as $user) { $sql = "SELECT * FROM phone_numbers WHERE user_id = {$user->getId()};"; ... } Lo que sucede aquí es que realizamos una consulta para obtener todos los usuarios y luego, una más por cada uno. De ahí que el número total de consultas que se realizan es N (Número de usuarios) + 1.…
Leer más
Cómo ordenar un array multidimensional en PHP

Cómo ordenar un array multidimensional en PHP

Cómo hacer para...
La estructura de datos más utilizada en PHP es, por lejos, el arreglo. Esto se debe a que la implementación de ellos es extremadamente flexible. Un problema común que nos encontramos es el ordenarlos. Cuando los arreglos son de una única dimensión no hay mucho problema, basta una función como sort, pero cuando el arreglo es una matriz las cosas son un poco más complejas ya que pueden existir diferentes criterios de filtro. Por ejemplo, si tu arreglo se ve así: [ [ 'name' => 'Juan', 'age' => 40, ], 'name' => 'Alberto', 'age' => 60, ], ] El resultado será diferente si queremos ordenar por age que por name Claro que podrías usar una solución diseñada por tí mismo basada en un par de ciclos anidados y seguramente funcionaría,…
Leer más
Cómo redireccionar a un visitante usando PHP

Cómo redireccionar a un visitante usando PHP

Cómo hacer para...
Una necesidad muy común en el desarrollo web es la de redireccionar a un visitante hacia algún otro sitio. Esto sucede cuando el recurso buscado no se encuentra en la URL exacta que se ha solicitado pero se sabe cuál es la correcta. Para qué sirve una redirección Las redirecciones se utilizan fundamentalmente por estos motivos: Para unificar URLs (Por ejemplo para que http://misitio.com y http://misitio.com/ muestren el mismo conenido y los buscadores no las interpreten como contenido duplicado)Para no perder el posicionamiento logrado cuando cambia el contenidoPara evitar que se realicen múltiples veces procesos que deberían realizarse una única vez. Cómo funcionan las redirecciones Cuando un usuario visita un sitio web lo que sucede por detrás es que su navegador se conecta a un servidor y le solicita un…
Leer más
Una aplicación web a prueba de falta de conectividad

Una aplicación web a prueba de falta de conectividad

Ejemplos
A raíz de un artículo que escribí para mi newsletter me llegó esta pregunta: Y como no puedo negarme a un pedido semejante, aquí estoy :) Este va a ser un post algo atípico ya que el protagonista no será, como acostumbro, PHP si no JavaScript, por una razón sencilla: la acción más importante sucederá del lado del cliente y no del servidor. Voy a hacer una aplicación del estilo prueba de concepto, es decir, van a quedar unos cuantos "cabos sueltos" pero la idea es que comprendas el principio detrás de esto. El escenario que planteo es el siguiente: Existe una base de datos en el servidor y muchos clientes interactuando con ella a la vez. Un ejemplo real de esto es una aplicación tipo Google Docs o tal…
Leer más
Cómo usar cookies con PHP

Cómo usar cookies con PHP

Cómo hacer para...
Qué son las cookies No puedo explicar cómo se usan las cookies sin primero tener una idea clara de qué son, ¿cierto? Las cookies (en el contexto de una aplicación web) son datos que se almacenan del lado del cliente y que se envían al servidor junto con cada petición. Cómo funcionan las cookies Para comprender cómo funcionan las cookies es importante repasar un poco el modelo de ejecución de una aplicación web debemos tener en la cabeza dos lugares y momentos diferentes para los que debemos preparar a nuestras aplicaciones: El servidor El cliente El código PHP que escribimos se ejecuta íntegramente del lado del servidor. En el contexto de una aplicación web, esto sucede como respuesta a una petición realizada por un cliente. El servidor responde, usualmente, con…
Leer más