In der PHP -Entwicklung wird die Funktion md5_file () häufig verwendet, um den MD5 -Hash -Wert einer Datei zu erhalten, der für die Überprüfung der Dateiintegrität oder die Erkennung von Dateiänderungen geeignet ist. Wenn jedoch MD5_File () mehrmals auf derselben Dateien aufrufen muss, kann häufig die Effizienz der Programmausführung erheblich reduzieren. Zu diesem Zweck können wir die Ausführungseffizienz der Funktion md5_file () verbessern, wenn mehrere Aufrufe durch den Caching -Mechanismus aufgerufen werden.
Jedes Mal, wenn die Funktion md5_file () aufgerufen wird, liest sie den gesamten Dateiinhalt von der Festplatte und berechnet den MD5 -Wert. Wenn dieselbe Datei mehrfach aufgerufen wird, wird der Dateiinhalt wiederholt gelesen, wodurch unnötigen Ressourcenverbrauch verursacht werden, insbesondere wenn die Dateien groß sind oder die Anzahl der Dateien groß ist, ist der Leistungsverlust offensichtlich.
Die Kernidee des Cache -Mechanismus lautet: Berechnen und speichern Sie das Ergebnis, wenn md5_file () zum ersten Mal aufgerufen wird, und erhalten Sie den Hash -Wert direkt aus dem Cache, wenn Sie dieselbe Datei erneut anfordern, um wiederholte Berechnungen zu vermeiden.
Der Cache kann im Speicher (z. B. Arrays, statische Variablen), Dateien oder andere Speichermedien gespeichert werden und wird je nach tatsächlicher Szene ausgewählt.
Hier ist ein einfaches Beispiel, das auf dem Speichercache basiert und den Cache von MD5_FILE () -Enteilen implementiert:
<?php
class Md5FileCache {
private static $cache = [];
/**
* Holen Sie sich die DateiMD5Wert,Unterstützen Sie das Caching
*
* @param string $filePath Dateipfad
* @return string|false zurückkehrenMD5Saite,失败zurückkehrenfalse
*/
public static function getMd5(string $filePath) {
// Überprüfen Sie, ob der Cache zuerst existiert
if (isset(self::$cache[$filePath])) {
return self::$cache[$filePath];
}
// Der Cache existiert nicht,berechnenMD5
if (!file_exists($filePath)) {
return false;
}
$md5 = md5_file($filePath);
if ($md5 !== false) {
self::$cache[$filePath] = $md5;
}
return $md5;
}
}
// Beispiel für die Nutzung
$file = '/path/to/your/file.txt';
$md5_1 = Md5FileCache::getMd5($file);
$md5_2 = Md5FileCache::getMd5($file); // Holen Sie es hier direkt aus dem Cache,避免重复berechnen
echo "MD5: " . $md5_1 . PHP_EOL;
?>
Das Cache -Ergebnis kann aufgrund der Änderung der Datei ungültig werden, sodass die Cache -Überprüfung in Kombination mit der Änderungszeit der Datei ( fileMtime () ) durchgeführt werden sollte.
<?php
class Md5FileCache {
private static $cache = [];
public static function getMd5(string $filePath) {
if (!file_exists($filePath)) {
return false;
}
$mtime = filemtime($filePath);
if (isset(self::$cache[$filePath]) && self::$cache[$filePath]['mtime'] === $mtime) {
return self::$cache[$filePath]['md5'];
}
$md5 = md5_file($filePath);
if ($md5 !== false) {
self::$cache[$filePath] = [
'md5' => $md5,
'mtime' => $mtime,
];
}
return $md5;
}
}
?>
Wenn das Programm lange ausgeführt wird oder über Anfragen zwischengespeichert werden muss, können Sie