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

Автор: content Воскресенье, Апрель 8th, 2012 Нет комментариев

Рубрика: Язык PHP

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

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

Автор: IT-студия SoftTime (softtime.ru)

Источник: http://www.php.su/articles/?cat=examples&page=055

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты