Datei schreiben - Leere Bytes dazwischen.

Kai008

Erfahrenes Mitglied
Ich versuche eine Binärdatei zu schreiben. Die Daten werden einfach per GET in kleinen Blöckchen übergeben. Nur leider rutscht mir in der fertigen Datei immer an verschiedenen Stellen (z. B. 00x01 und zwischen 00x04 und 00x09) leere Bytes dazwischen. Aber bis auf das gleichen sich die Ausgangs- und Eingangsdatei vollständig. Hab schon mehrere Wege, z. B. über file_put_contents versucht, das Ergebniss war immer das selbe.

PHP:
<?php
$fp = fopen("test.png", "a");

$testData = split(",", $_GET['test']);
for($i = 0; $i < count($testData); $i++)
	fwrite($fp, chr(hexdec($testData[$i])));
?>

Ich wüsste echt nicht, wodurch das verursacht werden könnte.
 
Moin,

ich weiss nicht, ob es bei dir der Fall ist, aber hast du diese Anmerkung zu fwrite() gelesen:

PHP-Manual hat gesagt.:
Anmerkung: Auf Systemen, welche zwischen Binär- und Textdateien (z.B. Windows) unterscheiden, muss die Datei mit 'b' im fopen() Mode-Parameter geöffnet werden.
 
Danke, dass hatte ich wirklich überlesen. Aber hatte nichts verändert, hab aber den Bug bereits gefunden. Da ich beim Lesen der Datei automatisch immer nach jeden Byte ein Koma gemacht habe, war am Ende $testData um 1 leeres Feld zu lang, wodurch er ein leeres Byte geschrieben hat. Und an Position 00x01 hat er geschrieben, weil ich in Java den Fehler gemacht habe Schleifenvariable%Blockgröße == 0 zu testen um die Daten abzuschicken, ohne zu prüfen ob die Schleifenvariable größer als 0 ist, wodurch er gleich nach dem ersten Lesevorgang einen Block abgeschickt hat.
 
Zurück