Cómo debuggear una aplicación PHP sin usar var_dump

Cómo debuggear una aplicación PHP sin usar var_dump

Cómo hacer para..., Uncategorized
Una de las tareas que más tiempo consume durante el desarrollo de una aplicación (web o no) es el debugging. Ese momento en que estás seguro de que todo anda bien, pero por las dudas... hay que probarlo. Y, como siempre, algo no sale exactamente como esperabas. Es entonces cuando te toca arremangarte, buscar una nueva taza de café, silenciar el teléfono y hurgar. El modo común de encarar esta tarea en el universo php es usar mucho la función var_dump (Algo bastante feo de lo que hablo en más detalle en mi libro). Asumiré que ya sabés de qué se trata xdebug, que ya está instalado y configurado en tu entorno y que estás familiarizado (un poco al menos) con PhpStorm. Desde dentro del IDE podés lanzar tu aplicación usando el botón…
Read More

Cómo funciona el conversor de parámetros de Symfony

Cómo hacer para..., Uncategorized
Cada vez que conozco más del framework Symfony, más me gusta :). Esto que te voy a mostrar a continuación me pareció un acto de magia cuando me lo crucé por primera vez: el conversor de parámetros. En la mayoría de los Controllers (especialmente cuando se trata de CRUDs), se recibirá algún parámetro que será la clave para encontrar el objeto sobre el que se quiere realizar la operación, por ejemplo: public function showAction(Request $request) { $client = $this->getDoctrine()->getRepository('AppBundle:Client')->find($request->getParameter('id'); if ( $client ) { ... } else { // 404 } } Es muy común ver código de este tipo. De hecho, si lo miramos desde un poco lejos notaremos que hay una estructura en común en estas operaciones: Buscar el objeto Si se encontró, procesar normalmente Si no se…
Read More
Cómo logear errores con PHP

Cómo logear errores con PHP

Cómo hacer para..., Uncategorized
Es una realidad conocida por todos los programadores el hecho de que, por más esfuerzo que pongamos, los usuarios se las arreglan para encontrar errores antes que nosotros :). No sólo eso, lo más probable es que, al reportar un error (o intentar hacerlo), no tengan mucho más para decirnos que "No hice nada y el sistema se colgó"... evidentemente, no es un panorama muy alentador como punto de partida para encontrar (e implementar) una solución, ¿cierto? Es ahí donde tener un buen log de errores puede hacer la diferencia entre perder el relax del fin de semana o dejar a superman opacado en los ojos del cliente. Veamos entonces algunas técnicas para contar con esa información cuando se la necesita (y sí... tarde o temprano la vas a necesitar). La…
Read More
Qué es y para qué sirve PHP Mess Detector

Qué es y para qué sirve PHP Mess Detector

Herramientas
PHPMessDetector es una herramienta que ayuda a detectar código defectuoso en proyectos PHP (Muy útil a la hora de realizar auditorías de código ajeno). Se basa en el análisis automatizado del código utilizando conjuntos de reglas. Estas reglas buscan detectar código mal estructurado, mala nomenclatura, métodos exageradamente grandes, ciclos ineficientes y demás. Está preparado para emitir su salida en diferentes formatos (Texto, XML, HTML). Su uso es bastante simple, hay que instalarlo y luego corre como una utilidad de línea de comandos. Por ejemplo, corriendo el comando php phpmd.phar . text naming Sobre una base de código algo dudoso, obtuve un resultado como este: /home/mauro/sitio/authorize/authorizenet.php:11 Classes should not have a constructor method with the same name as the class/home/mauro/sitio/authorize/authorizenet.php:11 Classes should not have a constructor method with the same name as the…
Read More
¿Una clase abstracta siempre tiene que tener un método abstracto?

¿Una clase abstracta siempre tiene que tener un método abstracto?

Uncategorized
Respuesta corta: NO (Al menos en PHP). ¿Querés los detalles? Seguí leyendo... Esta pregunta surgió en una clase de POO y me pareció interesante compartir la respuesta ya que no es realmente trivial. El ejemplo que estábamos viendo era el siguiente: Teníamos un sistema que manejaba clientes, con lo cual, contaba con una clase Cliente: class Cliente { private $nombre; private $apellido; private $cuit; private $email; public function __construct( $nombre, $apellido, $cuit, $email ) { $this->setNombre($nombre); ... } public function setNombre( $nombre ) { $this->nombre = $nombre; } ... } Pronto vimos la necesidad de especializar esta clase en tres subclases diferentes: class PYME extends Cliente { } class PersonaFisica extends Cliente { } class Multinacional extends Cliente { } Dado que los requerimientos del sistema quedaron más claros y era…
Read More
Cómo manipular imágenes usando PHP

Cómo manipular imágenes usando PHP

Cómo hacer para..., Uncategorized
ImageMagick es una aplicación muy potente para la manipulación de imágenes. Por lo general, se utiliza desde la línea de comandos en ambientes Linux. ImageMagick es capaz de trabajar con una amplia variedad de formatos de imágenes y realizar una gran cantidad de transformaciones sobre ellas. PHP cuenta con una API propia para que su utilización sea sencilla (Obviamente, requiere que primero se instalen las bibliotecas necesarias): la clase Imagick. Una instancia de Imagick trabaja asociándole una o más imágenes al momento de su construcción (pasándole un string o un array según el caso): $ig = new \Imagick("mi_imagen.jpg"); $ig2 = new \Imagick( ["mi_imagen.jpg", "otra_imagen.png"]); A partir de ese momento es posible realizar modificaciones a la imagen simplemente invocando los métodos de la clase, por ejemplo: $ig->resizeImage( $width, $height, \Imagick::FILTER_BOX, 0.9 ); Permite…
Read More
Cómo alterar la configuración de PHP sin acceder al php.ini

Cómo alterar la configuración de PHP sin acceder al php.ini

Cómo hacer para..., Uncategorized
Existen situaciones en las que necesitamos modificar ciertos parámetros de la configuración de PHP (Por ejemplo, la cantidad de memoria permitida para un script o el tiempo máximo de ejecución) para que cierto código funcione correctamente. Desafortunadamente, no siempre podemos hacerlo del modo normal, es decir, modificando el archivo php.ini. Es más, existen casos en los que no querremos que estos cambios tengan efecto en scripts diferentes del que estamos desarrollando. El típico caso en que esto sucede es un entorno de hosting compartido. Algunos proveedores dan acceso a una versión particular del archivo por cada sitio que alojan, aunque la mayoría no lo permiten en absoluto (Es lógico si se piensa un poco, un servidor en el que corren muchas aplicaciones debe hacer un gran esfuerzo por evitar que un…
Read More
Cómo consumir un WebService SOAP con PHP

Cómo consumir un WebService SOAP con PHP

Cómo hacer para..., Uncategorized
Los WebServices son un mecanismo muy útil para integrar aplicaciones a través del protocolo HTTP. Una de las formas en que se implementan estos mecanismos es a través de SOAP. Consumirlos usando PHP es bastante simple, para ello se utiliza la clase SOAPClient. Veamos un ejemplo de cómo consultar la localización física según la IP: <?php $url = "http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl"; try { $client = new SoapClient($url, [ "trace" => 1 ] ); $result = $client->ResolveIP( [ "ipAddress" => $argv[1], "licenseKey" => "0" ] ); print_r($result); } catch ( SoapFault $e ) { echo $e->getMessage(); } echo PHP_EOL; En este caso, este script debería ser corrido desde CLI (Por ejemplo, si lo guardás como "ws.php", al ejecutar php ws.php 210.45.151.101 obtendrás la salida: stdClass Object ( [ResolveIPResult] => stdClass Object ( [City] => Huainan…
Read More
Un motor de sugerencias en PHP

Un motor de sugerencias en PHP

Uncategorized
Otro desafío interesante que me tocó encarar junto a mi equipo en el desarrollo de una red social de viajes fue el Sugeridor de Opinables. Una de las características que tenía el sitio en que estaba trabajando era la posibilidad de que los usuarios dejaran opiniones (o reseñas mejor dicho) sobre lugares que habían visitado (en general hoteles, restaurantes, atractivos, etc...). En un determinado momento, para el negocio se volvió sumamente importante incrementar la cantidad de reseñas (obviamente debían ser auténticas, no inventadas por robots ni plagiadas de otros sitios). Una idea que tuvimos junto con el equipo de producto fue la de intentar "adivinar" sobre qué otros lugares podría un usuario dejar su reseña, sabiendo qué lugares había visitado. Lo que debíamos lograr era algo similar a esto: Pero había una…
Read More
Cómo prevenir los ataques por SQL Injection en aplicaciones PHP

Cómo prevenir los ataques por SQL Injection en aplicaciones PHP

Cómo hacer para..., Uncategorized
Uno de los fantasmas más temidos por quienes contratan servicios de desarrollo (especialmente cuando se trata de su primera experiencia) es el de los ataques de hackers. Si bien es imposible asegurar al 100% un sistema (de software o de cualquier otro tipo), existe una serie de buenas prácticas que disminuyen sensiblemente la probabilidad de ocurrencia de tales ataques (o al menos, su probabilidad de éxito). Por lo general, los ataques se basan en la explotación de código vulnerable como ser algún caso raro que el desarrollador no tuvo en cuenta. Uno de los ataques más usuales es el conocido como sql injection. De lo que se trata es de ejecutar código sql sin autorización. Los scripts de PHP que no están bien escritos pueden ser atacados de esta forma. Veamos un ejemplo: <?php $sql…
Read More