1

我一直在尝试使用 PHP 的 md5_file 函数对来自远程源的一些 zip 文件的内容进行哈希处理:

md5_file($url);

我遇到了几个 URL 的问题;我收到以下错误:

Warning: md5_file($url): failed to open stream: HTTP request failed!

认为这是因为在这些情况下 zip 文件非常大。

但是到目前为止,我还没有找到很多关于 md5_file 散列远程文件的信息或案例研究来证实或反驳我的理论。似乎大多数人都会抓取文件并在本地对它们进行哈希处理(如有必要,我可以这样做)。

所以我想这真的是出于好奇:md5_file 对远程文件的大小是否有任何特定限制?它是否有超时会阻止它下载更大的文件?

4

3 回答 3

0

某些托管环境不允许您以这种方式访问​​远程文件。我认为 MD5 函数的运行方式与该file()函数非常相似。确保您可以先使用该命令访问远程文件的内容。如果没有,您可以通过 CURL 方式访问文件及其内容。

于 2010-07-06T02:06:39.270 回答
0

可能最简单的解决方案是通过以下方式自己设置超时:

ini_set('default_socket_timeout', 60);  // 60 secs

当然,如果这些文件很大,另一种选择是使用 file_get_contents(),因为您可以指定文件大小限制。您不想将其分配给一个值,因为这样包装它更有效:

$limit = 64 * 1024; // 64 being the number of KB to limit your retrieval
md5(file_get_contents($url, false, null, 0, $limit )); 

现在您可以从文件的某些部分创建 MD5,而不必担心有人试图向您发送 2GB 的文件。当然请记住,它只是部分文件的 MD5,如果之后发生任何更改,则会中断。您根本不必设置文件大小限制,只需像这样尝试:

ini_set('default_socket_timeout', 60);  // 60 secs
md5(file_get_contents($url));
于 2010-07-01T21:14:10.083 回答
0

set_time_limit(0);如果文件相对较大并且您不确定它会消耗多少时间,您可以尝试

于 2011-11-11T21:03:41.373 回答