我一直在尝试使用PHP的md5_file函数从远程源中散列某些zip文件的内容:
md5_file($url);
我遇到了几个网址的问题;我收到以下错误:
Warning: md5_file($url): failed to open stream: HTTP request failed!
我认为这是因为在这些情况下,zip文件非常大。
但到目前为止,我还没有找到md5_file哈希远程文件的大量信息或案例研究来证实或反驳我的理论。似乎大多数人都会抓取文件并在本地哈希(我必要时可以这样做)。
所以我认为这真的是出于好奇:md5_file对远程文件的大小有什么特定的限制吗?它是否有超时阻止它下载更大的文件?
答案 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);