Posts Tagged ‘PHP’

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

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