1

我想创建一个新闻页面,其中包含在以下目录结构中创建的最新 3 个文件的片段:

所以可以说我有以下文件:

/news.php /2010/the-latest-article.php /2009/some-long-article-name.php /2009/another-long-article-name.php /2009/too-old-article-name.php /2009/another-old-article-name.php

我只想将前 3 个文件包含在 news.php 输出中。

4

4 回答 4

3

你必须:

  • 通过遍历您的目录结构列出所有现有的 PHP 文件
  • 访问他们的创作时间filectime
  • 选择该列表中最近的三个

如果您有很多文件要搜索,这可能会变慢。数据库会更快。

于 2009-12-29T16:21:43.347 回答
3

如果您可以在文件名前加上日期和时间 (YYYY-MM-DD HH:mm:ss),那么您可以简单地按字母顺序对它们进行排序并取最后三个。否则,维克多有​​一个很好的答案。

于 2009-12-29T16:23:41.077 回答
1

您可以使用 opendir http://php.net/manual/en/function.opendir.php和 readdir http://www.php.net/manual/en/function.readdir.php打开文件目录

然后,您可以使用 php 函数 filemtime http://php.net/manual/en/function.filemtime.php返回传递给它的文件名的最后修改日期。

因此,您要做的几乎就是查看目录中的所有文件并通过返回 filemtime(它返回一个 UNIX 时间戳)对它们进行排序。一旦你订购了它们(使用你喜欢的任何排序算法),只需返回前 3 个结果。

于 2009-12-29T16:24:40.760 回答
1

来自 php.net:

foreach (glob("../downloads/*") as $path) { //configure path
    $docs[filectime($path)] = $path;
} ksort($docs); // sort by key (timestamp)

foreach ($docs as $timestamp => $path) {
    print date("d. M. Y: ", $timestamp);
    print '<a href="'. $path .'">'. basename($path) .'</a><br />'; 
}

此外,如果您使用windoze,filemtime 可能会提供更好的结果。

于 2009-12-29T16:25:55.230 回答