PHP文件:文件夹和子文件夹中最近的11个文件

时间:2012-06-11 17:28:53

标签: php file directory

我有一个包含大约100个子目录的目录(嵌套,深3-4个)。我需要一个小的PHP脚本,它只会输出最近添加的11个(或修改过的,因为它们都是pdf的)文件的列表,每个文件之间只有一个简单的<br />,每个都链接到它们的URL。

我找到了一些可以做1或全部的脚本,但是根本不知道如何开始限制为11,或者如何应用精确的href。

我的另一个问题是此脚本的服务器使用情况,因为它将被放置在将会看到低使用率的着陆页上,但每个用户都会看到它。

任何有关资源的想法或开始的地方都会受到赞赏!

4 个答案:

答案 0 :(得分:3)

未经测试,但应该可以使用:

<?php

function getFiles($dir)
{
    $arr=scandir($dir);
    $res=array();
    foreach ($arr as $item)
    {
        if ($item=='..' || $item=='.'){continue;}
        $path=$dir.'/'.$item;
        if (is_dir($path))
        {
            $res=array_merge($res,getFiles($path));
        }
        else
        {
            $res[$path]=filemtime($path);
        }
    }
    return $res;
}

$files=getFiles('directory');
arsort($files);
$files=array_slice(array_keys($files),0,11);
foreach ($files as $file)
{
    echo '<a href="'.$file.'">'.$file.'</a><br />';
}
?>

答案 1 :(得分:1)

提供基于Web的上传界面会更有意义。这样,您就可以跟踪每次新上传的内容。

  • 用户选择类别(每个类别/子类别映射到文件夹)
  • 将文件上传到服务器
  • 脚本转储表格行中的每个文件名,位置和日期

完成。要获取最新的11个文件(在整个系统或特定类别/文件夹中),您只需要查询数据库。

如果您的用户也需要删除文件,也可以为该功能添加Web界面。而不是删除文件,只需将它们标记为“隐藏”在表中。

除了解决眼前的问题外,它还将为审核,所有权归属和搜索等提供更多可能性。

答案 2 :(得分:0)

使用RecursiveIterator。这就是它的设计目标。我添加了一个名为sortedIterator的额外迭代器,它扩展了SPLHeap,按getMTim​​e()排序,这是dir的修改时间。

将$ path更改为目录的完整路径。

$path = '.';

class sortedIterator extends SplHeap
{
    public function __construct(Iterator $iterator)
    {
        foreach ($iterator as $item) {
            $this->insert($item);
        }
    }
    public function compare($b,$a)
    {
        return strcmp($a->getMTime(), $b->getMTime());
    }
}

    $recursive = new RecursiveDirectoryIterator($path);
$sortByTime = new sortedIterator($recursive);
$i = 0;
foreach ($sortByTime as $file) {
        if($file->isDir()){
                $dirs[] = $file->getFilename();

                if($i++ == 9){
                        break;
                }
        }
}

print_r(implode("<br />", $dirs));

编辑,如果您想要创建时间,请将getMTim​​e更改为getCTime。

答案 3 :(得分:-1)

使用列出所有这些代码的代码,但在输出之前使用usort调用通过减少修改时间对文件进行排序。然后,你的循环应该从这开始:

$l = count($fileArray);
for( $i=0; $i<11 && $i<$l; $i++) {
    // output file entry
}