我有一个包含大约100个子目录的目录(嵌套,深3-4个)。我需要一个小的PHP脚本,它只会输出最近添加的11个(或修改过的,因为它们都是pdf的)文件的列表,每个文件之间只有一个简单的<br />
,每个都链接到它们的URL。
我找到了一些可以做1或全部的脚本,但是根本不知道如何开始限制为11,或者如何应用精确的href。
我的另一个问题是此脚本的服务器使用情况,因为它将被放置在将会看到低使用率的着陆页上,但每个用户都会看到它。
任何有关资源的想法或开始的地方都会受到赞赏!
答案 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,按getMTime()排序,这是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));
编辑,如果您想要创建时间,请将getMTime更改为getCTime。
答案 3 :(得分:-1)
使用列出所有这些代码的代码,但在输出之前使用usort
调用通过减少修改时间对文件进行排序。然后,你的循环应该从这开始:
$l = count($fileArray);
for( $i=0; $i<11 && $i<$l; $i++) {
// output file entry
}