Hallo zusammen,
ich würde gerne per PHP die Checksum einer Datei berechnen; genau genommen gehts um CRC, MD5 und SHA1.
Meine Funktion dazu sieht bisher so aus:
$file = "test.file";
$filecontent = file_get_contents($file);
$crc = strtoupper(dechex(crc32($filecontent)));
$md5 = strtoupper(md5($filecontent));
$sha = strtoupper(sha1($filecontent));
echo "file: $file<br />\r\n crc: $crc<br />\r\n md5: $md5<br />\r\n sha1: $sha";
Das Problem: die Funktion macht das (zumindest wirkt es so) einwandfrei bis zu einer Dateigröße von ca. 1.100.000.000 Bytes, also in Windows ~1.02GB; die Datei die ich prüfen will ist aber 1.185.760.800 Bytes groß, und statt der Checksums bekomme ich nur gemeldet "Fatal error: Out of memory (allocated 786432) (tried to allocate 1185768992 bytes) in C:\index.php on line 439"...
Ich hab mit PHP erst vor kurzem angefangen und zugegebenermaßen noch keine Ahnung davon ^^
Allerdings kann ich mir absolut nicht erklären warum da (scheinbar) der Speicher ausgeht... einige Daten zur Config:
Hardware (mehr denke ich ist für die Funktion/das Problem nicht interessant):
Core 2 Quad @ 3.5GHz
4GB DDR2-800
Software:
Vista x64 SP1
XAMPP für Windows Version 1.6.7 (PHP 5.2.6)
memory_limit = 3072MB (nur um das als Fehlerquelle ausschließen zu können, 1536MB funktionierten auch nicht)
Außerdem bilde ich mir ein bei diesen "Out of memory" Messages normalerweise "(allocated x bytes)" angezeigt bekommen zu haben, hier fehlt allerdings das Wörtchen "bytes" ?
Und irgendwie ist mir die Bytesize die "allocated" wurde nicht ganz geheuer... 786432 Bytes, genau 0.75MiB ? Vielleicht kann jemand daraus ja irgendwas deuten ;)
Die Arbeitsspeichernutzung für apache32.exe (gibt's auch 64?) geht bis zu einem gewissen Punkt (ich nehme mal schwer an bis der $filecontent eingelesen ist) laut Win-Taskmanager auf maximal 1.111.844 KBytes, also 1.138.528.256 Bytes hoch wenn eine 1.100.000.000 Bytes Datei eingelesen wird.
Ansonsten (d.h. wenn die Funktion nicht gerade ausgeführt wird) zeigt der Win-Taskmanager eine Speichernutzung von 2,1GB an (wohlgemerkt am Windows-Desktop... mit Firefox 3 und > 140 Tabs, => ~500MB RAM für den Firefox); daher dachte ich ich probiers mal mit dem IE 7, da ging die Speichernutzung dann (kein FF, IE mit 1 Tab..) auf 1,6GB zurück. Die 1.185.760.800 Bytes große Datei kann ich trotzdem nicht einlesen, genau der gleiche Fehler wie im Firefox vorher.
Bin dankbar für jeden Tip!
MfG Sandor