Hello,
ich habe mit php einen stream aus einer datei ausgelesen und in
$buffer gespeichert. diesen buffer will ich nun nach eine bestimmten
zeichenkette durchsuchen und bei positivem ergebnis genau die zeile
ausegeben, in der die zeichenkette steht. ist das möglich???
Hier sollte man aus Performance-Gründen wirklich GENAU überlegen, was man unter "Stream" und undter "Zeile" versteht.
Datentechnisch betrachtet beinhaltet eine Zeile alle Zeichen nach einem Zeilenanfang bis einschließlich Zeilenendezeichen. Zeilenanfang kann der Dateianfang sein oder das erste Zeichen nach einem Zeilenendezeichen. Die letzte Zeile einer Datei kann auch unvollständig sein, d.h. ohne Zeilenendezeichen. Bei PHP-Dateien, die included werden sollen, MUSS das z.B. so sein.
Es ist wesentlich schneller, einen Sring in einem Streambuffer zu suchen, als in einem Array aus Zeilen, zumal PHP hier immer noch den Interpreter dazwischen hat...
In Dateien kann man üblicherweise nicht rückwärts lesen, sodass man dies dann emulieren muss.
Suche das Vorkommen des Strings im Stream
Schneide mit fseek() und fread() oder sogar fgets() einen Block rund um den Stringanfang aus. Der Stringanfang sollte in diesem Block einen Offset haben. Vielleicht 1000. Dann lass Dir das letzte Vorkommen des Zeilenendezeichens vor dem Stringanfang listen. http://de3.php.net/manual/en/function.strrpos.php
Wenn Du mit fgets() gelesen hast, dann läuft Deine Zeile nun von dieser Position bis zum Ende des Ausschnittbuffers.
Konntst Du mir soweit folgen?
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen