Foros del Web » Programando para Internet » PHP »

borrar imagen despues de x tiempo

Estas en el tema de borrar imagen despues de x tiempo en el foro de PHP en Foros del Web. hola que tal, les cuento; lo que pasa es que tengo un script para subir imagenes y tengo varios campos en una base de datos ...
  #1 (permalink)  
Antiguo 18/03/2011, 21:19
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
borrar imagen despues de x tiempo

hola que tal, les cuento; lo que pasa es que tengo un script para subir imagenes y tengo varios campos en una base de datos mysql, entre ellos unos que se llaman date que guarda la fecha en la que se subio la imagen en este formato '8/03/2011, 10:00:31' y el otro campo es status que pone '0' cuando se sube la imagen, y cuando se activa se cambia a '1' y hasta hay todo va bien

Ahora lo que quiero hacer es que si la imagen no es activada en 1 hora desde que se subio la imagen sea borrada. Tenia pensado crear un script que comprabara si el status de la imagen es '0' y si es asi que la borre y para eso que el script se activara cada hora con Cronjobs, pero el principal problema iba a ser que se iban a borrar imagenes que no llevaban la hora

Alguien que me pueda ayudar con un script que compruebe la hora en que se subio la imagen y si no se a activado en una hora sea borrada automticamente???

Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 19/03/2011, 08:19
 
Fecha de Ingreso: marzo-2011
Ubicación: Palmira
Mensajes: 35
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: borrar imagen despues de x tiempo

Hola,

lo que puedes hacer es utilizar una consulta que pregunte si el estado es cero y que ademas realice una resta entre las fecha de en que se subio y la actual, eso lo tienes que buscar, empieza por aca:

http://dev.mysql.com/doc/refman/5.0/es/date-calculations.html

espero haberte dado una idea,

saludos
  #3 (permalink)  
Antiguo 19/03/2011, 21:43
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: borrar imagen despues de x tiempo

Hola que tal, muchas gracias por responder; revise el link que me pasaste pero no entendi nada , pero lo que conseguido de la siguiente maner:

Código PHP:
Ver original
  1. <?php
  2.  
  3. include_once("bd.php");
  4.  
  5. $query = "SELECT * FROM images WHERE status = '0'";
  6. $result = mysql_query($query);
  7.  
  8. while($image = mysql_fetch_assoc($result))
  9. {
  10. $time_upload = $image['date'];
  11. $time_now = date("Y/n/j, H:i:s");
  12. $tiempo_transcurrido = (strtotime($time_now) - strtotime($time_upload));
  13.  
  14. if($tiempo_transcurrido > "3600")
  15. {
  16.     $link = $image['location'];
  17.     $delete_link = array("http://", ".upload.com");
  18.     $str_link = str_replace($delete_link, "", $link);
  19.     unlink("servers/".$str_link);
  20.    
  21.     $sql_del = "DELETE FROM images WHERE location = '$link'";
  22.     $result_del = mysql_query($sql_del);
  23. }
  24. }
  25.  
  26. ?>

Si funciona, pero quisier saber si es la forma correcta de hacerlo y si se puede mejorar les agradeceria mucho que me pudieran ayudar

Saludos y gracias de antemano
  #4 (permalink)  
Antiguo 20/03/2011, 04:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: borrar imagen despues de x tiempo

Que tal WinderJerter,

podrias traerte los registros pasados de tiempo directamente en la query en vez de traer todos los registros y comparar la fecha, tambien podrias guardar el id del registro borrado para tirar un where in en vez de una query para cada uno, algo asi:

Código PHP:
Ver original
  1. include_once("bd.php");
  2.  
  3. $query  = 'SELECT * '
  4.         . 'FROM images '
  5.         . 'WHERE NOW() > DATE_ADD(date,INTERVAL 1 HOUR) '
  6.         . 'AND status = 0';
  7.  
  8. $result = mysql_query($query);
  9.  
  10. $toDelete = array();
  11. while ($image = mysql_fetch_assoc($result)) {
  12.     $delete_link = array('http://', '.upload.com');
  13.     $str_link    = str_replace($delete_link, '', $image['location']);
  14.     $toDelete[]  = $image['id'];
  15.     unlink('servers/' . $str_link);
  16. }
  17.  
  18. if (count($toDelete)) {
  19.     $sql_del    = 'DELETE FROM images WHERE id IN(' . implode(',', $toDelete) . ')';
  20.     $result_del = mysql_query($sql_del);
  21. }

te sugiero tambien que tanto las tablas como los campos no los nombres con palabras reservadas ni tipos de datos, por ejemplo el campo date, te puede dar problemas.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 20/03/2011, 13:00
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: borrar imagen despues de x tiempo

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal WinderJerter,

podrias traerte los registros pasados de tiempo directamente en la query en vez de traer todos los registros y comparar la fecha, tambien podrias guardar el id del registro borrado para tirar un where in en vez de una query para cada uno, algo asi:

Código PHP:
Ver original
  1. include_once("bd.php");
  2.  
  3. $query  = 'SELECT * '
  4.         . 'FROM images '
  5.         . 'WHERE NOW() > DATE_ADD(date,INTERVAL 1 HOUR) '
  6.         . 'AND status = 0';
  7.  
  8. $result = mysql_query($query);
  9.  
  10. $toDelete = array();
  11. while ($image = mysql_fetch_assoc($result)) {
  12.     $delete_link = array('http://', '.upload.com');
  13.     $str_link    = str_replace($delete_link, '', $image['location']);
  14.     $toDelete[]  = $image['id'];
  15.     unlink('servers/' . $str_link);
  16. }
  17.  
  18. if (count($toDelete)) {
  19.     $sql_del    = 'DELETE FROM images WHERE id IN(' . implode(',', $toDelete) . ')';
  20.     $result_del = mysql_query($sql_del);
  21. }

te sugiero tambien que tanto las tablas como los campos no los nombres con palabras reservadas ni tipos de datos, por ejemplo el campo date, te puede dar problemas.

Saludos.
Hola que tal masterpuppet, muchas gracias por responder, tu script funciona vien pero me he dado cuenta que solo borra la imagen del servidor pero no borra el registro de la base de datos, he trabado de solucionarlo pero no puedo.

A que se debe que no borra el registro???

Saludos!!!
  #6 (permalink)  
Antiguo 20/03/2011, 13:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: borrar imagen despues de x tiempo

Asumi que tenias un campo id en image, si no es el caso se puede adaptar para que borre por el campo location(como lo tenias tu), algo asi:

