开发者

How to determine file age using PHP?

Any way to determine file age of an image in a folder using PHP?

I want to delete older files than 2 hours, is this pos开发者_运维问答sible without adding timestamp-names to their filenames on upload to the folder?

If so, please give me an example!

thanks


if (time()-filemtime($filename) > 2 * 3600) {
  // file older than 2 hours
} else {
  // file younger than 2 hours
}


You can use filemtime function to get the last modified date/time and use that to see how old the file is.


You are looking for the filemtime function

<?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));
}
?>


I digged a bit on the web and Stackoverflow (PHP How to find the time elapsed since a date time?) and here is my solution:

It's a full answer giving a human readable representation of file age + a check to see if the file is 2 hours old or not.

<?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).'.';

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

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

Here is the output on my side:

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.


Be aware that on NAS/SAN storages the file time of an up-to-date file might be different from the PHP time(), as those storages might have their own clock. I think such configurations are rare, but it cost me some headache.


You can use date/time of last file modification:

  • http://php.net/manual/en/function.filemtime.php


I'd check out the filemtime() or the filectime() functions. Those will give you the modified and creation times (respectively) of the file.


Try with filemtime()

This function returns the time when the data blocks of a file were being written to, that is, the time when the content of the file was changed.

int filemtime ( string $filename )
  • filename: Path to the file.
// 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));
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