哪种方法或其他方法最适合用于显示文件?
注意:在这个例子中,我只对显示文件名感兴趣。
另外,FilesystemIterator
中的项目如何排序?
以下三个示例都显示相同的结果,但FilesystemIterator
没有明显的排序顺序。
$path = "/";
exec("ls $path", $results);
foreach($results as $file){
p($file);
}
foreach(glob($path."/*") as $file){
p(basename($file) );
}
foreach(new FilesystemIterator($path) as $file){
p($file->getFilename());
}
function p($s){
global $path;
echo "<a href=\"$path?f=$s\">$s</a><BR>\n";
}
输出:
exec("ls ...") method
bin
boot
cdrom
dev
etc
home
initrd.img
...
glob() method
bin
boot
cdrom
dev
etc
home
initrd.img
...
FilesystemIterator() method
mnt
vmlinuz
cdrom
usr
sys
home
var
...
答案 0 :(得分:1)
这个怎么样:
exec() - 是最糟糕的解决方案,因为如果用户可以管理在exec输入参数中输入自定义字符串,它会在您的应用程序中创建潜在的安全漏洞。出于这个原因,大多数主机阻止您使用exec,因此如果您将应用程序部署到您不拥有的某个主机,则可以阻止此命令。
glob(),opendir / readdir解决方案很好,与FilesystemIterator相同。这是你的,你会选择什么。优点和缺点是这些:
函数,例如glob,opendir / readdir消耗更少的内存,因为没有创建对象,只需获取一个字符串值数组。如果您确定,这可能是好的,您只需要文件系统中的路径列表。
FilesystemIterator为您提供了SplFileInfo对象的集合,这些对象为每个项目提供了一组完整的方法,例如getExtension,getFullPath,getFilename,这使得使用文件/文件夹执行某些高级任务非常容易。
Ps。:在可用性方面最好的是通过FilesystemIterator的OOP方法,因为你得到的对象,保存或者可以获得关于目标文件/文件夹的许多信息,在简单性方面你可以选择调用函数,例如glob < / p>
答案 1 :(得分:0)
我不确定您给出的方法的优缺点,但PHP确实为您提供了一组处理目录的函数。
http://www.php.net/manual/en/ref.dir.php
快速样本:
$dh = opendir("path/to/folder");
while (($file = readdir($dh)) !== false) {
// filename will be in $file, will include "." and ".."
}
答案 2 :(得分:0)
每当您要求“最佳”时,您需要定义标准,因此无法回答您的主要问题。
但有些注意事项:
ls
将自行过滤掉所有隐藏文件。我默认使用目录迭代器,根据需要对其进行排序,除非有些要求(那些你还没有提到的要求)另有说明。