Código PHP:
Ver original
  1. include_once("bd.php");
  2.  
  3. $query  = 'SELECT * '
  4.         . 'FROM images '
  5.         . 'WHERE NOW() > DATE_ADD(date,INTERVAL 1 HOUR) '
  6.         . 'AND status = 0';
  7.  
  8. $result = mysql_query($query);
  9.  
  10. $toDelete = array();
  11. while ($image = mysql_fetch_assoc($result)) {
  12.     $delete_link = array('http://', '.upload.com');
  13.     $str_link    = str_replace($delete_link, '', $image['location']);
  14.     $toDelete[]  = $image['location'];
  15.     unlink('servers/' . $str_link);
  16. }
  17.  
  18. if (count($toDelete)) {
  19.     $sql_del    = "DELETE FROM images WHERE location IN('" . implode("','", $toDelete) . "')";
  20.     $result_del = mysql_query($sql_del);
  21. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 20/03/2011, 13:40
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: borrar imagen despues de x tiempo

Gracias, mira lo he solucionado de esta manera; que te parese???

Código PHP:
Ver original
  1. <?php
  2.  
  3. include_once("bd.php");
  4.  
  5. $query  = 'SELECT * '
  6.         . 'FROM images '
  7.         . 'WHERE NOW() > DATE_ADD(date,INTERVAL 1 HOUR) '
  8.         . 'AND status = 0';
  9.  
  10. $result = mysql_query($query);
  11.  
  12. while ($image = mysql_fetch_assoc($result)) {
  13.     $delete_link = array('http://', '.upload.com');
  14.     $str_link    = str_replace($delete_link, '', $image['location']);
  15.     unlink('servers/' . $str_link);
  16.  
  17.     $sql_del = $sql_del = "DELETE FROM images WHERE location = '".$image['location']."'";
  18.     $result_del = mysql_query($sql_del);
  19. }
  20.  
  21.  
  22. ?>

Saludos y gracias

Última edición por WinderJerter; 20/03/2011 a las 13:51
  #8 (permalink)  
Antiguo 20/03/2011, 13:52
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: borrar imagen despues de x tiempo

mmmmmm, bueno volve para atras y dejalo para que borre por id, y vamos a debugear,

Código PHP:
Ver original
  1. ...
  2. var_dump($toDelete);
  3. if (count($toDelete)) {
  4.     $sql_del    = 'DELETE FROM images WHERE id IN(' . implode(',', $toDelete) . ')';
  5.     echo $sql_del . PHP_EOL;
  6.     $result_del = mysql_query($sql_del) or die(mysql_error());
  7. }

en caso de que no de error ejecuta la query en phpmyadmin o el programa que utilices.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 20/03/2011, 14:11
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: borrar imagen despues de x tiempo

Cita:
Iniciado por masterpuppet Ver Mensaje
mmmmmm, bueno volve para atras y dejalo para que borre por id, y vamos a debugear,

Código PHP:
Ver original
  1. ...
  2. var_dump($toDelete);
  3. if (count($toDelete)) {
  4.     $sql_del    = 'DELETE FROM images WHERE id IN(' . implode(',', $toDelete) . ')';
  5.     echo $sql_del . PHP_EOL;
  6.     $result_del = mysql_query($sql_del) or die(mysql_error());
  7. }

en caso de que no de error ejecuta la query en phpmyadmin o el programa que utilices.
porque cuando le hago un echo a $toDelete de imprime Array
  #10 (permalink)  
Antiguo 20/03/2011, 14:18
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: borrar imagen despues de x tiempo

WinderJerter, de la forma que propusiste en el post anterior tira una query por imagen, si lo haces con where in es una única query para todas las imagenes, cual elegir depende de ti, yo creo que es mejor aprender a hacer las cosas bien.
Con respecto al echo, no puede ser un echo porque justamente es un array, hacele como te puse en el ejemplo un var_dump, deberia mostrarte un array con los id's.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 20/03/2011, 14:26
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: borrar imagen despues de x tiempo

Cita:
Iniciado por masterpuppet Ver Mensaje
WinderJerter, de la forma que propusiste en el post anterior tira una query por imagen, si lo haces con where in es una única query para todas las imagenes, cual elegir depende de ti, yo creo que es mejor aprender a hacer las cosas bien.
Con respecto al echo, no puede ser un echo porque justamente es un array, hacele como te puse en el ejemplo un var_dump, deberia mostrarte un array con los id's.

Saludos.
Muchas gracias masterpuppet, ya funciona de maravilla tu script

Saludos y muchas gracias
  #12 (permalink)  
Antiguo 17/05/2011, 20:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: borrar imagen despues de x tiempo

hola que tal, perdon por revivir el tema, lo que queria preguntar es que si solo quiero eliminar una imagen por consulta puede usar el mismo codigo que es este:

Código PHP:
Ver original
  1. include_once("bd.php");
  2.  
  3. $query  = 'SELECT * '
  4.         . 'FROM images '
  5.         . 'WHERE NOW() > DATE_ADD(date,INTERVAL 1 HOUR) '
  6.         . 'AND status = 0';
  7.  
  8. $result = mysql_query($query);
  9.  
  10. $toDelete = array();
  11. while ($image = mysql_fetch_assoc($result)) {
  12.     $delete_link = array('http://', '.upload.com');
  13.     $str_link    = str_replace($delete_link, '', $image['location']);
  14.     $toDelete[]  = $image['location'];
  15.     unlink('servers/' . $str_link);
  16. }
  17.  
  18. if (count($toDelete)) {
  19.     $sql_del    = "DELETE FROM images WHERE location IN('" . implode("','", $toDelete) . "')";
  20.     $result_del = mysql_query($sql_del);
  21. }

O se puede simplificar para que se realize la peticion en menos tiempo???

Saludos

Etiquetas: borrar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:10.