如果在PHP中不使用exec(“ls-l”),那么如果有1000个文件,我们是否需要调用stat()来获得1000倍的文件大小?
如果我们在PHP中不使用exec(“ls-l”),而是使用readdir()或scandir()来获取文件列表,并希望列出文件大小,可能还有修改日期,那么如果有1000个文件,我们是否需要调用stat()1000次?有更简单或更快的方法吗 调用stat()1000次会对文件系统造成很大影响吗?或者,操作系统可能会将所有数据缓存在内存中,因此它只涉及对RAM的访问,而不涉及对磁盘的访问如果在PHP中不使用exec(“ls-l”),那么如果有1000个文件,我们是否需要调用stat()来获得1000倍的文件大小?,php,Php,如果我们在PHP中不使用exec(“ls-l”),而是使用readdir()或scandir()来获取文件列表,并希望列出文件大小,可能还有修改日期,那么如果有1000个文件,我们是否需要调用stat()1000次?有更简单或更快的方法吗 调用stat()1000次会对文件系统造成很大影响吗?或者,操作系统可能会将所有数据缓存在内存中,因此它只涉及对RAM的访问,而不涉及对磁盘的访问 更新:使用DirectoryIterator()看起来不错,但是如何对项目进行排序?LS在后台为您调用stat函
更新:使用DirectoryIterator()看起来不错,但是如何对项目进行排序?LS在后台为您调用stat函数。列出一个目录只会给出有问题的文件/文件夹的名称,因此您必须手动统计返回的每个文件名,以获取每个文件本身的信息。所以,是的,你必须调用stat 1000次,才能获得1000个文件的所有信息。理想情况下,您将在循环中执行此操作。LS在后台为您调用stat函数。列出一个目录只会给出有问题的文件/文件夹的名称,因此您必须手动统计返回的每个文件名,以获取每个文件本身的信息。所以,是的,你必须调用stat 1000次,才能获得1000个文件的所有信息。理想情况下,您将在循环中完成。如果您不需要stat的所有信息,并且不必解析来自
exec(“stat$filename”)
的输出,您可以使用“专用”PHP命令,即filectime
用于修改日期,filesize
用于大小等
EDIT:现在我学习了一个新命令:)PHP有
fstat
,它返回一个assoc数组。也许filectime在内部使用这个?无论如何,不要使用exec stat并解析它。如果您不需要stat提供的所有信息,也不必解析exec(“stat$filename”)的输出,您可以使用“专用”PHP命令,即filectime
用于修改日期,filesize
用于大小等
EDIT:现在我学习了一个新命令:)PHP有fstat
,它返回一个assoc数组。也许filectime在内部使用这个?无论如何,不要使用exec stat并解析它。为什么要使用exec()
命令?如果您有php5.x,这是一种更干净的解决方案:)
为什么要使用exec()
命令?如果您有php5.x,这是一种更干净的解决方案:)
@Jian Lin:复制并粘贴1000次。;)@林健:复制粘贴1000次这看起来不错,只是有没有办法按字母顺序对文件名进行排序?谢谢。不幸的是这个类没有这个有用的方法。您可以(A)扩展(PHP)这个类并添加这样的方法,或者(B)将结果分配给数组,然后对其进行排序。但这是一个非常常见的请求,因此我相信在未来的php版本中我们将有一个内置的sort()方法。:)这看起来不错,只是有没有办法按字母顺序对文件名进行排序?谢谢。不幸的是这个类没有这个有用的方法。您可以(A)扩展(PHP)这个类并添加这样的方法,或者(B)将结果分配给数组,然后对其进行排序。但这是一个非常常见的请求,因此我相信在未来的php版本中我们将有一个内置的sort()方法。:)
$files = new DirectoryIterator('/www/test/');
foreach ($files as $file) {
if ($file->isFile()) echo $file->getSize();
}