Home > Software engineering >  PHP footer display file time stamp
PHP footer display file time stamp

Time:02-05

For each page I am coding I have a foot that I use php include "footer.php" in all of them. Below is the foot.php code. I need my code to be able to give the correct time stamp for each file not one speific file. So in the end each page should have a different time stamp because I am workign on each file at different times becasue the website I am making is for a class assignments. And of course each assignment is being coded at on different days. If this doesn't make since let me know.

<footer align="center">
    <hr width="900px" size="2" noshade="noshade" color="black" align="center">
    <div style="padding:0 30px">
        <p>Validated by:</p>
        <a href="https://validator.w3.org/check?uri=referer"><img src="https://www.w3.org/Icons/valid-xhtml11" alt="Valid XHTML 1.1" height="31" width="88"></a>
        <a href="https://jigsaw.w3.org/css-validator/check/referer"><img src="https://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>

        <p>Last modified:
            <?php
            $timestamp = filemtime(__FILE__);
            $date_time = new DateTime();
            $date_time->setTimezone(new DateTimeZone("America/New_York"));
            $date_time->setTimestamp($timestamp);

            echo $date_time->format("F j Y g:i a.");
            ?>
        </p>
    </div>
</footer>

I asked for help on this before but not working out.

CodePudding user response:

First we need a function that reads all files of a folder in an association
reads out the timestamp values

function getFileModificationTimes(string $directory): array {
    $files = scandir($directory);
    $modificationTimes = [];
    foreach ($files as $file) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        $path = $directory . '/' . $file;
        if (!is_file($path)) {
            continue;
        }
        $modificationTimes[$file] = filemtime($path);
    }
    return $modificationTimes;
}

and a second function that determines the largest/most recent value

function getMaxModificationTime(array $modificationTimes) {
    $maxModificationTime = 0;
    $maxFile = '';
    foreach ($modificationTimes as $file => $modificationTime) {
        if ($modificationTime > $maxModificationTime) {
            $maxModificationTime = $modificationTime;
            $maxFile = $file;
        }
    }
    return [$maxFile, $maxModificationTime];
}

the footer now shows the date of the newest file from the folder

<?php
     $modificationTimes = getFileModificationTimes('/path/to/directory');
     list($maxFile, $maxModificationTime) = getMaxModificationTime($modificationTimes);
?>

<footer align="center">
    <hr width="900px" size="2" noshade="noshade" color="black" align="center">
    <div style="padding:0 30px">
        <p>Validated by:</p>
        <a href="https://validator.w3.org/check?uri=referer"><img src="https://www.w3.org/Icons/valid-xhtml11" alt="Valid XHTML 1.1" height="31" width="88"></a>
        <a href="https://jigsaw.w3.org/css-validator/check/referer"><img src="https://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>

        <p>The file with the most recent modification time is <?=$maxFile?>, which was modified at <?=date('Y-m-d H:i:s', $maxModificationTime)?>.
        </p>
    </div>
</footer>

CodePudding user response:

If you want to show the modification time of the file including the footer, then remove $timestamp = filemtime(__FILE__); from the footer file and put it before the include().

Eg:

$timestamp = filemtime(__FILE__);
include('footer.php');
  • Related