Código PHP:
<?php
Class PowerCache {
/**
* Referencia al dato cacheable
*/
var $data;
var $file;
var $time;
/**
* Constructor
*
* Una forma encapsulada de setCache
*/
function PowerCache(&$data, $file, $time=null)
{
$this->setCache($data, $file, $time);
}
/**
* Establece un cache para $data, apuntando al archivo $file
* y estará vigente durante $time segundos
*/
function setCache(&$data, $file, $time=null)
{
$this->data =& $data;
$this->setFile($file);
$this->setTime($time);
}
/**
* Establece el archivo de cache
*/
function setFile($file) {
$this->file = (!is_string($file)) ? 'cache.data' : $file;
}
/**
* Establece el tiempo de vigencia del cache
*/
function setTime($time) {
$this->time = (!is_numeric($time) OR $time < 0) ? 300 : $time;
}
function getTime() {
if( file_exists($this->file) )
return time() - filemtime($this->file);
else
return -1;
}
/**
* Retorna una referencia al dato en cache
*/
function &getData() {
return $this->data;
}
function save()
{
$state=true;
if (!$fp = fopen($this->file, 'w')) {
//echo 'No se puede abrir el archivo ('.$this->file.')';
$state = false;
}
if (fwrite($fp, serialize($this->data)) === FALSE) {
//echo 'No se puede escribir al archivo ('.$this->file.')';
$state = false;
}
fclose($fp);
return $state;
}
/**
* Carga los datos desde Cache, sólo si existe el archivo y está vigente.
*/
function load()
{
if(file_exists($this->file)
AND is_readable($this->file)
AND $this->getTime() <= $this->time
)
{
$this->data = unserialize( file_get_contents($this->file) );
return true;
}
return false;
}
}
?>
Mi problema es que asi como esta lo encuentro inseguro, ya que si alguien conoce mi script (pienso publicarlo) sabra donde guardo los archivos cache, por lo tanto:
(1) un dato serializado = es legible, no se encriptan.
(2) bastará con poner la url en le navegador y bajar
(3) si guardara el cache en un archivo .php y la cadena en una variable, probablemente desde afuera no se vería nada, pero si uso un hosting compartido podrían hacerle include() y ver que variables tiene.
el problema (2) pienso solucionarlo como explique en el (3), pero aun no estoy seguro de que hacer con el (1) y el (3).
Pensaba en hacer/adjuntar un pack de métodos de encriptación de doble vía. Adjuntar algun pequeño código en la cabecera del cache para evitar que sea incluído si no pertenece a mi sitio (no se me ocurre como validar eso, pero die() me podría ayudar en caso de false
![borracho](http://static.forosdelweb.com/fdwtheme/images/smilies/borracho.png)
Este tema de la seguridad da para largo... espero ojala no haber dado lata con esto, espero que algunos entendidos aqui puedan hecharle un ojo a mi clase y ver que le modificar/complementar para hacerla + segura.