64bit-Systeme und 32bit-Prüfsummen. PHP scheitert an eindeutiger crc32-Funktion

Beim etwas Programmieren gestern bekam ich auf dem Server andere Werte, als auf meiner Entwicklungsumgebung aus der crc32-Funktion von PHP zurück. Das ist schon reichlich komisch, der Verdacht viel auf vieles. Falsches Encoding der Dateien durch die FTP-Übertragung? Andere PHP-Version?

Es stellte sich heraus, dass es sich um einen Bug handelt, der bereits seit über einem Jahr bekannt ist und sogar schon einmal vor 5 (fünf!) Jahren gemeldet wurde:

Warum kann so ein Fehler nicht gefixt werden. Wenn man die Kommentare dort verfolgt, zeigt sich, dass die Bit-Repräsentation des zurückgegebenen Wertes auf allen Systemen die gleiche ist, jedoch einmal als signed-int und einmal als unsigned-int behandelt wird, weil der Rückgabewert einmal als 32bit-Integer und einmal als 64bit-Integer betrachtet wird.

In der PHP-Dokumentation ist jedoch eindeutig von signed-int die Rede. Wenn man jetzt wenigstens sicher wäre, dass auf allen 64bit-Systemen der eine Wert und auf allen anderen der andere herauskommt. Aber selbst das kann man nicht sicherstellen, denn eine Installation auf Windows 64 bit gibt den gleichen Wert wie auf einer 32bit-Maschine zurück.

Mal wieder ein Problem, das PHP für den professionellen Einsatz fragwürdig erscheinen lässt.

Kommentare

Schreibe einen Kommentar