Cache en archivos PHP

Agregar a favoritos

7 Comentarios

Posteado hace 781 días en:

Trasteando un poco por la documentación de symfony me encontré con un sistema muy interesante para cachear trozos de códigos PHP en archivos html.

Lo he adaptado para conseguir 2 funcionillas bastante cortas. Puedes descargarte el ejemplo y trastear un poco.
Hay que tener en cuenta el define CACHE porque es la ruta donde se guardan los archivos cacheados.

Ejemplo:

<?php
//incluimos las funciones
include 'fn.cache.php';
//pasamos un ID y comprobamos si existe el cache
if(!cache('prueba')) {
echo '<ul><li>';
$list = array('xhtml','css','ajax','php');
echo join('</li><li>',$list);
echo '</li></ul>';
//guardamos la salida en cache
cache_save();
}
?>

Por defecto el cache se actualiza cada hora, aunque puedes pasar como segundo parámetro de cache() el tiempo en segundos. Lo que hace es mostrar el cache en caso que exista, sino existe obtiene toda la salida para guardarla con cache_save().
Para consultas sql y cacheado de archivos XML puede venir bien.


URL Clean

Agregar a favoritos

3 Comentarios

Posteado hace 844 días en:

Usar reglas de parseo en htaccess es una practica muy común, normalmente para embellecer nuestros enlaces, pero hay veces que no podemos hacer uso de ellas y tenemos que pasar los argumentos como se hace normalmente (por GET).

Existe una alternativa y lo usan muchos scripts, es el pasar los argumentos por la variable PATH_INFO, con estos obtenemos casi los mismos resultados, digo casi porque en todo momento tenemos que indicar el nombre del archivo.

Ejemplo:
//El de toda la vida
www.miweb.com/index.php?id=12
//Con htaccess
www.miweb.com/id/12
//La alternativa
www.miweb.com/index.php/id/12


function htaccess() {
global $htaccess;
if(!$htaccess) {
$htaccess = array();
$arguments = explode('/',@$_SERVER['PATH_INFO']);
array_shift($arguments);
$htaccess['args'] = $arguments;
$i = 0;
foreach($arguments as $argument) {
$htaccess['value'][$argument] = @$arguments[++$i];
}
}
if($args=func_get_args()) {
$get =  array ();
foreach($args as $arg) {
            if(is_numeric($arg)) {
            if(isset($_GET[$arg])) $get[$arg] = $_GET[$arg];
  else $get[$arg] = isset($htaccess['args'][$arg]) ? $htaccess['args'][$arg] : '' ;
            } else {
            if(isset($_GET[$arg])) $get[$arg] = $_GET[$arg];
 else $get[$arg] = isset($htaccess['value'][$arg]) ? $htaccess['value'][$arg] : '' ;
}
    }
    if(count($get) == 1) return join('',$get);
    else return $get;
} else {
return $htaccess['args'];
}
}
Con esta función podemos acceder fácilmente tanto por GET como con PATH_INFO, se encarga de parsear y devolver los resultados según los argumentos que le pasemos.

Ejemplos de uso:

Obtener el parametro id:
htaccess(‘id’); //12
Obtener el parametro numero 2
htaccess(2); //12
Obtener varios parametros
htaccess(0,’id’); //array(0=>‘id’,’id’=>12)

Funciona tanto para la url www.miweb.com/index.php?id=12 como para www.miweb.com/index.php/id/12


Parseo CSS

Agregar a favoritos

8 Comentarios

Posteado hace 896 días en:

¿Expresiones o tokens?

Ando buscando información y scripts para el parseo de hojas de estilos, con el fin de depurar mi parser y aproximarlo un poco al SAC.
Mi parser basado en expresiones regulares se desmorona cuando el código es demasiado complejo, y provoca que los bloques no se reconozcan bien.

He estado mirando scripts, algunos para el highlight del código y me doy cuenta que usan tokens, es decir, cuando encuentran un token de apertura (un carácter) hacen un bucle hasta que no den con el token de cierre.
Esto consume más recursos que mis expresiones regulares, pero es muy efectivo.

Pongamos un ejemplo:


.miclass {
js: "function hello() { alert("hello"); }";
}

Supongamos que quiero añadir código JS, con mi parser al encontrarse con el corchete de cierre }" lo interpretaría como fin de bloque, pero con tokens no pararía hasta llegar al final.

Que es lo mas aconsejable? potenciar las expresiones regulares, o tirar por la otra practica?.


Buscador 11 en 1

Agregar a favoritos

4 Comentarios

Posteado hace 961 días en:

Partiendo como base la función google(); he creado una clase para mostrar el primer resultado en 11 buscadores.Todos funcionan con el mismo patrón, usa dos expresiones regulares, una para encontrar los resultados y la otra para obtener el enlace y el titulo.

Lista de buscadores:

  1. Google
  2. Yahoo
  3. AlltheWeb
  4. MsnSearch
  5. a9
  6. Flickr
  7. Technorati
  8. Del.icio.us
  9. Bloglines
  10. Bitacoras.com
  11. Wikipedia

La función a llamar devuelve un objeto con 4 variables: La pagina en donde busca (search), el titulo encontrado (title), la URL encontrada (url) y el numero de resultados de la búsqueda (results).

Ejemplo:


$google = search::google('icebeat');
echo $google->title.':'.$google->url;


Substraer el ultimo elemento de una matriz

Agregar a favoritos

2 Comentarios

Posteado hace 964 días en:

Cuando queremos extraer el ultimo elemento de una matriz en php utilizamos la función array_pop , esta función nos devuelve el valor del ultimo elemento. El problema es que no puedes obtener el indice.

Como en CSSing se manejan muchos arrays he tenido que crear una función para ayudarme a obtener los indices.
Actúa igual que array_pop() pero en el caso de contener un indice no numérico devuelve un array y en caso de no serlo retorna el valor.

Ejemplo:


//indice no numerico
$stack= array("uno" => "green", "dos" => "brown", "tres" => "blue"); 
print_r($stack);
$end = array_ipop($stack);
print_r($end); 
print_r($stack);

$end devuelve array("tres"=>"blue");