ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
538
538
EMPFEHLEN
-
Hallo,
ich habe ein Problem mit dem löschen eines bestimmten Bereiches einer Textdatei.
Meine "Textdatei" (.htaccess) beinhaltet z.B. zweimal einen Dateischutz:
(roter Bereich soll entfernt werden, bzw. nicht geschrieben werden )Code :1 2 3 4 5 6 7 8 9
.htaccess-inhalt [color=red]<Files test.php> require valid-user </files>[/color] <Files blabla.txt> require valid.user </files>
Mein Problem besteht nun darin, den kompletten Bereich zwischen den Tags <Files> und </files> zu löschen. Ich habe lediglich hinbekommen, die erste Zeile (<files test.php>) zu löschen. Jedoch weiß ich absolut nicht wie ich nun auch die anderen 2 löschen soll.
Das Problem ist, dass es ja nicht immer 2 Zeilen sind, es können ja genauso gut auch 3 oder 4 Zeilen sein, wenn zum Beispiel noch Gruppen usw. angegeben sind.
Hat vielleicht jemand einen Tip oder Denkanstoss für mich?
Vielen Dank schonmal!!
Grüße
schoko
**Edit**
Der zu löschende Block ist nicht immer der erste Block, es können beliebig viele davor oder dahinter stehen
**/Edit**Geändert von schoko (26.07.06 um 09:32 Uhr)
-
Wenn es immer der erste Files-Block sein soll, ließ die Datei über "file()" ein, nimm dir n boolean mit den du auf false setzt (z.b. $skip) und wenn du auf eine Zeile stößt, die mit "<files" anfängt, dann setzt du den auf true und sonst auf false.
Dann brauchst du nur noch das array durchzulaufen und jeweils mit unset alle zeilen löschen, während skip true ist ...
Oder du machst dir kein boolean sondern nen integer und zählst die files blöcke und filterst nicht auf true oder false, sondern auf eine bestimmte Nummer ... das hätte den Vorteil, dass du auch n Blöcke davor und dahinter haben kannst ...................
iKloetzchen wurde released ;-D *freu*
-
Jo so wär es leicht, aber es ist leider nicht immer der erste Block, es kann genauso gut der 2., 3. oder 19. Block sein
-
In diesem Fall könnten reguläre Ausdrücke zum Einsatz kommen:
Vorausgesetzt ist natürlich, dass die direktive genau diesen Wert („test.php“) hat.PHP-Code:$datei = '.htaccess';
file_put_contents($datei, preg_replace('@<Files test\.php>.*?</files>@si', '', file_get_contents($datei)));
Markus Wulftange
-
Hm mein regulärer Ausdruck lautet nun so:
Code :1
preg_match('<files'.$delrule.'>.*?</files>/si', $value)
preg_match ist für meine Zwecke besser als preg_replace...
Nun bekomme ich aber folgende Fehlermeldung:
Code :1
Warning: preg_match(): Unknown modifier '.' in...
in $delrule steht z.b. test.php oder eben die Datei, dessen Block gelöscht werden soll.
-
Du hast meine Nachricht nicht genau gelesen ... ich hab doch gesagt, dass du auch statt nes Bools nen Int verwenden könntest und die Blockzahl eingeben kannst ... dann kannste ja auch auf das Abgleichen jeder Zeile statt "<files " "<files xxx.php>" nehmen...
................
iKloetzchen wurde released ;-D *freu*
-
Wieso möchtest du preg_match() verwenden, wenn doch ein Teil des Dateiinhalts gelöscht werden soll?
Mein Vorschlag:PHP-Code:$filename = 'test.php';
file_put_contents('.htaccess', preg_replace('@<files '.preg_quote($filename).'>.*?</files>@si', '', file_get_contents('.htaccess')));
Markus Wulftange
-
Ich hätte als Lösung die Datei komplett in eine Variable geladen.
Und diese dann per strstr() durchsucht bis sie auf <Files> stößt.
Dann eine 2. Suche bis </Files>.
Dann den Bereich dazwischen in eine neue Variable und dann der Replace im Dateiinhalt.
Hier mal grob der Code dafür:
Sieht recht groß aus, die anderen 2 Zeieln Lösungen sind sicher besser.PHP-Code:$dateiinalt = file()...
$anfang = strstr($dateiinhalt);
$ende = strstr($dateiinhalt);
$ende = substr($ende, 8); // 8 Zeichen weitergehen um an </Files> vorbeizukommen
$temp = str_replace($anfang, "", $dateiinhalt);
$temp = str_replace($ende, "", $temp);
$dateiinhalt = str_replace($temp, "" $dateiinhalt);
Aber egal, habs nun mal gepostet
-
@Gumbo:
Die Version von dir klappt leider nicht.
Den letzten Vorschlag schau ich mir nun mal genauer an.
Danke
-
Also bei mir funktioniert mein Vorschlag ausgezeichnet. Was genau funktioniert denn nicht? Gibt es eine Fehlermeldung?
Markus Wulftange
-
Keine Fehlermeldung...es passiert gar nichts, die Datei ist nach dem ausführen der Funktion genauso wie vorher...unverändert...
-
OK es klappt!! Hab meinen Fehler gefunden, ich hatte bei der Übergabe von $delrule ein Leerzeichen vorgesetzt also: " test.php".
Deswegen klappte der RegEx nicht da ein Leerzeichen zuviel drin war. Habs nun korrigiert und es klappt alles wunderbar!
Danke Gumbo
und danke allen anderen !!
Gruß
schoko
-
26.07.06 12:42 #13
Hallo!
Ich kenne Leute die zum löschen eines Textes diesen markieren und dann einfach die Leertaste drücken.
Zitat von schoko
Anschliessend schreiben sie ganz normal weiter.
Dadurch haben sie auch immer ein Leerzeichen am Anfang.
Mit trim() kannst Du hier Abhilfe schaffen.
Gruss Dr DauSchri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 29.10.2011)
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
Ähnliche Themen
-
Leerzeilen aus Textdatei entfernen
Von BruS im Forum Visual Basic 6.0Antworten: 7Letzter Beitrag: 01.03.10, 20:53 -
vbLf aus einer Textdatei entfernen
Von nero-15 im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 23.02.08, 20:00 -
Textdatei in MySQL - Zeilenumbrücke entfernen
Von basti84 im Forum PHPAntworten: 1Letzter Beitrag: 25.07.06, 09:40 -
Überstehenden Bereich abtrennen/entfernen
Von Suicider9184 im Forum Vektor-ProgrammeAntworten: 4Letzter Beitrag: 21.09.05, 12:46 -
Textteil aus Textdatei Inhalt entfernen
Von JFranz im Forum PHPAntworten: 2Letzter Beitrag: 04.11.04, 22:00





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren