为了账号安全,请及时绑定邮箱和手机立即绑定

使用 scandir 获取按时间排序的文件名

使用 scandir 获取按时间排序的文件名

PHP
婷婷同学_ 2023-04-28 15:07:28
我正在创建文件并将其名称设置为time()使用md5函数的哈希表示:$encoded_data = ['some_data'];$file_name = md5(time()).'.json';$path = base_path("../some_folder/");file_put_contents($path.$file_name, $encoded_data); 我不明白的是,如果我使用scandir排序顺序参数来获取这些文件:foreach(array_diff(scandir($path, 1), ['.', '..']) as $file_name) {    $files[] = base_path('../some_folder/').$file_name;}数组真的会$files按用作文件名的日期和时间排序吗?
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

由于像 md5 这样的哈希函数只是单向的,文件名作为排序标准是无用的。如果您想跟踪用于生成 md5 值的同一时间戳,则必须保留一个 hash:timestamp 表记录在案。如果你这样做了,你就不需要开始运行scandir——你可以简单地从你保存的引用表中读取文件列表。(假设你用删除的文件保持最新。否则,它会显示过时的文件。)

您是否有特殊原因需要使用时间戳的 md5 哈希?为什么不简单地使用时间戳(带有前缀或其他方式)作为文件名?然后您可以简单地按字母顺序、升序或降序排序,并自动按时间顺序排列文件。这将是迄今为止最简单和最轻量级的选择。

如果 md5-hashes 作为文件名是必须的,而编写参考表不是你喜欢的,那么你将不得不循环遍历文件,或者使用 ,usort并检查文件的创建/修改日期 ( filemtime)。

查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信