md5_file是否有远程文件的内存限制/超时?

时间:2010-07-01 20:47:21

标签: php hash checksum md5-file

我一直在尝试使用PHP的md5_file函数从远程源中散列某些zip文件的内容:

md5_file($url);

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

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

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

但到目前为止,我还没有找到md5_file哈希远程文件的大量信息或案例研究来证实或反驳我的理论。似乎大多数人都会抓取文件并在本地哈希(我必要时可以这样做)。

所以我认为这真的是出于好奇:md5_file对远程文件的大小有什么特定的限制吗?它是否有超时阻止它下载更大的文件?

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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