phpbar.de logo

Mailinglisten-Archive

[php] EOF explizit angeben - ASCII 0x034 ?

[php] EOF explizit angeben - ASCII 0x034 ?

Martin Rozmus martinrozmus at freenet.de
Fre Feb 20 14:39:16 CET 2004


Hallo liebe Liste,

gibt es eine Möglichkeit, das Ende einer Datei explizit zu setzen? Ich habe in 
meiner ASCII Tabelle den Hex-Wert 0x034 gefunden, was als  'file separator' 
bezeichnet wird.

Ich habe bereits in de.comp.lang.php.misc mein konkretes Problem geschildert, 
deswegen werde ich es mal Zitieren (ich hoffe es verärgert keinen):
<Zitat Xref= de.comp.lang.php.misc:48130 >
[...]
>>> (Oder?) Nun zu meiner Frage. Gibt es in PHP eine Möglichkeit, eine
>>> Datei an ihrem Ende um x Bits zu kürzen?
>>> Oder, wenn ich die Bits am Ende der Datei - oder an beliebeiger
>>> Stelle - mit NULL-Bits überschreibe, wird dann der Plattenplatz
>>> automatisch freigegeben?
>>>
[...]
>> str_replace( 'Bit' , 'Byte' , $quote );
>> //In oberen Nachricht alle 'Bits' durch 'Bytes' ersetzen :-)
[Lösungsvorschlag von Gustav Graf]
> 
> In diesem und für den einfachen Fall (Inhalt wird nach vorne geschoben):
>     file_put_contents ($filename, substr (file_get_contents ($filename),
> $xBytesWeniger));

So einfach ist es nicht :-( . Ich greife gezielt auf bestimmte Positionen in
der Datei zu. D.h.:

1.) ich positioniere den Dateizeiger auf das erste Byte des Dateiblocks
2.) ich lese temporär von da an eine bestimmte Menge an Bytes (x) --nennen
wir sie einen Datensatz-- in den Arbeitsspeicher ein. ( Im Arbeitsspeicher
liegt nun eine Kopie eines Abschnitts - eines Datensatzes - aus der Datei )
3.) ich verschiebe den Dateizeiger auf die neue Position des Datensatzes
4.) ich schreibe von dort an den Datensatz der Länge x in die Datei
0.) und das mit jedem Datensatz

Um das mal 'grafisch' zu verdeutlichen:
Annahmen & Erläuterungen:
| sei ein die Byteabfolge eines Datensatzes
neue Position = alte Pos. - 1
X überflüssiges Byte nach der Transformation

Bytes:               1 2 3 4 5 6 7 8 EOF 
vor Transformation:      | | | | | |
nach Transform.        | | | | | | X

Da ich eine Kopie in die Datei geschrieben habe, hat das letzte Byte X den
Wert des letzten Bytes des Originals.
Ich kann es nun mit einem NULL Byte überschreiben, würde aber gerne das Byte
freigeben. D.h., dass es nicht mehr der Datei gehört
</zitat>
-- 
MfG
Martin Rozmus

martinrozmus at freenet.de

php::bar PHP Wiki   -   Listenarchive