phpbar.de logo

Mailinglisten-Archive

[php] [Lösung] EOF explizit angeben - ASCII 0x034 ?

[php] [Lösung] EOF explizit angeben - ASCII 0x034 ?

Martin Rozmus martinrozmus at freenet.de
Sam Feb 21 17:18:46 CET 2004


On Friday 20 February 2004 14:39, Martin Rozmus wrote:
> 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>
Folgende Funktion macht das, was ich eigentlich erreichen wollte:
http://de.php.net/manual/de/function.ftruncate.php

Schönes Wochenende

-- 
MfG
Martin Rozmus

martinrozmus at freenet.de

php::bar PHP Wiki   -   Listenarchive