Найти и заменить в нескольких файлах

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

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

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

Поэтому я недавно столкнулся с проблемой, в которой наш веб-хостинг преобразовывался с 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/>"; ?>