如果在PHP中不使用exec(“ls-l”),那么如果有1000个文件,我们是否需要调用stat()来获得1000倍的文件大小?

如果在PHP中不使用exec(“ls-l”),那么如果有1000个文件,我们是否需要调用stat()来获得1000倍的文件大小?,php,Php,如果我们在PHP中不使用exec(“ls-l”),而是使用readdir()或scandir()来获取文件列表,并希望列出文件大小,可能还有修改日期,那么如果有1000个文件,我们是否需要调用stat()1000次?有更简单或更快的方法吗 调用stat()1000次会对文件系统造成很大影响吗?或者,操作系统可能会将所有数据缓存在内存中,因此它只涉及对RAM的访问,而不涉及对磁盘的访问 更新:使用DirectoryIterator()看起来不错,但是如何对项目进行排序?LS在后台为您调用stat函

如果我们在PHP中不使用exec(“ls-l”),而是使用readdir()或scandir()来获取文件列表,并希望列出文件大小,可能还有修改日期,那么如果有1000个文件,我们是否需要调用stat()1000次?有更简单或更快的方法吗

调用stat()1000次会对文件系统造成很大影响吗?或者,操作系统可能会将所有数据缓存在内存中,因此它只涉及对RAM的访问,而不涉及对磁盘的访问


更新:使用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();
}