Category Archives: PHP

Comparativa de frameworks PHP

PHPit publica una mini-comparativa de frameworks en PHP. El artículo no entra en muchos detalles sobre las capacidades de cada framework, pero es una buena manera de informarse de qué opciones tienes disponibles si necesitas un buen framework y no quieres pasarte a Rails :D

Una de las sorpresas del artículo es el Zend Framework, desarrollado por la empresa que respalda comercialmente a PHP. Este framework (aún en desarrollo) aporta cosillas interesantes como soporte para PDF, servicios web (Yahoo, Flickr, Amazon, RSS…) y JSON (que poco a poco va adquiriendo cada vez más relevancia)

Aquí teneis un pequeño tutorial de Zend FrameworK en php|architect.

Más cosillas… en el artículo se menciona también a CakePHP, que ya ha sacado una versión final de su framework. Para quien no lo conozca, CakePHP es como Rails pero sin Ruby. En breve publicaré un pequeño artículo sobre la versión final con algún ejemplillo de cómo funciona.

Si te pica la curiosidad por saber cómo quedan el resto de los frameworks (Prado, Symphony, etc…), échale un vistazo al artículo

JSON, otra idea que mola…

Uno de los grandes inconvenientes a la hora de desarrollar aplicaciones web es el intercambio de información entre las partes de la aplicación.

Uno de los objetivos de XML es, precisamente, solucionar este problema. Pero a veces usar XML es como matar moscas a cañonazos.

Un ejemplo… tienes un Array en JavaScript y quieres usarlo en PHP…

La opción XML pasa por:

  • Convertir el array en un XML (tremendo coñazo)
  • Pasarle el XML al servidor
  • Parsear el XML en el servidor
  • Convertir los datos en un array

El sistema es un poco plasta, además de ser un coñazo cuando cambian las especificaciones de datos (¡sorpresa! ¡el cliente ahora quiere los datos en un Array multidimensional!)

Para solventar este y otros muchos inconvenientes, se crea JSON, un formato de intercambio de datos “ligero” basado en JavaScript.

Existen implementaciones de JSON en casi todos los lenguajes que merecen la pena. Aquí va un mísero ejemplo usando PHP-JSON y JSON en JavaScript. El código es muy simple: creamos un Array en PHP y se lo pasamos a JavaScript para trabajar con él…

<?php
    include("JSON.php");
    $json = new Services_JSON();
    $my_array = Array(1,2,3,4,5);
    $myjson = $json->encode($my_array);
?>
<script src="json.js" type="text/javascript" language="javascript" charset="utf-8"></script>
<script>
    var myArray = JSON.parse('<?php echo $myjson; ?>');
    alert(myArray[0]);
</script>

Fantástico… en el alert aparece ’1′… te acabas de ahorrar un dolor de cabeza…

¿Funcionará con objetos?

Veamos…

<?php
    include("JSON.php");
    $json = new Services_JSON();
    $foo->id = 'Foo';
    $foo->Class = 'Object';
    $myjson = $json->encode($foo);
?>
<script src="json.js" type="text/javascript" language="javascript" charset="utf-8"></script>
<script>
    var myObj = JSON.parse('<?php echo $myjson; ?>');
    alert(myObj.id);
</script>

Dios mio! En el alert aparece ‘Foo’! :D

Sin entrar a valorar si JSON tendrá el mismo futuro que WDDX (una tecnología parecida, igualmente práctica y que no usa nadie), la verdad es que a mí por lo menos me va a venir de coña para un par de chorradas que ando programando…

Espero que el hecho de que Yahoo haya empezado a ofrecer sus Web Services en JSON le de un empujoncillo al sistema.

Si te has quedado con ganillas de más, aquí va un tutorial de XML.com: JSON and the Dynamic Script Tag: Easy, XML-less Web Services for JavaScript

PHPMailer, o el email sin complicaciones…

Si te dedicas al diseño web, antes o después tendrás que enfrentarte con el siguiente marrón: “email en HTML”.

Para un proyectillo que tenía entre manos (un mini-gestor de listas de correo) me ha tocado revisitar el tema. En principio, pensaba usar algún proyecto OpenSource de los miles que hay por ahí, pero ninguno me servía porque:

  • Eran increíblemente complejos de usar
  • Eran increíblemente complejos de instalar
  • Eran increíblemente feos
  • Todas las anteriores

Con lo cual, he acabado fabricándome mi propio gestor de listas de correo, con soporte para plantillas, base de datos de destinatarios, y archivo de los emails enviados (y de paso con un poquito de AJAX : )

Mailer001

Investigando gestores de listas OpenSource me he encontrado con PHPMailer, una clase PHP que se encarga de gestionar todo lo que convierte al envío de emails en HTML en una pesadilla, para dejarte pensar en cosas más interesantes (como, por ejemplo, el contenido de tus boletines de noticias : )

A modo de ejemplo, aquí va el código para enviar los mails en HTML de mi gestor:

<?php
    require("phpmailer/class.phpmailer.php");
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = "mail.flumo.com";
    $mail->Username = "usuario";
    $mail->Password = "password";
    $mail->SMTPAuth = true;
    $mail->CharSet = "UTF-8";
    $mail->From = "info@flumo.com";
    $mail->FromName = "Flumo.com";
    $mail->IsHTML(true);
    $mail->Subject = $_POST['subject'];
    $mail->AltBody = $_POST['header']."\n\n".$_POST['body'];
    $mail->AddEmbeddedImage('logo.gif','my-logo');
    $mail->AddEmbeddedImage('bg.gif','my-bg');
    /* Destinatarios */
    $mail->AddAddress('info@flumo.com','Lista de correo de Flumo.com');
    if($_POST['database'] == 1){
        $usuarios = $db->get_results("SELECT * FROM usuarios");
        foreach($usuarios as $usuario){
            $mail->AddBCC($usuario->email,$usuario->name);
        }
    }
    if($_POST['destinatarios']){
        $to = explode(",",$_POST['destinatarios']);
        foreach($to as $tos){
            $mail->AddBCC($tos);
        }
    }
    /* Plantilla */
    $template = file_get_contents('templates/flumo.tpl','r');
    $display = str_replace("%%header%%",$_POST['header'],$template);
    $display = str_replace("%%body%%",$_POST['body'],$display);
    /* Imagenes */
    $display = str_replace("logo.gif","cid:my-logo",$display);
    $display = str_replace("bg.gif","cid:my-bg",$display);
    $mail->Body = $display;
    /* Envio del mensaje */
    if(!$mail->Send()) {
        echo "El mensaje no pudo ser enviado.";
        echo "Error: " . $mail->ErrorInfo;
    } else {
        echo "El mensaje ha sido enviado.";
    }
?>

En el código hay un par de cosillas que usan ezSQL, pero de esa otra maravilla ya hablaremos otro día…

El resultado, una cosilla así:

Mailer002

Si tu próximo proyecto tiene algo que ver con email y usas PHP, te debes a tí mism@ echarle un vistazo a PHPMailer.

Update: Un artículo bastante bueno en cristiano sobre PHPMailer en programacion.com