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...
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…
Leer más
Cómo consumir un WebService SOAP con PHP

Cómo consumir un WebService SOAP con PHP

Cómo hacer para...
Qué son los WebServices Los WebServices son un mecanismo muy útil para integrar aplicaciones a través del protocolo HTTP, y de ese modo, aprovechar las capacidades de terceros dentro de nuestras propias aplicaciones. Un ejemplo muy común es de las pasarelas de pago, como ser PayPal o MercadoPago. Se basan siempre en la existencia de dos procesos: El cliente (Consumidor)El servidor (Productor) A nivel técnico existen dos operaciones que pueden realizarse a través de WebServices: ConsumirlosExponerlos Uno de los protocolos que pueden utilizar los WebServices es SOAP (Otro muy común es REST). Consumirlos usando PHP es bastante simple, para ello se utiliza la clase SoapClient. Cómo obtener la localización del visitante usando su IP Para este ejemplo usaremos el WebService de cdyne.com para obtener información geográfica en base a la IP buscada. <?php $url = "http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl";…
Leer más
Cómo evitar la inyección SQL  en PHP

Cómo evitar la inyección SQL en PHP

Cómo hacer para...
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…
Leer más
Cómo evitar el auto-logout en una aplicación web hecha en PHP

Cómo evitar el auto-logout en una aplicación web hecha en PHP

Cómo hacer para...
En un proyecto que hice para un cliente me sucedió algo que no había previsto: un formulario dinámico resultó muy largo para la persona que tenía que realizar la carga y, cuando terminó el sistema la deslogueó automáticamente y perdió su trabajo :( Analizando un poco el problema me di cuenta de que la sesión había expirado a pesar de que el usuario estaba interactuando con el sistema... sólo que no se estaba produciendo ninguna comunicación cliente-servidor, ya que toda la acción estaba pasando del lado cliente. La solución que encontré fue diseñar un mecanismo de tipo keepAlive de modo de avisar al servidor que todavía había actividad del lado del cliente (¡y pedir por favor que no dejen afuera!). Lo primero que hice entonces fue agregar este pequeño código…
Leer más
Cómo conectarse a bases de datos distintas de MySQL desde PHP

Cómo conectarse a bases de datos distintas de MySQL desde PHP

Cómo hacer para...
Si bien es casi una redundancia hablar de PHP+MySQL (Algo así como GNU y Linux), la realidad es que esta santa asociación es casi casual. En PHP no existe un motor de base de datos preferido y otros de segunda. No voy a decir que PHP puede conectarse a cualquier motor de bases de datos (Habiendo pasado por la FCEyN aprendí bien a no usar los absolutos con ligereza :)), la realidad es que puede conectarse, de forma muy simple, a una amplia cantidad. A su vez, las opciones son varias, dependiendo principalmente del nivel técnico de quien deba implementar la solución. Paso a explicar: En el escalón más bajo están las funciones propias de php para realizar las conexiones: mysqli_connect para MySQLpg_connect para PostgreSQLsqlsrv_connect para Microsoft SQLServer Y un largo etcétera (Si tenés que conectarte a una…
Leer más
Cómo mostrar resultados de un proceso largo en tiempo real en una aplicación web

Cómo mostrar resultados de un proceso largo en tiempo real en una aplicación web

Cómo hacer para...
Un caso interesante en el que me tocó trabajar fue la implementación de un sistema de gamification para una red social de viajeros en la que trabajaba. Los responsables del producto estaban muy interesados en fomentar la generación de contenido por parte de los usuarios del sitio y se les ocurrió que ofrecer "galardones" a quienes más contenido subían a la plataforma era una buena forma de lograrlo. Dejando de lado la discusión sobre la viabilidad de la estrategia, hay unas cuantas lecciones interesantes desde el punto de vista de la implementación técnica. Algo de información de contexto: Las reglas de obtención de los galardones no eran triviales (Tampoco eran super complejas, básicamente, según el tipo de contenido de que se trataba había un número mínimo de aportes que permitían…
Leer más
Cómo mostrar progreso de procesamiento en un entorno Web

Cómo mostrar progreso de procesamiento en un entorno Web

Cómo hacer para...
Cuando se requiere tratar con un proceso largo se presenta un problema. Existen varias alternativas (algunas las discutíamos acá). Idependientemente de cuál sea la estrategia elegida, el objetivo es siempre el mismo: evitar que el visitante se aburra (o piense que la aplicación se colgó o algo parecido).   Algo que hasta hace un tiempo era impensable (o al menos muy poco práctico) era la posibilidad de ir mostrando progreso a medida que el procesamiento avanza. El truco se compone de tres partes: El front end El script del lado del servidor que ejecuta el proceso El script que reporta el progreso obtenido hasta el momento Del lado del frontend se usa Ajax (y probablemente jQuery o algún otro framework JavaScript) para disparar la acción, algo como: <input type="button" id="trigger" /> <div…
Leer más
Cómo tratar con procesos largos en PHP

Cómo tratar con procesos largos en PHP

Cómo hacer para...
Antes de meternos en los detalles distingamos dos escenarios: PHP dentro del contexto de un WebServerPHP como lenguaje de scripting de algún proceso off-line. Cuando se trata del segundo caso, es posible que existan oportunidades de mejorar el tiempo que insume el proceso, pero, en la gran mayoría de los casos, no pasará de ser una pequeña molestia si no se consigue este objetivo. Cuando estamos en el contexto de WebServer, la molestia puede ser tal que haga que nuestros visitantes abandonen el sitio (Para no regresar jamás). Por otro lado, es de suponer que en un ambiente web la concurrencia es alta (Es decir, un script PHP que está ejecutando está compitiendo contra muchos otros similares a él por el uso de los recursos), con lo cual, el propio sistema suele…
Leer más
Cómo probar tus scripts PHP sin instalar un intérprete

Cómo probar tus scripts PHP sin instalar un intérprete

Cómo hacer para...
No sé si te pasará lo mismo, pero para mi, la posibilidad de escribir (y probar) código sin necesidad de tener mi propia computadora a mano es muy seductora. He probado CodeAnyWhere y está bastante cerca de lo que me gustaría, pero todavía (2017) le falta un poco... imagino que para 2020 será la opción de facto... por el momento hay que conformarse con opciones un poco menos sofisticadas (o llevar la compu a cuestas... lo que prefieras). Pero bueno, cuando se trata de tirar algún comando rápido, hacer alguna prueba de concepto o simplemente matar unos minutos libres, acá te dejo algunas opciones interesantes: Run Write PHP Online Una interfase muy bonita, bien pulida y, lo mejor, interpreta mientras escribís y te da la salida (o el error) inmediatamente. (Me…
Leer más
Cómo debuggear un comando Symfony usando PhpStorm

Cómo debuggear un comando Symfony usando PhpStorm

Cómo hacer para...
En este post voy a mostrarte un caso algo particular de cómo debuggear un script que corre por línea de comandos. Se trata de debuggear un script hecho con el framework Symfony. La particularidad que tiene este escenario es que el código que escibiste (y que querés verificar), no es un archivo php común, si no que es una claseque extiende de ContainerAwareCommand, con lo cual, no es posible invocarla en forma directa. La ejecución de este comando requiere del paso por el script bin/console. Ahora, si te fijás su contenido notarás que no es más que un script php, con lo cual, podría ser debuggeado usando la configuración "estándar" de PhpStorm para estos casos... La idea en definitiva es simple, cuando ejecutás algo como: php bin/console miApp:miComando El script php que…
Leer más