本文目錄一覽:
- 1、如何用php對文件進行MD5校驗 – PHP進階討論
- 2、超大文件如何計算md5?
- 3、php怎麼獲取apk的md5
- 4、如何使用PHP計算文件的MD5值
- 5、md5_file — 計算指定文件的 MD5 散列值?
如何用php對文件進行MD5校驗 – PHP進階討論
恩,謝謝樓上。用法如下:將「test.txt」文件中的MD5 hash存儲進一個文件中:在下面的案例中,我們將測試「test.txt」文件是否已經改變:??上述代碼將輸出下面的結果:The file is ok.
超大文件如何計算md5?
首先,至少沒必要先把整個文件讀到內存里。比如在 php 里,如果有人 md5(file_get_contents(big_file_name)) 就確實非常不妥當。因為 md5 是每 512 bit 作為一個 chunk 進行計算的。所以可以每次讀取一部分的內容(最少 512 bit,比較合適是 st_blksize),進行那些 chunk 部分的計算,之後再讀取下一部分內容繼續計算。簡單先說下,md5是有規範的,提供了現成的算法(規範的名字就是md5算法。RFC 1321 The MD5 Message-Digest Algorithm),我們只需要翻譯成c、java、python、js等等代碼。前端算超大文件可以取頭跟尾chunk內容及整個文件的name + update 時間一起算md5值就比較快了,只是為了做唯一標識來做斷點續傳,從業務邏輯上應該夠用了。推薦使用 js spark-md5 開源庫,支持直接append各個部分然後算出md5。我做的斷點續傳功能就是用它在前端算的md5. 各大網盤 TB級別 md5算法應該是這樣的,樓上幾位都說了文件md5是文件流分塊算出來的,那麼網盤想獲得TB級別文件的md5就必須讀取整個文件的文件流才能得到,但是這麼做效率十分低下,運算時間是個問題。但是大家忽略了一個問題,文件在上傳的過程也是分塊上傳的,這些上傳的碎片其實也是文件流。那麼可以把計算md5的時間分攤到每一個碎片上。這樣每上傳一個片段就計算一點等上傳完成了,文件的md5也就算出來了。okTB級別MD5不是問題了。上傳完成md5自然就出來了。 不知道我的猜測大家有其他看法沒有。剛才提出都傳完了就還怎麼秒傳。秒傳最基本的是先要前端算出md5然後傳給後端(可能需要更多種哈希值)我研究了很久前端沒有辦法秒內完成超大文件MD5的,現在用html5 的api 可以算出任意大小文件的 md5 但是耗時相當長。我沒有解決辦法。也沒有想到那些網盤怎麼在前端快速獲取md5的。
php怎麼獲取apk的md5
由於需要判斷上傳的文件是否被修改過,需要記錄上傳文件的md5值,這裡記錄一下獲取文件md5值的方法。
if(isset($_FILES[‘multimedia’]) $_FILES[‘multimedia’][‘error’]==0)
{
$file_name = $_FILES[‘multimedia’][‘name’];
$size = getimagesize($_FILES[‘multimedia’][‘tmp_name’]);
$type = $_FILES[‘multimedia’][‘type’];
$original = $_FILES[‘multimedia’][‘tmp_name’];
$md5 = md5_file($original);
echo $md5;
}
md5_file()
md5_file() 函數計算文件的 MD5 散列。md5() 函數使用 RSA 數據安全,包括 MD5 報文摘譯算法。如果成功,則返回所計算的 MD5 散列,如果失敗,則返回 false。
語法:md5(string,raw)
參數string,必需。規定要計算的文件。
參數charlist,可選。規定十六進制或二進制輸出格式:TRUE – 原始 16 字符二進制格式;FALSE – 默認。32 字符十六進制數。
?php
$filename = “test.txt”;
$md5file = md5_file($filename);
echo $md5file;
?
存儲 “test.txt” 文件的 MD5 散列:
?php
$md5file = md5_file(“test.txt”);
file_put_contents(“md5file.txt”,$md5file);
?
在本例中,我們將檢測 “test.txt” 是否已被更改(即是否 MD5 散列已被更改):
?php
$md5file = file_get_contents(“md5file.txt”);
if (md5_file(“test.txt”) == $md5file)
{
echo “The file is ok.”;
}
else
{
echo “The file has been changed.”;
}
?
itjob網上有很多相關例子
輸出:
The file is ok.
如何使用PHP計算文件的MD5值
function getAllFileMd5($dir){
$hash = ”;
$dir = new RecursiveDirectoryIterator($dir);
foreach(new RecursiveIteratorIterator($dir) as $file) {
$hash .= md5_file($file);
}
return md5($hash);
}
?
md5_file — 計算指定文件的 MD5 散列值?
總結後的知識希望能幫到你:
函數名:md5_file
(PHP 4 = 4.2.0, PHP 5, PHP 7, PHP 8)
md5_file — 計算指定文件的 MD5 散列值
說明
md5_file ( string $filename , bool $raw_output = false ) : string
使用 » RSA 數據安全公司的 MD5 報文算法計算 filename 文件的 MD5 散列值並返回。該散列值為 32 字符的十六進制數字。
參數
filename
文件名
raw_output
如果被設置為 true,那麼報文摘要將以原始的 16 位二進制格式返回。
返回值
成功返回字符串,否則返回 false。
更新日誌
版本 說明
5.1.0 函數改用流 API。這意味着能夠配合封裝器使用該函數,比如 md5_file(‘..’)。
範例
示例 #1 md5_file() 使用範例
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/200552.html