Mostrar una traza recursiva con PHP

Una de las cosas que más me gusta de Java es que cuando se produce una excepción, el error que te muestra te saca una traza de toda la ejecución de procesos (qué función falla, en qué línea y qué funciones se han llamado hasta llegar a ese punto). En PHP a veces los errores son algo simples, falla tal cosa en tal línea.

Afortunadamente podemos mejorar los mensajes de debug para poder mostrar la misma información: línea del archivo, fichero y qué funciones han sido las que han llamado a la actual (backtrace).

Para poder realizarlo se ha de usar las variables __FILE__ y __LINE__ y la función debug_backtrace(). El código necesario sería el siguiente:

function debug($msg, $label = 'DEBUG', $stealth = FALSE) {
if (defined('DEBUG') && DEBUG) {
if (is_bool($msg)) {
$msg = $msg ? 'TRUE' : 'FALSE';
}
$display = $stealth ? ' style="display: none;"' : '';
$backtrace = debug_backtrace();
$debug = array();
$stack = (isset($backtrace[1]['class']) ? "{$backtrace[1]['class']}::" : '')
. (isset($backtrace[1]['function']) ? "{$backtrace[1]['function']}" : '');
if ($stack) {
$debug[] = $stack;
}
$debug[] = "Line {$backtrace[0]['line']} of {$backtrace[0]['file']}";
$debug = implode('
', $debug); print "{$label}: {$debug}:
".print_r($msg, 1)." \n”; } }

Programming Tips #9 “debug_backtrace”

|

phpWebSite: CMS para creación de webs

phpWebSite es un CMS que nos facilita la creación de webs. Que con la ayuda de una administración web podremos mantener y gestionar nuestra web de forma sencilla.

Además el diseño puede ser cambiado gracias a un layout flexible. La contenido está organizado mediante categorías y puede ser ampliado mediante comentarios de otros usuarios.

Existe muchas caracterís y el desarrollo crece rápidamente mediante la creación de nuevos módulos.

phpWebSite

Vía / International PHP Magazine

Sugar: nuevo sistema de plantillas para PHP

Sugar es un sistema de plantillas basado en Smarty que aporta un motor flexible y potente que permite realizar expresiones similares a las de PHP. Además es sencillo de entender y limpio.
La seguridad es algo importante para PHP-Sugar, por ejemplo, la salida se escapa a HTML por defecto, en vez de esperar una petición explicita para ello, evitando así inyección de código HTML o Javascript por el usuario.
Entre las diferencias con Smarty nos encontramos con la felixibilidad, la facilida de uso, la prohibición de acceso a funciones PHP y la extensibilidad.
PHP-Sugar

5 consejos para crear código compatible con PHP6

Aunque a algunos puedan parecerle consejos obvios, no hay que olvidar que no todo el mundo que programa en PHP controla el lenguaje.

  • No usar register_globals: da igual que sea PHP6 o anterior, no se debería usar, de todas formas, a partir de PHP6 no será posible usarlas.
  • No usar magic_quotes: al igual que en el punto anterior, en PHP6 desaparecerá esta opción, además de añadir de que se permita o no su uso, no se deberían utilizar.
  • No usar variables predefinidas largas: Si usas $HTTP_POST_VARS o $HTTP_GET_VAR deberás cambiarlas por las respectivas $_SERVER, $_COOKIE, $_GET, $_POST, $_FILES…
  • Usar preg en lugar de ereg: en el uso de expresiones regulares deberemos usar las funciones preg (compatibles con Perl).
  • No inicializar variables con el operador referencia: cuando hagas algo del estilo $var =& new objeto(); deberá asignarlo sin el operador referencia porque te dará un error E_STRICT.

Becoming PHP 6 Compatible

Vía / PHPDeveloper.org

Librería PHP para OAuth

OAuth es un protocolo abierto que permite un API de autenticación de forma simple y estándar para aplicaciones de escritorio y aplicaciones web. El protocolo permite al usuario publicar e interactuar con datos protegidos. Al servidor permite dar acceso a los datos de los usuarios mientras protege los credenciales de la cuenta.
Para aquellos que estén interesados en su utilización ya tienen una librería para PHP para OAuth con la que poder desarrollar sus aplicaciones (cliente o servidor).
También existen librerías para otros lenguajes como C#, Java, C, Perl, Python y Ruby.
OAuth para PHP
Vía / OpenSourceCommunity.org

|

YouTube, Picasa Web Albums y Documents List en PHP!

La gente de Google ha sacado un API en PHP para tres de sus productos: Youtube, Picasa Web Albums y Document Lists. El API está disponible en el framework Zend Framework 1.03+ y como un paquete independiente.
La documentación es muy completa y su uso sencillo. Hay que estar seguro de que nuestra instalación soporta OpenSSL para poder leer feeds autenticados.
YouTube, Picasa Web Albums and Documents List in PHP!
Vía / Ajaxline

Cómo crear botones con Imagick

Un buen y sencillo código para crear botones estilo web 2.0 con Imagick.

botonimagick.png

<?php
// Se crea el objeto Imagick
$im = new Imagick();
// Se crea un canvas vacio
$im->newImage( 200, 200, "white", "png" );
// Se crea el objeto para dibujar
$draw = new ImagickDraw();
// Color del botón
$draw->setFillColor( "#4096EE" );
// Se crea el círculo exterior
$draw->circle( 50, 50, 70, 70 );
// Se crea el ciruclo transparente de la zona inferior
$draw->setFillColor( "white" );
// Color semi transparente
$draw->setFillAlpha( 0.2 );
// Se dibuja el círculo
$draw->circle( 50, 50, 68, 68 );
// Se indica la fuente
$draw->setFont( "./test1.ttf" );
// Se crea el reflejo superior
$draw->setFillAlpha( 0.17 );
// Se dibuja la curva
$draw->bezier( array(
array( "x" => 10 , "y" => 25 ),
array( "x" => 39, "y" => 49 ),
array( "x" => 60, "y" => 55 ),
array( "x" => 75, "y" => 70 ),
array( "x" => 100, "y" => 70 ),
array( "x" => 100, "y" => 10 ),
) );
// Se dibuja la imagen
$im->drawImage( $draw );
// Se pone a opaco para el texto
$draw->setFillAlpha( 1 );
// Tamaño de la letra
$draw->setFontSize( 30 );
// Color del texto
$draw->setFillColor( "white" );
// Se escribe el texto
$im->annotateImage( $draw, 38, 55, 0, "go" );
// Se recorta la imagen
$im->trimImage( 0 );
// Se envía la imagen
header( "Content-Type: image/png" );
echo $im;
?>

Siempre que se hace este tipo de scripts en nuestras aplicaciones web, hay que recordar que Imagick consume muchos recurosos.

Creating buttons with Imagick

Kohana: framework PHP basado en CodeIgniter

kohana.pngKohana es un framework de PHP que deriva de CodeIgniter, el cual ya he comentado aquí que me gusta bastante. Basado inicialmente en CI, posee las mismas características que este: seguro, liviano, fácil de aprender, MVC, compatible con UTF-8 y fácilmente extensible.

¿Qué diferencias existen entre CI y Kohana?

  • PHP5: es estrictamente PHP, lo que aporta la programación orientada a objetos.
  • El diseño de patrones MVC continua el de CI: por lo que, aunque son diferentes, un usuario de CI no tendrá problemas para adaptarse al de Kohana.
  • Dirigido por una comunidad: no por una empresa, una comunidad de desarrolladores puede dar respuestas más rápidas al no estar limitadas por las decisiones de una empresa.
  • Los datos GET, POST, COOKIE y SESSION funcionan como se esperan: no se limita su uso, aunque si se ofrece el mismo tratamiento ante ataques XSS que ofrece CI.
  • Recursos, modulos y herencia en cascada: los controladores, librerías, helpers y vistas pueden ser cargados desde cualquier lugar de la aplicación, del sistema o de módulos. Las opciones de configuración se heredan y pueden ser modificadas dinámicamente por cada aplicación.
  • No hay conflictos de nomenclaturas: se usan sufijos en las clases (por ejemplo _Controller) para evitar conflictos.
  • Carga automática de clases: las librerías, controladores, modelos y helpers no se precargan, sino que se cargan dinámicamente cuando se solicitan.
  • Los helpers son clases estáticas y no funciones: en vez de usar form_open() usaríamos form::open().
  • Consistencia en las librerías y el API: por ejemplo el almacenamiento de sesiones múltiples existe (BD, cookies, …), usando interfaces y clases que extienden de ésta, podemos desarrollar en nuestra librerías nuevas clases que amplíen la interfaz y que mantenga la consistencia del API.
  • Manejador de eventos: los eventos pueden ser añadidos, modificados o eliminados de forma dinámica, permitiendo cambios en la ejecución de los procesos sin tener que modificar el core.

Kohana

phpRemoteShell: ejecución remota mediante PHP

phpRemoteShell es una aplicación que permite ejecutar comandos de shell y código PHP en un host remoto sobre HTTP.
prs.png
Además permite encriptarse y desencriptarse en la petición, PRS se puede alojar a sí mismo en en otro script PHP del servidor para poder restablecerse durante el tiempo de ejecución. Ademas permite modificar el crontab entre otras cosas.
phpRemoteShell
Vía / International PHP Magazine

PHP 5.2.5 disponible

PHPHa salido la nueva versión de PHP, la 5.2.5, estando centrada esta versión en mejorar la estabilidad con cerca de 60 errores solucionados, algunos de ellos relativos a la seguridad, por lo que es necesario actualizar nuestras versiones de PHP.
PHP 5.2.5