[Gelöst] PHP Datei öffnen Zeile löschen Datei speichern

  • Ich möchte gerne mit PHP eine Datei einlesen, eine Zeile löschen und die Datei wieder speichern. Leider klappt das nicht so, wie ich das will.

    Die gesuchte Zeile bekomme ich noch zusammengezimmert:

    Ausgabe:

    Code
    192.168.0.250
    
    allow from
    
    allow from 192.168.0.250
    
    Array

    Aber wie kann ich jetzt die Zeile allow from 192.168.0.250 aus der Datei löschen und die Datei speichern, ohne das mir die restlichen Einträge verloren gehen ?

    :conf:  :helpnew:

  • Die Stichworte wären:

    Datei Zeilenweise einlese.

    Pro Zeile mit z.B. https://www.php.net/manual/de/function.strpos.php suchen und ggf. ersetzten.

    Dann die Zeile schreiben.


    Ein paar grobe Skriptfetzen:

    PHP
    $lesedatei = file("/pfad/file"); 
    
    $fp = fopen('/pfad/file', 'w'); //Datei schreibend öffnen
    
    foreach ($lesedatei as $zeile) { ... //Zeilenweise einlesen
    
    fwrite($fp, $zeile); //Zeile schreiben
    
    fclose($fp); //Datei schließen.


    Testen kann ich selber gerade leider nicht.


    Btw. "allow from" klingt nach einer .htaccess Datei. Die wirst Du vermutlich aus Rechtegründen nicht ohne weiteres mit PHP ändern können.

  • Hm, eine Fehlermeldung bekomme ich zwar nicht mehr, aber er findet die Zeile 9 (192.168.0.250) auch nicht:

    Ausgabe:

    Code
    Array ( [0] => ErrorDocument 404 /404.html [1] => ErrorDocument 403 /403.php [2] => [3] => order deny,allow [4] => deny from all [5] => allow from 10.8.0 [6] => allow from 127.0.0.1 [7] => allow from 192.168.0 [8] => allow from 192.168.0.250 [9] => [10] =>.......
    72.71.70.69 [238] => allow from 23.22.21.20 )
    allow from
    
    allow from 192.168.0.250
    Nichts gefunden, suche weiterNichts gefunden, suche weiterNichts gefunden, suche weiterNichts gefunden, suche weiterNichts......

    Die .htaccess gehört übrigens www-data, also kein Problem.

    Oder sollte ich damit eher ins PHP-Forum, aber nicht, dass es gleich wieder Doppelpost heisst. :shy:

  • Versuchs mal statt

    Code
    if (in_array($gesuchtezeile ...

    damit

    Code
    if (strpos($zeile, $gesuchtezeile) !== false)

    Oder ggf. erst über eine erzeugte Variable.


    Bin nur am Telefon und kann nicht den ganzen Code überschauen.


    aber nicht, dass es gleich wieder Doppelpost heisst

    Wenn Du uns hier auf dem Laufenden hälst, ist das kein Problem. ^^


    Vergessen:

    in_array() ist a n der Stelle übrigens falsch, weil Du da ja schon in der Zeile, also in einem Item des Arrays bist. Das Array wäre $lesedatei.

  • > Edit: Tell Dein Script findet die Zeile auch nicht.

    Bei mir schon:

  • Also, hier die Komplettlösung:

    :danke_ATDE: Sieht jetzt so aus:

  • fred0815

    Changed the title of the thread from “PHP Datei bearbeiten und speichern” to “[Gelöst] PHP Datei öffnen Zeile löschen Datei speichern”.
  • Ne umgekehrt, die Datei ist voller "allow from IP" , die erhalten bleiben sollen (z.B. Webcrawler) und nur eine Zeile soll gelöscht werden.

    Das eintragen übernimmt ein Perlscript:

    Über ein Formular:

  • Nachtrag, ich erschlage sowas meist mit reg. Expressions, wenn die Datei nicht zu groß ist.