April 29 2008

Emulando listas de correo con php de forma rápida y sencilla

Aclaración: Enviar correo de forma masiva e indsicriminda es SPAM, no importa como lo quieras justificar, es SPAM, por favor asegurate de que las personas a las que les envíes este tipo de información, esten plenamente conscientes de lo que están recibiendo. Licencia Creativa, ni su autor, ni su administrador se hacen responsables por el mal uso que se haga de esta información

Si tenemos un servidor de correo plenamente instalado, a veces es algo tedioso y fastidioso estar configurando software de listas de correos, aunque existe software muy bueno para ello, hoy vamos a ver una forma sencilla en como podemos ahorrarnos ese paso y utilizar una cuenta de correo común y corriente para esos fines.

¿Qué necesitamos?

  1. PHP a nivel muy básico
  2. Un archivo de texto simple en el que escribiremos los datos de nuestros usuarios en la forma nombre, correo
  3. Por supuesto, la lista de nuestros usuarios
  4. Una cuenta de correo real

Preparando el archivo de texto

Hagamos un archivo de texto simple (.txt) y lo nombramos como lista.txt, en ella escribiremos los nombres de nuestra lista en la siguiente manera:

Nombre real de la persona, correo electrónico

Debemos asegurarnos de escribir un usuario por línea de texto

Tecleemos algo de código

Inicie su editor de código favorito, generamos un documento html nuevo y empecemos a escribir código. Lo primero, será abrir el archivo de texto (recuerde tener privilegios adecuados para esto) y pasarlo a una matriz, lo haremos con la función file de php

PHP:
  1. $lines = file('lista.txt');

Vamos a agregrar una linda tabla con los datos que vayamos extrayendo de la lista, de esa manera podremos ver un output al momento que los datos se van enviando. Y mostraremos todo esto dentro de un foreach

PHP:
  1. <table>
  2. <tr>
  3. <td>Nombre</td><td>Correo</td><td>Enviado</td></tr>
  4. <?php
  5.         foreach ($lines as $line_num=>$line) {
  6.             $datos = explode(",", $line);
  7.     ?>     
  8.     <tr>
  9.     <td> <?php echo $datos[0] ?></td>
  10.     <td> <?php echo $datos[1] ?></td>
  11.         <td>Ok</td>

Notemos que la variable datos contiene ahora los datos de cada usuario en forma de array, de manera que la opsición 0 contiene el nombre, y la posición 1 el correo electrónico, la función explode nos permite hacer dicha separación. Ahora, enviaremos los datos por correo, vuelvo a hacer incapie en la necesidad de usar una cuenta de correo valida para que funcione mejor, esto por supuesto, no garantiza que cada cliente de correo interprete nuestro mensaje como spam o no.

PHP:
  1. <?php
  2.         $sendTo = $datos[1]; // El correo del usuario
  3.         $correo_de = "lista@aullamas.com"; // nuestro correo
  4.         $de = "Aoyama"; // Nuestro nombre
  5.         $subject = "Bienvenida a la lista de correo de Licencia Creativa";
  6.         $headers = "MIME-Version: 1.0\n";
  7.         // Importante que el mime sea text/html para que el cliente lo entienda como tal
  8.         $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  9.         $headers .= "From: $de  <$correo_de> \r\n";
  10.         $headers .= "Reply-To: " . $correo_de;
  11.         $message = "<p><img src='http://www.dominio.com/images/imagen.jpg' /></p><p>Como vez, puedes incluir im&aacute;genes tanbi&eacute;n. Y no olvides enviar esta informaci&oacute;n a todos tus amigos y conocidos.</p><p><small>Este es un correo automatizado. No es necesario que respondas al mismo, si deseas mayor informaci&oacute;n escribe a: aoyama@auyamas.com</small></p>";
  12.     mail ($sendTo, $subject, $message, $headers); //la famosa función mail de php hace el envio
  13.     ?>
  14.     </tr>
  15.     <?php     
  16.     } //fin foreach
  17.     ?>
  18.     </table>

