首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP md5() 與 md5_file() 函數的區別與應用場景

     編輯:PHP 相關知識

函數簽名對比

函數參數返回值核心用途
md5(string $str, bool $raw = false)字符串32 字符十六進制數 / 16 字節二進制字符串完整性校驗、密碼哈希(不推薦)、生成唯一標識
md5_file(string $file, bool $raw = false)文件路徑同上文件完整性校驗、斷點續傳驗證、去重、緩存鍵生成

代碼示例

<?php
// 字符串哈希
$str = 'hello world';
echo md5($str); // 5eb63bbbe01eeed093cb22bb8f5acdc3

// 文件哈希
$file = 'example.zip';
echo md5_file($file); // d41d8cd98f00b204e9800998ecf8427e

// 進階:流式計算大文件(避免內存溢出)
function md5_file_stream($file) {
    $ctx = hash_init('md5');
    $fp = fopen($file, 'rb');
    while (!feof($fp)) {
        hash_update($ctx, fread($fp, 8192));
    }
    fclose($fp);
    return hash_final($ctx);
}
?>

應用場景深度解析

1. 文件上傳秒傳/斷點續傳

<?php
// 客戶端計算文件 MD5,發送給服務端
// 服務端查數據庫是否存在相同 MD5 且大小一致的文件
// 存在 → 直接關聯記錄,秒傳完成
// 不存在 → 分配上傳臨時目錄,支持分片上傳
?>

2. 靜態資源緩存版本控制

<?php
// 模板中
<link href="/css/app.css?v=" rel="stylesheet">
// 文件修改後 MD5 變化,瀏覽器自動加載新版本
?>

3. 數據同步校驗

<?php
// 主從數據庫同步後,抽樣比對關鍵表導出文件的 MD5
// 一致 → 同步成功;不一致 → 報警人工介入
?>

安全警示

  • MD5 已被攻破(碰撞攻擊)**,**嚴禁用於密碼存儲、數字簽名、安全關鍵場景**。
  • 密碼請使用 password_hash() (BCrypt/Argon2)。
  • 完整性校驗推薦 SHA-256:hash('sha256', $data)、hash_file('sha256', $file)。

性能提示

  • md5_file() 內部使用流式讀取,**不會將整個文件載入內存**,大文件安全使用。
  • 頻繁計算同一文件 MD5 時,建議緩存結果(如 Redis 存儲 md5:filepath)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved