Замена строки во всех файлах директории с неограниченным числом поддиректорий

Функция предназначена для рекурсивного спуска по всем вложенным поддиректориям корневой директории и замене заданной подстроки во всех встреченых файлах.

Код рекурсивной фукнции scan_dir(), которая обходит директории


<?php

  
////////////////////////////////////////////////////////// 

  // Рекурсивная функция - спускаемся вниз по каталогу 

  ////////////////////////////////////////////////////////// 

  
function scan_dir($dirname) 

  { 

    
// Объявляем переменные замены глобальными 

    
GLOBAL $text, $retext; 

    
// Открываем текущую директорию 

    
$dir = opendir($dirname); 

    
// Читаем в цикле директорию 

    
while (($file = readdir($dir)) !== false) 

    { 

      
// Если файл обрабатываем его содержимое 

      
if($file != "." && $file != "..") 

      { 

        
// Если имеем дело с файлом - производим в нём замену 

        
if(is_file($dirname."/".$file)) 

        { 

          
// Читаем содержимое файла 

          
$content = file_get_contents($dirname."/".$file); 

          
// Осуществляем замену 

          
$content = str_replace($text, $retext, $content); 

          
// Перезаписываем файл 

          
file_put_contents($dirname."/".$file,$content); 

        } 

        
// Если перед нами директория, вызываем рекурсивно 

        // функцию scan_dir 

        
if(is_dir($dirname."/".$file)) 

        { 

          echo 
$dirname."/".$file."<br>"; 

          
scan_dir($dirname."/".$file); 

        } 

      } 

    } 

    
// Закрываем директорию 

    
closedir($dir); 

  }

?>

Воспользоваться результатами можно при помощи следующего кода

Код вызова функции scan_dir()


<?php

  $text 
= '$text'; // Искомая строка

  
$retext = '$retext'; // Строка замены

  
$dirname = "Имя корневой директории, например ."; 

  
scan_dir($dirname);  // Вызов рекурсивной функции

?>