25.04.2024

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *