【问题标题】:How to echo out the contents of text files in a directory based on the date that it was last modified?如何根据上次修改的日期回显目录中文本文件的内容?
【发布时间】:2015-05-23 21:54:45
【问题描述】:

我创建了一个目录,其中包含以下文件:

  • index.php
  • one.txt - 你好
  • two.txt - 好的
  • three.txt - 再见
  • four.txt -

粗体字告诉你这些文本文件包含什么。

我要做的是将文本文件的所有内容回显到 index.php 页面中。所以当用户访问 index.php 页面时,他们会看到:

日期:2015 年 5 月 13 日
文本文件内容:您好

日期:2015 年 5 月 12 日
文本文件内容:好的

日期:2015 年 5 月 11 日
文本文件内容:再见

日期:2015 年 5 月 10 日
文本文件内容:酷

从上面可以看到,文本文件的创建日期及其内容都已回显。此外,它们会根据上次修改的顺序被回显。

这是我试图用来实现此目的的代码:

    <?php
    foreach (glob("*.txt") as $filename) {
      echo "Date:"; 
      echo date('d F Y', filemtime($filename)) . 
      "Contents of text file:";
      echo file_get_contents($filename);
     }
    ?>

这段代码中发生的事情是:

  • 目录中的所有文本文件都被拾取
  • 对于每个文本文件,它都会获取其最后修改日期以及其中包含的内容

这段代码的结果是它类似于上面黄色框中的内容(这是我想要实现的),但是回显的顺序不是日期顺序。它得到了一些类似这样的回应:

  • 5 月 13 日
  • 5 月 10 日
  • 5 月 11 日
  • 5 月 12 日

我将如何使它根据上次修改的日期得到回显?最晚日期在顶部,最旧日期在底部?

【问题讨论】:

  • 收集消息到数组,排序然后回显。
  • Glob 不保证返回条目的顺序。您需要根据需要对它们进行排序。也许有用:glob() - sort by date。然后使用这些条目来获取和显示文件内容。

标签: php date echo


【解决方案1】:

这样做:

<?php
foreach (glob("*.txt") as $filename) {
  $result[date('Ymd', filemtime($filename))]= 
    "Date:". 
    date('d F Y', filemtime($filename)) . 
    "Contents of text file:".
    file_get_contents($filename);
 }
ksort($result);
echo implode("", $result);
?>

【讨论】:

    【解决方案2】:
    <?php
    
    foreach (glob("*.txt") as $filename) 
    {
        $time = filemtime($filename);
        $files[$filename] = $time;
    }
    
    arsort($files);
    
    foreach ($files as $file => $time) 
    {
        "Contents of text file:";
        echo file_get_contents($file);
    }
    
    ?>
    

    编辑:

    感谢 Glavić 的提示。我更新了脚本,所以文件不会丢失。

    【讨论】:

    • 如果多个文件的修改时间相同,就会发生冲突,只有最后一个文件可用。
    • @Glavić 谢谢提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多