如果我有三个GET参数:阅读散列/校验文件的大部分
$filename = $_GET['filename'];
$start = $_GET['start'];
$size = $_GET['size'];
我正在读的文件的块,像这样:
$handle = fopen($basepath . $filename, "rb");
fseek($handle, $start);
$contents = fread($handle, $size);
echo md5($contents);
我如何可以读取大一个文件的部分(从1MB到1GB的任何地方),并创建一个哈希或校验和的内容,而无需为整个读取分配足够的内存?
目前,如果我尝试散列太大的文件的一部分,我得到一个内存错误,因为PHP不能分配足够的内存(大约400mb)。
是否有我可以一次同时消化文件的部分,而不是全部内容的散列函数(例如开始$start
读取100KB块和饲料它的功能,直到$size
满足)?我该如何读取文件块,以便我从$start
开始读$size
字节?
如果没有这样同时支持数据块的块料散列或校验功能,将file_get_contents()
修为大读分配内存的问题?我不完全确定该功能是如何工作的。
谢谢。
什么让一个散列只是一个文件的一部分,目的是什么? – 2015-10-20 23:52:52
它是下载程序脚本的一部分,客户端可以下载部分http文件,并要求从服务器端进行比较,以获取该文件部分的散列/校验和。 –
为什么不使用zip或tar拆分服务器端 – 2015-10-20 23:55:17