Una vez terminado el código, guardemos este documento en una carpeta dentro de nuestra raíz de publicación y lo ejecutamos cuando sea necesario. Finalmente quiero decir que esto es algo muy simple y que hay software que hace ese trabajo de manera más eficiente, también reitero de nuevo la necesidad de no abusar de este tipo de prácticas.

April 11 2008

Tres opiniones desfavorables

Leía el mini artículo Tres opiniones favorables sobre PHP, donde algunos expertos dan su opinión sobre las cosas que favorecen al lenguaje PHP y me parece increíble, no lo que los expertos tengan que decir, sino la sarta de tonterías sin sentido por las que la gente discute. No se ustedes, pero yo estoy harto de estás absurdas peleas sobre cual es mejor lenguaje. Y la moda de hoy es "Ruby es mejor que PHP".

He oído de todo, desde opiniones objetivas y centradas, hasta absurdos como simplemente decir "PHP apesta" sin dar una razón de peso real. Creo que debemos entender una cosa. Lenguajes hay muchos, con propósitos diferentes, nacidos bajo condiciones diferentes, algunos ya cumplieron su ciclo, y otros están en transición, pero lo importante no es competir para ver cual es el mejor lenguaje. Un lenguaje de programación será una excelente herramienta si el programador es excelente, y será una pésima herramienta si el programador es realmente malo. Así que antes de andar por ahí condenando tal o cual lenguaje, creo que primero deberíamos darnos cuenta que tanto conocemos el lenguaje de nuestra preferencia y que tan eficientes somos usándolo. No vaya a ser que nos hallemos adorando a un ídolo de papel construido más sobre nuestro ego e ineptitud que sobre una base, concreta y cuantificable.

Entonces, lejos de criticar un lenguaje, yo recompondría y daría tres opiniones desfavorables no sobre el lenguaje, sino sobre el programador.

  1. El programador tiende a idolatrar el lenguaje de su preferencia
  2. El programador tiende a olvidar que la curva de aprendizaje de un lenguaje nunca es similar en ningún individuo, por eso le es más fácil criticar a quienes empiezan por un lenguaje que no sea su favorito.
  3. El programador tiende a olvidar que él comenzó muchas veces como esos a quienes critica (aunque hay sus casos excepcionales)

PD. A los que me siguen en twitter, mis peleas con Yaraher sobre Ruby son pura joda, como todo lo que se escribe ahí.

To All Pioneers

November 01 2007

Gráficas con LibChart en PHP

NOTA: Al momento de re-escribir este artículo, me entere de la nueva versión de la librería con soporte total para PHP5 y nuevos tipos de gráficas, aún así, no ha cambiado en sus funciones básicas que son las que se explican aquí.

LibChart es es una li­brería orientada a objetos de libre distribución y facilidad de uso que te ahorrara la difícil tarea de crear gráficas en tus aplicaciones Web. Todo lo que tienes que hacer, es bajarte la librería, instalarla en tu aplicación y empezar a usarla. Entremos en detalle.

Instalar la librería

Después de descargar la librería, es necesario que está se descomprima y se coloque en un subdirectorio de nuestra aplicación, en mi caso, le he dejado el nombre de la librería a la carpeta, solo para recordar que estoy haciendo.

Libchart

Una vez subidos los archivos, deberís hacer lo siguiente:

  • Otorga el permiso 555 a la carpeta que acabas de subir
  • crea dentro de esa carpeta una subcarpeta donde se van a guardar las gráficas (se generan en formato .PNG) y ponle los atributos 777 (siempre puedes jugar con los permisos), en mi caso, le puesto demo como nombre a la carpeta

Creando los gráficos

Al momento, LibChart, soporta gráficas de barras horizontales y verticales, circulares y gráficas de líneas, así que tendremos que elegir cual vamos a crear, pero primero, en nuestras aplicaciones, incluyamos la librería correspondiente (ver la nota el inicio de este artículo).

PHP:
  1. include "libchart/libchart.php";

Recordemos que debemos apuntar al nombre que le hayamos puesto a la carpeta de nuestra librería. Con eso ya tenemos incluida la librería, ahora vemos como crear una gráfico de barras horizontal

PHP:
  1. $chart = new HorizontalChart(500, 250);

Con barra verticales

PHP:
  1. $chart = new VerticalChart(500, 250);

