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

时间:2014-05-13 19:52:38

标签: php linux file-upload hash

请问您如何计算PHP中大于2GB的文件的文件HASH?

唯一的PHP function known to me is:

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

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

以下是一些约束/请求:

  • 应该可以在Linux Ubuntu 64bit服务器上运行
  • 与PHP 5 +兼容
  • 应该没有文件大小限制
  • 应该尽可能快

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


更新

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

我已经意识到,我不必从超过2GB的完整文件生成哈希。要唯一地标识任何文件,从任何文件的前10KB数据计算哈希应该就足够了。而且,它将比> 2GB计算更快。换句话说,根本不需要从超过2GB的数据字符串计算哈希的能力。

我会等你的反应。几天后,我将结束这个问题。

1 个答案:

答案 0 :(得分:1)

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

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

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

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