Laravel, otro framework de PHP

Últimamente no dejan de llegarme noticias de frameworks de PHP por todos los lados. Conozco una persona que parece que cada mes tiene que cambiar de framework (!?).

El último que me han contado es Laravel. Es interesante el API que tiene para el acceso a la base de datos, Fluent Query Builder, que intenta proporcionar un interfaz cercano al lenguaje natural, como por ejemplo:

Retrieving a single record from the database:

$user = DB::table('users')->first();

Retrieving a single record by its primary key:

$user = DB::table('users')->find($id);

Y también he encontrado algo que en otros frameworks no he visto: Redirecting With Old Input. Si te dedicas al desarrollo web, sabrás de qué estoy hablando y dirás “¡ajá”.

¡Cada vez se pone más difícil elegir un framework!

¿Es lento PHP?

¿Lento o rápido? Depende de con qué se compare…

En el artículo New Year’s Benchmarks podemos encontrar el resultado de una prueba que consistía en comparar el tiempo de ejecución de diferentes frameworks de PHP: Cake, Solar, Symfony y Zend. También realizaron una prueba base en la que compararon “sólo HTML” y PHP. El resultado de esta comparación fue:

framework 1 2 3 4 5 avg
baseline-html 2613.56 2284.98 2245.98 2234.94 2261.01 2328.09
baseline-php 1717.74 1321.49 1292.86 1511.40 1327.35 1434.17

Como podemos ver, PHP supone un procesamiento que hace que el tiempo de respuesta sea significativamente menor.

Cualquiera puede realizar un experimento similar con la herramienta Apache HTTP server benchmarking tool, que suele estar disponible con cualquier instalación de Apache. Con esta herramienta podemos descubrir cuántas peticiones por segundo es capaz de responder cualquier instalación de Apache.

Por ejemplo, podemos realizar un experimento para ver qué es más rápido, escribir “¡Hola mundo!” directamente en HTML o desde PHP.

Es decir, tenemos dos páginas, una sólo contiene HTML:

<!DOCTYPE html>
<html>
<head>
<title>Prueba</title>
</head>
<body>
<p>
¡Hola mundo!
</p>
</body>
</html>

La otra contiene un pequeño fragmento de PHP:

<!DOCTYPE html>
<html>
<head>
<title>Prueba</title>
</head>
<body>
<p>
<?php
 echo "¡Hola mundo!";
?>
</p>
</body>
</html>

Los resultados de HTML estático:

Apache es capaz de devolver 2280 peticiones por segundo cuando se trata de la página con HTML estático.

Los resultados de PHP:

Apache es capaz de devolver 1439 peticiones por segundo cuando se trata de la página con código PHP.

Como podemos ver, otra vez la ejecución de una página con PHP, por poco que sea, supone una gran penalización.

Lecciones aprendidas de los errores cometidos en PHP y JavaScript por un programador

Los errores son algo que me fascinan, por el poder que tienen (las consecuencias de un único error en un programa pueden ser desastrosas) y por lo mucho que se puede aprender de ellos.

En este blog tengo una colección de entradas dedicadas a los errores.

El artículo My Favorite Programming Mistakes es una interesante recopilación de los errores más interesantes que un programador (el que escribe el artículo) ha cometido en JavaScript y PHP. Vale la pena leerlo, seguro que muchos habremos cometido errores parecidos más de una vez.

Yii, un nuevo framework para PHP

A la larga lista de frameworks para PHP (Cake-PHP, CodeIgniter, symfony, etc.) se añade uno nuevo: Yii.

Según la página web de Yii:

Yii is a high-performance PHP framework best for developing Web 2.0 applications.

Yii comes with rich features: MVC, DAO/ActiveRecord, I18N/L10N, caching, authentication and role-based access control, scaffolding, testing, etc. It can reduce your development time significantly.

Error en la web de twittaré

twittaré, un ejemplo de lo que no hay que hacer: en la versión de desarrollo, hay que desactivar la visualización de los errores, los usuarios no saben qué es PHP, el paso por referencia o el valor de una variable, errores que aparecen en este sitio web desde hace ya más de 2 semanas. ¿Qué pasa, no hay nadie ahí?

En el ordenador de desarrollo se tienen que activar todos los errores: el programador tiene que saber todo lo que ocurre en todo momento. Sin embargo, en el ordenador de producción interesa todo lo contrario: cuando se produzca un error, al usuario (y quizás, posible atacante) se le debe proporcionar el mínimo posible de información. Pero eso sí, debemos emplear algún mecanismo para estar al tanto de todos los errores que se produzcan: por ejemplo, el envío de un correo electrónico con información sobre el error producido o el almacenamiento en un fichero de registro.

Algunas funciones de PHP que se deben conocer para realizar una gestión de errores propia:

Secuestro de sesiones en PHP

Ayer estuve con un alumno hablando sobre el secuestro de sesiones en PHP (session hijacking). Me refiero a PHP porque es la tecnología que empleamos en la asignatura Programación en Internet, pero también se puede aplicar a otras tecnologías, como ASP, ASP.net o JSP.

Secuestra una sesión consiste en capturar el identificador de sesión de un usuario en una aplicación (normalmente almacenado en una cookie o transmitido a través de la URL), para replicarlo en otro ordenador y así tener acceso a la aplicación como si se fuese el otro usuario. Puede parecer complicado, pero en realidad es muy sencillo.

En el artículo PHP Security Guide: Sessions se explica este problema de seguridad y varios métodos para protegerse.

Por último, una página que recomiendo leer ya que se ofrecen siete buenos hábitos para proteger una aplicación web desarrollada con PHP: Seven habits for writing secure PHP applications.

Compilador de PHP a C++

HipHop es un transformador de código PHP a C++ que posteriormente se compila para crear un ejecutable. Este sistema ha sido desarrollado por facebook para optimizar el tiempo de ejecución de su código. Existen algunas pequeñas incompatibilidades, como podemos leer en HipHop for PHP: Unimplemented functions and features.

Este sistema es de código abierto y se puede descargar de la web oficial del proyecto facebook/hiphop-php.