2009-11-18 35 views
31

¿Alguna manera de determinar la antigüedad del archivo de una imagen en una carpeta usando PHP?¿Cómo se determina la antigüedad del archivo con PHP?

Quiero eliminar archivos anteriores a 2 horas, ¿es posible sin agregar nombres de marca de tiempo a sus nombres de archivo al cargarlos en la carpeta?

Si es así, ¡dame un ejemplo!

gracias

Respuesta

22

Puede utilizar filemtime función para obtener la última fecha/hora de modificación y el uso que ver la edad que el archivo es.

1

intento con filemtime()

Esta función devuelve el momento en que los bloques de datos de un archivo se estaban escribiendo a, es decir, el momento en el que el contenido del archivo se ha cambiado.

int filemtime (string $filename) 
  • filename: Ruta del archivo.
// outputs e.g. somefile.txt was last modified: December 29 2002 22:16:23. 

$filename = 'somefile.txt'; 
if (file_exists($filename)) { 
    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename)); 
} 
11

Usted está buscando la función filemtime

<?php 
// outputs e.g. somefile.txt was last modified: December 29 2002 22:16:23. 

$filename = 'somefile.txt'; 
if (file_exists($filename)) { 
    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename)); 
} 
?> 
1

Verificaría las funciones filemtime() o filectime(). Esos le darán los tiempos modificados y de creación (respectivamente) del archivo.

2

me hicieron pozos un poco en la web y Stackoverflow (PHP How to find the time elapsed since a date time?) y aquí está mi solución:

Es una respuesta completa dando una representación legible por humanos de la antigüedad del archivo + una comprobación para ver si el archivo es de 2 horas de vida o no.

<?php 

function humanTiming ($time) 
{ 
    // to get the time since that moment 
    $time = time() - $time; 

    // time unit constants 
    $timeUnits = array (
     31536000 => 'year', 
     2592000 => 'month', 
     604800 => 'week', 
     86400 => 'day', 
     3600 => 'hour', 
     60 => 'minute', 
     1 => 'second' 
    ); 

    // iterate over time contants to build a human 
    $humanTiming; 
    foreach ($timeUnits as $unit => $text) 
    { 
     if ($time < $unit) 
      continue; 
     $numberOfUnits = floor($time/$unit); 

     // human readable token for current time unit 
     $humanTiming = $humanTiming.' '.$numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':''); 

     // compute remaining time for next loop iteration 
     $time -= $unit*$numberOfUnits; 
    } 
    return $humanTiming; 
} 


$filename = '/path/to/your/file.extension'; 

if (file_exists($filename)) 
{ 
    echo 'Now = '.date ("Y-m-d H:i:s.", time()); 
    echo "<br/>$filename was last modified on " . date ("Y-m-d H:i:s.", filemtime($filename)); 
    $time = strtotime('2010-04-28 17:25:43'); 
    $time = filemtime($filename); 
    echo '<br/>File age is '.humanTiming($time).'.'; 

    $elapsedTime = time()-filemtime($filename); 

    echo '<br/>Is file older than 2 hours? '.(($elapsedTime<(2*3600))?'No':'Yes').'.'; 

} 

?> 

Aquí está la salida de mi lado:

Now = 2013-01-29 09:10:12. 
/path/to/your/file.extension was last modified on 2013-01-29 08:07:52. 
File age is 1 hour 2 minutes 20 seconds. 
Is file older than 2 hours? No. 
89
if (time()-filemtime($filename) > 2 * 3600) { 
    // file older than 2 hours 
} else { 
    // file younger than 2 hours 
} 
+4

Creo que esto debería ser aceptado, ya que @anneb proporcionó el código completo. – nmnsud

3

Tenga en cuenta que el NAS/SAN almacenamientos el tiempo de archivo de un archivo hasta a la fecha podría ser diferente del PHP time(), ya que esos almacenamientos pueden tener su propio reloj. Creo que tales configuraciones son de ritmo, pero me costó un poco de dolor de cabeza.

Cuestiones relacionadas