2010-10-20 10 views
6

OK, was ist die beste Lösung in PHP, um eine Reihe von Dateien Inhalt für eine bestimmte Zeichenfolge zu durchsuchen und durch etwas anderes ersetzen.Suchen und Ersetzen in mehreren Dateien

Genau wie Notepad ++ tut es aber offensichtlich brauche ich nicht die Schnittstelle dazu.

Antwort

22
foreach (glob("path/to/files/*.txt") as $filename) 
{ 
    $file = file_get_contents($filename); 
    file_put_contents($filename, preg_replace("/regexhere/","replacement",$file)); 
} 
2

So lief ich vor kurzem in ein Thema, in dem unsere Web-Host von PHP 5,2-5,3 und in dem Prozess unsere Installation von Magento es brach umgewandelt. Ich habe ein paar individuelle Verbesserungen vorgenommen, aber ich habe festgestellt, dass es immer noch einige kaputte Bereiche gibt. Ich erkannte, dass die meisten Probleme mit einem Problem mit der "toString" -Funktion in Magento und der inzwischen veralteten PHP-Split-Funktion zusammenhingen. Als ich dies sah, entschied ich, dass ich versuchen würde, einen Code zu erstellen, der alle verschiedenen Instanzen der fehlerhaften Funktionen finden und ersetzen würde. Es gelang mir, die Funktion zu schaffen, aber leider funktionierte die Schrotflinte nicht. Ich hatte danach immer noch Fehler. Das heißt, ich habe das Gefühl, dass der Code viel Potenzial hat und ich wollte posten, was ich herausgefunden habe.

Bitte verwenden Sie dies jedoch mit Vorsicht. Ich habe empfohlen, eine Kopie Ihrer Dateien zu komprimieren, damit Sie bei Problemen ein Backup wiederherstellen können.

Auch Sie möchten nicht unbedingt so verwenden wie es ist. Ich stelle den Code als Beispiel zur Verfügung. Wahrscheinlich möchten Sie ändern, was ersetzt wird.

Die Art und Weise, wie der Code funktioniert, ist, dass er alles finden und ersetzen kann, was sich in dem Ordner befindet, in den es eingefügt wird, und in den Unterordnern. Ich habe es optimiert, so dass es nur nach Dateien mit der Erweiterung PHP suchen wird, aber Sie könnten das je nach Bedarf ändern. Während der Suche wird aufgelistet, welche Dateien geändert werden. Um diesen Code zu verwenden, speichern Sie ihn als "ChangePHPText.php" und laden Sie diese Datei dorthin, wo die Änderungen stattfinden sollen. Sie können es dann ausführen, indem Sie die mit diesem Namen verknüpfte Seite laden. Zum Beispiel mywebsite.com \ ChangePHPText.php.

<?php 
    ## Function toString to invoke and split to explode 

    function FixPHPText($dir = "./"){ 
     $d = new RecursiveDirectoryIterator($dir); 
     foreach(new RecursiveIteratorIterator($d, 1) as $path){ 
      if(is_file($path) && substr($path, -3)=='php' && substr($path, -17) != 'ChangePHPText.php'){ 
       $orig_file = file_get_contents($path); 
       $new_file = str_replace("toString(", "invoke(",$orig_file); 
       $new_file = str_replace(" split(", " preg_split(",$new_file); 
       $new_file = str_replace("(split(", "(preg_split(",$new_file); 
       if($orig_file != $new_file){ 
       file_put_contents($path, $new_file); 
       echo "$path updated<br/>"; 
       } 
      } 
     } 
    } 

    echo "----------------------- PHP Text Fix START -------------------------<br/>"; 
    $start = (float) array_sum(explode(' ',microtime())); 
    echo "<br/>*************** Updating PHP Files ***************<br/>"; 
    echo "Changing all PHP containing toString to invoke and split to explode<br/>"; 
    FixPHPText("."); 

    $end = (float) array_sum(explode(' ',microtime())); 
    echo "<br/>------------------- PHP Text Fix COMPLETED in:". sprintf("%.4f", ($end-$start))." seconds ------------------<br/>"; 
    ?>