首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP文件:文件夹和子文件夹中最新的11个文件

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

Stack Overflow用户
提问于 2012-06-12 01:28:53
回答 4查看 594关注 0票数 0

我有一个目录,里面有大约100个子目录(嵌套的,有3-4个深度)。我需要一个小的PHP脚本,将简单地输出11最近添加(或修改,因为他们都是pdf的)文件的列表,与每个之间的一个简单的<br />,每个都被链接到他们的网址。

我已经找到了一些可以做1或全部的脚本,但不知道如何开始具体限制到11,或者如何应用确切的href。

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

任何关于资源的想法,或者从哪里开始,都将不胜感激!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-12 01:38:36

未经过测试,但它应该可以工作:

代码语言:javascript
复制
<?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 />';
}
?>
票数 3
EN

Stack Overflow用户

发布于 2012-06-12 02:05:10

提供一个基于web的上传界面会更有意义。这样你就可以跟踪每一次新上传的内容。

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

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

如果你的用户也需要删除文件的能力,只需添加该功能的web界面即可。不删除文件,只需在表中将其标记为“隐藏”即可。

除了解决迫在眉睫的问题外,它还将提供额外的可能性,如适度、所有权归属和搜索。还有更多。

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 02:13:55

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

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

代码语言:javascript
复制
$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));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10984775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档