Nov18
2005Borrar ficheros temporales automáticamente
Autor: S3rGy0 | Archivado en: ASP
2005
Seguro que alguna vez habéis tenido que trabajar usando ficheros de uso temporal ó registros de base de datos que dependen de una fecha y cuando esta caduca, quedan inservibles y hay que eliminarlos de la tabla correspondiente.
Para el primer caso se suele solucionar fácilmente usando el objeto MemoryStream en lugar de un FileStream, pero a mi me ha pasado ya varias veces que, en determinados casos, no me sirve el MemoryStream. También recuerdo el caso en el que tenía que mandar ficheros a un recurso compartido, dejarlos allí por dos semanas para que lo usaran los usuarios y pasado ese tiempo borrarlos.
Para el segundo caso se soluciona usando un DTS. A mi particularmente no me gustan los DTS porque cada vez que tiene algún problema el servidor y hay que reiniciarlo, indefectiblemente fallan los DTS… sí, sí, les tengo manía.
Está claro que siempre hay más de una solución para un mismo problema pues os voy a presentar una alternativa, que además de ser muy sencilla, es realmente efectiva: utilizar los eventos del Global.asax para eliminar datos temporales de manera automática y sin la intervención de DTS, ni scripts que borren ficheros: En los eventos Session_End y Application_Start se coloca el codigo necesario para borrar los ficheros o registros de base de datos que queramos. En el ejemplo que puse anteriormente lo que hacía era borrar todos los ficheros contenidos en un directorio cuya fecha de creación fuera superior a 2 semanas.
La explicación es muy sencilla, cada vez que finaliza la sesión de un usuario en el servidor web, se comprueba si hay algún fichero o registro que cumpla las condiciones que hemos especificado en código para que sean eliminados. Este codigo se incluye también al comienzo de la aplicación porque si el servidor fuera reiniciado se perderían las sesiones actuales, con lo que al volver a iniciarse la aplicación realizaría otra vez la comprobación. Esto último no es estrictamente necesario, ya que en el momento en el que pierda otro usuario la sesion se realizará otra vez el escaneo, pero a mi me deja más tranquilo.
S3rGy0.









Esto… ¿y eso se puede hacer con php? llevo varios años programando en php y no encontré la forma de simular la variable application de ASP, bueno, si, mediante un fichero o base de datos, pero no es el mismo concepto… ¿en php se pueden borrar ficheros temporales automáticamente sin tener que usar un cron? Gracias
Pues siento decirte que en PHP estoy pegado. A ver si algún compañero te puede responder mejor.
Salu2.