我想在浏览器的目录中显示文件。我知道使用@opendir和readdir.. 是可行的。但是我想要的是将列表中的文件数限制为特定数量,然后使用分页显示。
您可以使用scandir将目录的所有内容读入数组。然后根据分页值输出数组的内容。
$offset = 10; //get this as input from the user, probably as a GET from a link
$quantity = 10; //number of items to display
$filelist = scandir('/mydir');
//get subset of file array
$selectedFiles = array_slice($filelist, $offset-1, $quantity);
//output appropriate items
foreach($selectedFiles as $file)
{
echo '<div class="file">'.$file.'</div>';
}
Run Code Online (Sandbox Code Playgroud)
DirectoryIterator是LimitIterator我新最好的朋友,尽管glob似乎更容易进行预过滤。您也可以编写自定义的FilterIterator. 我认为需要 PHP > 5.1。
无前置过滤器:
$dir_iterator = new DirectoryIterator($dir);
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);
Run Code Online (Sandbox Code Playgroud)
球形预过滤器:
$dir_glob = $dir . '/*.{jpg,gif,png}';
$dir_iterator = new ArrayObject(glob($dir_glob, GLOB_BRACE));
$dir_iterator = $dir_iterator->getIterator();
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);
Run Code Online (Sandbox Code Playgroud)
然后,做你的事:
foreach ($paginated as $file) { ... }
Run Code Online (Sandbox Code Playgroud)
请注意,在示例中DirectoryIterator,$file将是 的实例SplFileInfo,而globexample 只是磁盘路径。