Archive for the ‘PHP’ category

Memcache + PHP

mayo 16th, 2010

¿Por qué memcache?
En muchos proyectos de software (incluyendo Web) se realizan consultas a la base de datos que un lapso de tiempo siempre arrojan el mismo resultado; pero como no teníamos con una forma de almacenar esa información para disponer de ella cada vez que la necesitamos sin tener que realizar la consulta en el motor de bases de datos nuevamente, entonces simplemente llamábamos un query X cantidad de veces sin importar los recursos que tomaba la ejecución de dicha consulta. Con el fin de evitar ese desperdicio de recursos es que ha nacido memcache.

¿Qué es memcache?
Memcache es un servicio para almacenar objetos en memoria RAM y que pueden ser utilizados por múltiples procesos sin importar si se encuentran en la misma máquina o no. El objetivo principal por el que surgió memcache es el de evitar peticiones incesarías a la base de datos.

¿Cómo lo instalo y configuro?
Para unix:
$ sudo apt-get install memcached
$ sudo /etc/init.d/memcached restart
$ sudo apt-get install php5-memcache

Activar la extensión editando el archivo /etc/php5/conf.d/memcache.ini y descomentando la línea extension.
; uncomment the next line to enable the module
extension=memcache.so

Por último reiniciar apache

Para Windows:
Bajar e instalar: http://allegiance.chi-town.com/MemCacheDManager.aspx

Activar la extensión editando el archivo  G:\wamp\bin\php\php5.2.6\php.ini  y descomentando la línea extension.
extension=php_memcache.dll

Por último reiniciar apache

Memcache es un servicio/daemon que se ejecuta por consola de la siguiente manera:

/usr/bin/memcached -d -m 2048 -u root
-d : corre como servicio.
-m : limite de memoria en MB que le permitiremos usar a memecache
-u : identidad de quien ejecuta el proceso
-p : puerto (por default es 11211)
-c : limite de conexiones simultaneas (default es 1024)
-h : muestra ayudas y otros parámetros de uso

¿Cómo lo uso?

function memcache_test(){
   $memcache = new Memcache();
   $memcache->connect("localhost",11211);
   $key = "todos_los_registros_de_tabla_datos";
   $datos = $memcache->get($key);
   if (!$datos){
      echo "No esta cachado... hitting db e insertando en  memcache. <br>";
      $result = mysql_query("SELECT * FROM datos");
      while( ($dato=mysql_fetch_assoc($result))!=null){
         $datos[]=$dato;
      }
      $memcache->set($key,$datos,false,60*60*24); //cachados  por 24 horas
      print_r($datos);
   }else{
      echo "Ya se encuentra en memoria:<br>";
      print_r($datos);
   }
}

Gracias luis por la info

SMS, Mensajes gratis a todos los celulares en Colombia desde aquí

abril 24th, 2010

Hoy tengo buenas noticias para los que requiere enviar mensajes de texto a celulares en Colombia y no tiene saldo o no quieren gastarlo enviando el sms desde su celular.

Hoy he implementado una pequeña herramienta que esta en la barra derecha del blog, y lo que permite es enviar mensajes de texto a cualquier celular en Colombia sin importar el operador (tigo, movistar, comcel).

Explico aquí su funcionamiento:


1. lo primero que deben hacer es escribir el número o los números a los que desean enviar el mensaje de texto separados por coma, ejemplo: 3004968547, 3104132435, 3152345678

2. Escribir el mensaje de texto que van a enviar. El número máximo de caracteres permitidos es de 110

3. Por último presionas el botón de enviar.

4. Cuando se envíen los mensajes te aparecerá un listado con lo que sucedió con cada número de celular, por ejemplo si fue enviado o si hubo algún error.5. Por último ya las personas podrán leer su mensaje en el celular, por ejemplo miren aquí:

Y listo!!! ya pueden empezar a disfrutar de esta herramienta que se encuentra aquí en mi blog, espero les sirva de mucho.

Saludos,

Plugin de puntuación de características en wordpress

febrero 11th, 2010

He desarrollado un plugin para wordpress que tiene como finalidad realizar puntuación de características  de algún producto, aparato, foto o lo que quieras, yo lo utilizaré para las películas que veo.

Aquí dejo los links para que se descarguen el plugin y un rápido howto de como configurarlo y utilizarlo, realmente es muy fácil.

http://www.rafaelvega.info/puntuador/puntuador.zip
http://www.rafaelvega.info/puntuador/puntuador.pdf

Lo que hace exactamente es esto:

Efectos especiales
9/10
Reparto
5/10
Trama
7/10

Ocultar categoría en sidebar de wordpress

noviembre 29th, 2009

Es algo sencillo pero útil :)

Simplemente busquen la función wp_list_categories y agreguen el parámetro exclude, ejemplo:

wp_list_categories(“title_li=&exclude=20″);

Optimizar las páginas javascript con PHP

