2010-10-20 2 views
6

OK, самое лучшее решение в php для поиска через кучу содержимого файлов для определенной строки и замены его чем-то другим.Найти и заменить в нескольких файлах

Точно так же, как блокнот ++ делает это, но, очевидно, мне не нужен интерфейс для этого.

ответ

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

Так я недавно столкнулся с проблемой, в которой наш веб-узел, преобразованного из PHP 5.2 до 5.3, и в процессе он сломал нашу установку Magento. Я сделал некоторые индивидуальные настройки, которые были предложены, но обнаружил, что все еще есть некоторые сломанные области. Я понял, что большинство проблем связано с проблемой с функцией «toString», присутствующей в Magento, и теперь устаревшей функцией разделения PHP. Увидев это, я решил, что попытаюсь создать код, который найдет и заменит все различные случаи сломанных функций. Мне удалось добиться успеха в создании этой функции, но, к сожалению, подход «выстрел» не сработал. У меня до сих пор были ошибки. Тем не менее, я чувствую, что код имеет большой потенциал, и я хотел опубликовать то, что я придумал.

Пожалуйста, используйте это с осторожностью. Я бы рекомендовал закрепить копию ваших файлов, чтобы вы могли восстановить их из резервной копии, если у вас есть какие-либо проблемы.

Кроме того, вы не обязательно хотите использовать это как есть. Я предоставляю код в качестве примера. Вероятно, вы захотите изменить то, что заменено.

Способ, которым работает код, заключается в том, что он может находить и заменять все, что находится в папке, в которую она помещена, и в подпапках. Я настроил его так, что он будет искать файлы только с расширением PHP, но вы можете изменить его по мере необходимости. По мере поиска он перечислит, какие файлы он изменил. Чтобы использовать этот код, сохраните его как «ChangePHPText.php» и загрузите этот файл туда, где вам нужны изменения. Затем вы можете запустить его, загрузив страницу, связанную с этим именем. Например, 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/>"; 
    ?> 
Смежные вопросы