Wenn wir in PHP den MD5 -Wert einer Datei erhalten müssen, sind die beiden häufig verwendeten Funktionen md5_file () und Hash_file ('MD5') . Diese beiden Funktionen sind in der Funktionalität sehr ähnlich und beide geben den MD5 -Hash -Wert der angegebenen Datei zurück. Aber in Bezug auf die Leistung sind sie wirklich genau konsistent? Dieses Problem ist besonders wichtig, wenn Sie ein System entwickeln, das eine große Anzahl von Datei -Hash -Berechnungen umfasst, z.
Dies ist eine integrierte Abkürzungsfunktion in PHP, um den MD5-Wert einer Datei direkt zu berechnen.
$md5 = md5_file('/var/www/m66.net/uploads/sample.jpg');
Es verwendet die integrierte MD5-Implementierung von PHP und ist eine eingekapselte Einzelfunktionsfunktion.
Dies ist eine der Funktionen, die durch die Hash -Erweiterung von PHP bereitgestellt werden, mit der Sie den Hash -Algorithmus flexibel angeben können. Bei der Verwendung von 'MD5' als Parameter ist seine Funktion dieselbe wie MD5_file () .
$md5 = hash_file('md5', '/var/www/m66.net/uploads/sample.jpg');
Im Vergleich zu Md5_File () unterstützt Hash_File () mehr Algorithmen wie SHA1 , SHA256 usw., so dass es allgemeiner ist.
Um die Leistungsunterschiede zwischen den beiden Funktionen genau zu bewerten, haben wir das folgende Testskript erstellt:
$filepath = '/var/www/m66.net/uploads/bigfile.zip';
$start = microtime(true);
for ($i = 0; $i < 100; $i++) {
md5_file($filepath);
}
$end = microtime(true);
echo "md5_file(): " . ($end - $start) . " seconds\n";
$start = microtime(true);
for ($i = 0; $i < 100; $i++) {
hash_file('md5', $filepath);
}
$end = microtime(true);
echo "hash_file('md5'): " . ($end - $start) . " seconds\n";
Wir haben den obigen Code in einer Datei von etwa 100 MB in einem Server mit mittlerer Leistung ausgeführt, und das Ergebnis lautet wie folgt:
md5_file(): 4.32 seconds
hash_file('md5'): 4.38 seconds
Nach den Testergebnissen zu urteilen, ist der Leistungsunterschied zwischen beiden extrem klein. md5_file () ist etwas schneller, aber der Unterschied beträgt weniger als 2%. In Anbetracht der Schwankungen verschiedener Faktoren wie Netzwerk- und Festplatten -Cache kann dieser Unterschied in den meisten Anwendungen ignoriert werden.
Hash_File () bietet jedoch Flexibilität bei der Auswahl der Algorithmus. Wenn Sie in Zukunft die Hash-Algorithmen wechseln können (zum Beispiel stattdessen SHA-256), ist die Verwendung von Hash_File () skalierbarer.
Bevorzugen Sie MD5_File () : Wenn Sie nur MD5 benötigen und die ultimative Codes -Einfachheit verfolgen.
Priorität für Hash_File () : Wenn Ihr Projekt mehrere Hash -Algorithmen unterstützen oder zukünftige Erweiterungen planen.
In einigen extremen Umgebungen können spezifische PHP -Versionen oder Systemkompilierungsparameter einen Einfluss auf die Ausführungseffizienz beider Funktionen haben. Wenn Ihr Anwendungsszenario äußerst empfindlich auf Leistung ist, wird empfohlen, sich in die Zielumgebung zu bewerten.