noviembre 25th, 2009

Hace un par de días estuve hablando con miembros de mi equipo de trabajo sobre ¿Cómo hacer que una web cargue mas rápido?, hoy he leído un artículo sobre un colega (Alexis Cardenas) en donde habla sobre como optimizar las webs a manera de código que básicamente se fundamentaban en dos cosas:

  • Hacer código javascript mas optimo, reducido, etc…
  • Hacer que la programación en php sea optima igualmente

Ahora yo quiero mostrar herramientas adicionales para hacer que un sitio cargue mucho más rápido.

  1. Utilizar algun compresor para el código javascript, el más popular es YUI Compressor pero en la web hay una gran lista de ellos, aquí dejo el nombre de algunos otros importantes: Packer, Crunchy, JSCruncher, Dojo ShrinkSafe
  2. Para comprimir una página web donde puedes ejecutar PHP colocas al inicio del archivo:
    <?php ob_start(“ob_gzhandler”); ?>
    y luego, despues de cualquier codigo PHP ponemos: <?php ob_end_flush(); ?>
  3. Para el CSS y el JAVASCRIPT, en el archivo .htaccess agregamos lo siguiente:
    AddHandler application/x-httpd-php .css .js php_value auto_prepend_file /home/… RUTA LOCAL …/public_html/gzip-start.php php_value auto_append_file /home/… RUTA LOCAL …/public_html/gzip-end.php
    En el archivo gzip-start.php ponemos: <?php ob_start(“ob_gzhandler”); ?>
    y en el archivo gzip-end.php ponemos: <?php ob_end_flush(); ?>

Esto ayuda al tiempo de carga debido a que ahorrando tiempo al transferir los archivos se ahorran recursos de CPU y RAM y al transferir menos información el cliente puede mostrar la web mucho mas rápido.

Registringir acceso externo a un link

noviembre 7th, 2009

Hace pocos días un amigo me pregunto que si era posible que las personas solo entraban a una URL especifica haciendo clic desde un link en su propia pagina, es decir, que no se pueda ingresar a un link directamente escribiendo la dirección en la barra del navegador ni tampoco que se pueda ingresar haciendo clic desde otra pagina web ajena a la dueña del link, y le he dado una solución que me parece muy interesante, aquí coloco el código fuente y un link a un script php que he creado para que vean que funciona, hagan clic aquí y verán que entra pero si copia y pegan el link no funcionará, incluso si colocan el link en otra web tampoco funcionará: http://www.rafaelvega.info/pagina_restringida.php :)

if( !isset($_SERVER['HTTP_REFERER']) || (isset($_SERVER['HTTP_REFERER']) && !preg_match("/".$_SERVER['HTTP_HOST']."/",$_SERVER['HTTP_REFERER']))){
die("esta url solo puede ser accedida desde un link directo dentro de la pagina ".$_SERVER['HTTP_HOST']);
}

Saludos

Vulnerabilidad en wordpress

octubre 16th, 2009

Para los que usan wordpress deben corregir este error.
Resulta que hay una vulnerabilidad en el archivo wp-trackbacks.php que puede hacernos caer el servicios si nos hacen peticiones por algo mas de 5 minutos, la solución es buscar la linea de código

$charset = $_POST['charset'];

y reemplazarla por:

$charset = str_replace(”,”,”",$_POST['charset']);
if(is_array($charset)) { exit; }
$charset = str_replace(”,”,””,$_POST['charset']);

if(is_array($charset)) { exit; }

Calcular cambio de divisas

agosto 29th, 2009

Resulta que desde el primero de enero de 2008 estoy pendiente al cambio de divisas casi que a diario, la que me interesa es de EUR a COP. El hecho aquí es que yo siempre escribía en el buscador de google “eur to cop” y ya obtenía el cambio de esta divisa, así que google es una buena herramienta para eso, ustedes pueden escribir el código de la divisa origen y la destino y Mr. Google les da el respectivo cambio del momento.

Resulta que un día Bubok necesitaba implementar un script que nos mantuviera actualizado el valor de la divisa en la base de datos cada cierto intervalo de tiempo. Fue allí donde Luis Carlos, un programador de mi grupo de desarrollo, encontró una forma de obtener estos valores de cambio gracias a que yahoo decidió compartir su información con la Internet.

La url para obtener un archivo .cvs es esta:

http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=EURCOP=X donde EURCOP es la divisa origen y la divisa destino respectivamente.

Ahora el código PHP que encontró Luis para obtener la razón de cambio de las divisas es muy sencillo, lo copio a continuación:

$url = ‘http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=EURCOP=X’;
$handle = @fopen($url, ‘r’);
if ($handle) {
$result = fgets($handle, 4096);
fclose($handle);
}
$array = explode(‘,’,$result);

Entonces se tiene que el valor de cambio en $array[1]

Espero que a alguien mas le sirva :)