Datei ueberschreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datei ueberschreiben

    Tag,

    mein Problem: Ich habe mehrere Skriptdateien die sich untereinander mittels include_once() inkludieren. Da diese Dateien verzeichnismaeßig auf unterschiedlichen Ebenen befinden muss ich absolute Pfade beim Inkludieren benutzen um dem Problem aus dem Weg zu gehen, dass ich immer spezielle Pfade setzen muss, damit das mehrfache Inkludieren ueber 2 Ebenen hinweg klappt - sprich, wenn eine Datei A, die Datei B inkludiert und A und B im selben Verzeichnis liegen, aber eine Datei C die A inkludiert, klappt es mit dem Inkludieren von B nicht mehr, weil der Pfad aus der sicht von C nicht stimmt.
    Ist auch egal

    Ich habe jedenfalls ein Skript geschrieben, dass die define-Anweisung in jedem Skript sucht, die den absoluten Pfad erzeugt und diesen durch den neuen ersetzt.
    Sieht so aus:

    PHP-Code:
    <?php

    $new_lib_path 
    "/www/htdocs/v077807/dev/lib/";

    include(
    "ls_dir_rec.fnc");

    $array ls_dir_rec("./files/");

    foreach(
    $array[1] as $file)
        {
        if(
    preg_match("/(.*)(define\(\"LIB_PATH\"\, \".*\"\);)(.*)/"implode(""file($file)), $strarray) != false)
            {
            
    //echo str_replace($strarray[2], "define(\"LIB_PATH\", \"".$new_lib_path."\");)", implode("", file($file)))."<hr>";
            //echo $file." -- ".$strarray[2]."<br>";
            
    $fh fopen($file"w+");
            
    fputs($fhstr_replace($strarray[2], "define(\"LIB_PATH\", \"".$new_lib_path."\");)"implode(""file($file))));
            }
        }
    In $strarray[2] steht immer die define-Anweisung und ls_dir_rec() liest rekursiv Verzeichnisse nach Dateien.
    Funktioniert auch alles.
    Das Problem ist, dass fputs() die Datei so ueberschreibt, dass sie am Ende leer ist. Das mit str_replace() klappt auf jeden Fall, gibt den richtigen Datei-String zurueck, nur hauts eben beim Ueberschreiben nicht hin.

  • #2
    entweder, oder

    entweder: w+ ist der falsche parameter
    oder: das ergebnis von file() (in deinem preg_match) speichern

    PHP-Code:
    foreach($array[1] as $file)
        {
        if(
    preg_match("pattern"implode(""$inhalt=file($file)), $strarray))
            {
            
    $fh fopen($file"w+");
            
    fputs($fhstr_replace($strarray[2], "define(\"LIB_PATH\", \"".$new_lib_path."\");)"$inhalt));
            }
        } 
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Anscheinend kriegt das PHP nicht so richtig mit dem "Ueberschreiben" auf die Reihe. Musste erst ftruncate() und rewind() anwenden....

      Kommentar

      Lädt...
      X