PHPAGA: gestor de proyectos

phpaga.pngPHPAGA es un gestor web de proyectos, tareas, facturas y preosupuestos, que provee una forma eficiente y centralizada de tener al día tus tareas y actividades.
Entre las posibilidades que ofrece incluye la impresión a PDF de los listados, estadísticas por proyecto o persona y resúmenes financieros.
phpaga2.png
PHP 5.2 es necesario para que funcione, a parte no tiene dependencias de PEAR. Usa UTF-8 tanto para el código como para la base de datos y los gráficos se puestran con el componente Graph de eZ y los gráficos se muestran como SVG.
PHPAGA
Vía / International PHP Magazine

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

Torii: aplicación para crear portales

torii.pngTorii es una aplicación que desarrolla portales de forma sencilla mediante el uso y desarrollo de módulos. Incluye una extensa documentación y una serie de módulos iniciales como integración de feeds, tiempo, sistema de información, listas to-do y mucho más.
torii2.png
Además incluye temas que nos permite modificar el aspecto de nuestro portal de forma rápida.
No hace mucho uso de Javascript para evitar que el gasto innecesario de los recursos del navegador. A parte, el porta se cargan con mucha rapidez ya que los datos se cargan asíncronamente más tarde.
Es necesario disponer de PHP 5.2 y las siguientes extensiones: SimpleXML, DOM, PCRE y SPL, JSON, PDO y PDO/SQLite, y Curl. PDO/SQLite es necesario porque algunos módulos necesitan almacenar información.
Torii

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

Enviar datos por POST mediante CURL

Si el otro día indicábamos cómo obtener una página protegida por autenticación, hoy vamos a explicar lo fácil que es enviar una petición HTTP con datos por POST usando CURL.

Tan solo es necesario indicar que se envían datos por POST e indicar qué datos se van a mandar:

<?php
$ch = curl_init('http://dominio.com/pagina.php');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "parametro1=valor1¶metro2=valor2");
curl_exec ($ch);
curl_close ($ch);
?>

Con CURLOPT_POST indicamos que enviamos datos en POST y con CURLOPT_POSTFIELDS indicamos los datos.

Consejos para escribir menos código PHP

Escribir menos código puede suponer dos mejoras en nuestra aplicación: código más limpio y fácil de seguir, y código más eficiente.

Usar operadores lógicos (or y and) en vez de if

Si queremos ejecutar una instrucción dependiendo del resultado booleano de una instrucción anterior, como por ejemplo:

$status = fwrite($h, 'texto');
if (!$status) {
log('Error al escribir');
}

Podremos hacerlo de la siguiente manera:

fwrite($h, 'texto') or log('Error al escribir');

Uso del operador ternario

Cuando queremos asignar un valor a una variable dependiendo del resultado de una condición:

$var = $ok? 'Correcto' : 'Falso';

Usar for antes que while

Mientras que con el while sería:

$i = 0;
while ($i < 100) {
$var[] = $aux[$i];
$i += 2;
}

Con el for sería así:

for ($i = 0; $i < 100; $var[] = $aux[$i+=2]);

Uso de funciones por referencia

Cuando una función nos devuelve un array, no es imposible acceder directamente al contenido del array:

$ext = pathinfo('file.png')['extension'];
// Parse error: syntax error, unexpected '[' in ... on line ...

Para evitar este error podemos crearnos un juego de funciones como estas:

// Devuelve la referencia al objeto
function &r($v) { return $v; }
// Devuelve la posición del array
function &a(&$a, $i) { return $a[$i]; }

Y por último un par de consejos: intenta conocer las funciones de PHP, hay muchas que harán justo lo que tu necesitas, por lo que no tendrás que implementarlo. Antes de escribir más código para que se lea con facilidad, añade un comentario explicativo.

6 PHP coding tips to write less code

Vía / dzone

Obtener una página con autenticación en PHP

Algo que normalmente es interesante hacer y que nos da muchos problemas es leer una página web desde un script PHP y que la página tenga autenticación.

La solución es sencilla, pero es necesario el uso de CURL:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'usuario:password'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // timeout 10 segs
$data = curl_exec($ch);

Vía / [no recuerdo de dónde lo copié]

| |

Microsoft ofrece un driver SQL Server 2005 para PHP

Microsoft ha contribuido con PHP para crear un driver para acceder a SQL Server 2005. Diseñado para que permita una integración fiable y escalable con SQL Server para aplicaciones PHP desarrolladas en plataforma Windows.
Se trata de una extensión para PHP5 que permite leer y escribir data dentro de los scripts PHP, incluyendo procedimientos para acceder a los datos de SQL Server 2005 y SQL Server 2000 (incluyendo Express Edition), y hace uso de las características de PHP, como la lectura y escritura de objetos grandes.
Existe también un blog y un foro.
SQL Server 2005 Driver for PHP
Vía / International PHP Magazine