Circular o de pastel

PHP:
  1. $chart = new PieChart(500, 250);

Líneal

PHP:
  1. $chart = new LineChart(500, 250);

Se ve bastante fácil, por cierto, los parametros numéricos representan ancho y alto respectivamente, $ chart es el nombre que le hemos dado a nuestra variable la cual se deriva de las clases LineChart, VerticalChart, HorizontalChart y PieChart; lo siguiente, es añadir por supuesto el contenido de la gráfica.

PHP:
  1. $chart-&gt;;addPoint(new Point("Jan 2005", 273));

addPoint es un método que consiste en agregar un punto a nuestra gráfica, se instancia de la Clase Point, e incluye, el título entre comillas y el valor necesario para poder representarlo, lo que quiere decir que podemos agregar tantos puntos como datos necesitemos representar. Ahora, como ya tenemos los datos, es importante colocarle un título a nuestra gráfica, de otra forma ¿cómo sabremos que estamos ilustrando? setTitle se encarga de ello

PHP:
  1. $chart-&gt;setTitle("Este es el título global de la gráfica");

Ahora que ya tenemos todo completo, hay que renderizar el gráfico y que se genere el archivo .png con nuestra gráfica

PHP:
  1. $chart-&gt;render("demo/demo2.png");

El método render le dice a donde vamos a depositar la gráfica, es importante como mencione al inicio que el directorio donde vamos a poner las gráficas generadas tenga el permiso 777 o 775, se que para los paranoicos de la seguridad esto es inaudito, pero vamos, hay mecanismos para ello, una recomendación es que no pongan sus gráficas sobre la raíz de su servidor sino quieren llevarse sorpresas desagradables (por aquello de los "hackers", crakers, lammers, script kiddies, etc). Lo último que queda por hacer, es simplemente mostrar la gráfica en nuestra aplicación, lo haré de la forma más sencilla posible

PHP:
  1. echo "<img src="http://www.aoyama.com.mx/wp-admin/demo/demo2.png" alt="" />";

Nada del otro mundo, ¿eh? si todo salió bien, ya tienen un perfecto sistema de generación de gráficas. Veamos el código completo de una gráfica y su visualización.

PHP:
  1. include "libchart/libchart.php";
  2. $chart = new HorizontalChart(500, 170);
  3. $chart-&gt;addPoint(new Point("Azul", 50));
  4. $chart-&gt;addPoint(new Point("Rojo", 83));
  5. $chart-&gt;addPoint(new Point("Verde", 142));
  6. $chart-&gt;setTitle("Cual es tu color favorito?");
  7. $chart-&gt;render("demo/demo2.png");
  8. echo "<img src="http://www.aoyama.com.mx/wp-admin/demo/demo2.png" alt="" />";

libchart

Y las bases de datos, ¿qué?

Sabía que se lo preguntarían, suponiendo que ya tenemos todo el código para la conexión de una base de datos, podemos tomar un ejemplo sencillo de como gráficar datos de alumnos de una determinada escuela.

PHP:
  1. include "libchart/libchart.php";
  2. $chart = new HorizontalChart(500, 170);
  3. $chart-&gt;setTitle("Promedio Grupal");
  4. $sql = "select nombre, promedio from alumnos where semestre=2 and idgrupo=3";
  5. $result = mysql_query($sql, $enlace_a_la_bd);
  6. $registros = mysql_num_rows($ result);
  7. if($registros==0)
  8.  
  9. No hay datos para gráficar
  10. ";
  11. else
  12. {
  13. while($datos = mysql_fetch_array($result))
  14. {
  15. $chart-&gt;addPoint(new Point($datos["nombre"], $datos["promedio"]));
  16. }
  17. $chart-&gt;render("demo/demo2.png");
  18. echo "<img src="http://www.aoyama.com.mx/wp-admin/demo/demo2.png" alt="" />";
  19. }

Cuyo resultado sería:

Libchart

¡Espero que les haya sido de utilidad!

October 26 2007

Capturar la IP real del usuario en PHP

En muchas de nuestras aplicaciones, nos veremos obligados o necesitados de capturar la ip de nuestros usuario, por ejemplo, para fines estadísticos, para alimentar la paranoia de nuestro jefe y / o cliente, etc. Así que la forma de capturar la ip sería:

