繁体   English   中英

PHP:为大于 2GB 的文件计算文件 HASH

[英]PHP: Calculating File HASH for Files Larger than 2GB

请您指教,如何在 PHP 中对大于 2GB 的文件计算文件 HASH?

我唯一知道的 PHP 函数是:

string hash_file ( string $algo , string $filename [, bool $raw_output = false ] )

然而,这个功能有一个限制。 它为小于 2GB 的文件返回 HASH。 对于较大的文件, hash_file()会引发错误。

以下是一些限制/要求:

  • 应该在 Linux Ubuntu 64 位服务器上工作
  • 兼容 PHP 5+
  • 应该没有文件大小限制
  • 应该尽可能快

这就是我现在掌握的所有信息。 非常感谢。


更新

我有一个比数据 > 2GB 的任何哈希计算更实用、更有效的解决方案。

我已经意识到,我不必从超过 2GB 的完整文件中生成哈希。 要唯一标识任何文件,从任何文件的前 10KB 数据计算哈希应该就足够了。 此外,它会比> 2GB 的计算速度更快。 换句话说,从超过 2GB 的数据字符串计算散列的能力可能根本没有必要。

我会等待你的反应。 几天后,我将关闭这个问题。

我会使用exec()在 shell 中运行本地散列函数并将值返回给 php 脚本。 这是一个使用md5的示例,但可以使用任何可用的算法。

  $results = array();
  $filename = '/full/path/to/file';
  exec("md5sum $filename", $results);

然后解析结果数组(shell 命令的输出)。

一般来说,我喜欢避免直接在 PHP 中做任何需要超过 1G 内存的事情,尤其是在 php-fpm 或作为 apache 模块运行时——时间会强化偏见。 当有一个可以实现目标的本机应用程序并且您并不特别需要可移植的跨平台(例如在 linux 和 windows 机器上运行)时,这绝对是我的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM