如果我有三個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