PHP:
  1. $ip = $_SERVER["REMOTE_ADDR"];

Pero, por supuesto, este dato puede verse falseado por el uso de proxies y trucos similares para enmascarar la ip, así que hagamos una función php que nos devuelva la ip real del usuario

PHP:
  1. function ipreal()
  2. {
  3.     if ($_SERVER)
  4.     {
  5.         if ($_SERVER[HTTP_X_FORWARDED_FOR])
  6.             $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  7.         else
  8.             if ( $_SERVER["HTTP_CLIENT_IP"] )
  9.                 $ip = $_SERVER["HTTP_CLIENT_IP"];
  10.             else
  11.                 $ip = $_SERVER["REMOTE_ADDR"];
  12.     }
  13.     else
  14.     {
  15.         if ( getenv( "HTTP_X_FORWARDED_FOR" ) )
  16.             $ip = getenv( "HTTP_X_FORWARDED_FOR" );
  17.         else
  18.             if ( getenv( "HTTP_CLIENT_IP" ) )
  19.                 $ip = getenv( "HTTP_CLIENT_IP" );
  20.             else
  21.                 $ip = getenv( "REMOTE_ADDR" );
  22.     }
  23.     return $ip;
  24. }

Que se utilizaría así

PHP:
  1. echo ipreal();

O así

PHP:
  1. $ip = ipreal();

October 11 2007

Verificando formularios de registro y comentarios en php

Disclaimer: Este es un artículo muy básico, por lo que algunos hardcore programadores y DJSOSO's podrían verlo como juegos de niños, si eres uno de esos, este artículo no es para tí.

Hoy les voy a explicar de una forma muy sencilla, una técnica que utilizan muchos sitios en sus formularios de registro y comentarios para evitar a los spam-bots y cosas similares. Se trata simplemente de obligar al usuario a digitar un número verificador de cuatro cifras generado aleatoriamente, así que, abrimos nuestro editor favorito, y vamos a crear una sencilla función.

PHP:
  1. <?php
  2.     function validador()
  3.     {
  4.         $num = rand(1000,9999);
  5.         return $num;
  6.     }
  7. ?>

Ahora, en cada formulario en el que vayamos a implementar esto, hemos de añadir un poco de código adicional, lo primero será, obviamente notificarle al usuario que tiene que escribir ese valor y de paso explicarle porque debe hacerle, pero también, usaremos un objeto tipo hidden para usarlo del otro lado del formulario. Veamos

PHP:
  1. <?php       
  2.         $n = validador(); //aquí llamamos a nuestra función, no te olvides de hacer el include correspondiente
  3.     echo "<input type='hidden' name='verifica' value='$n' />";
  4. ?>
  5. <p>Verificaci&oacute;n:<strong><?php echo $n ?></strong>. <small>Escriba este valor en la caja de texto</small>
  6. <input type="text" name="verifica_usuario" size="4" maxlength="4" /></p>

Ahora, del otro lado (es decir, cuando el formulario se procesa) simplemente revisamos que no haya quedado vacío el campo y que coincida con los dígitos generados (aquí es donde puedes pensar en AJAX si quieres).

PHP:
  1. <?php
  2. $v = true;
  3. if(strlen(trim($_POST["verifica_usuario"]))>0)
  4. {
  5.      if($_POST["verifica_usuario"]!=$_POST["verifica"])
  6.      {
  7.          $v = false;
  8.          echo "<p>Debe escribir el dígito verificador correcto.</p>";
  9.      }     
  10. }
  11. else
  12. {
  13.       $v = false;
  14.       echo "<p>Debe escribir el dígito verificador.</p>";
  15. }
  16. if($v)
  17. {
  18.      // Aquí se continua con el proceso
  19. }

Por supuesto, esto se puede implementar en un desarrollo propio o hacerle una modificación directa al formulario de comentarios de nuestro blog (sin necesidad de instalar un plug-in).

RSS
Búsqueda personalizada

Encuesta

  • ¿Qué te gustaría ver con más regularidad en el blog?

    View Results

    Loading ... Loading ...

Etiquetas