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

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

Код рекурсивной фукнции 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);  // Вызов рекурсивной функции

?>
 
Следующая статья »