четверг, 14 октября 2010 г.

Поиск и замена подстроки в файлах

Начиная свое портфолио я подумал, что многим будут полезны те или иные мои достижения. Поэтому в разделе «кодинг» я постараюсь выкладывать скрипты, которые могут кому нибудь пригодиться. Естественно, учить основам я никого не собираюсь, однако если Вы владеете основами php, приведенные скрипты могут быть полезны как в плане идей, так и в плане реализаций.
Данный ниже код осуществляет php поиск и замену подстроки в файлах заданного типа.
<?php
//Поиск и замена подстроки в файлах
//Настройки:
$indir="in"; //Входная директория
$outdir="out"; //Куда деть результат
$filetype="html"; //тип файлов
$infragment="charset=UTF8"; //Что заменяем
$outfragment="charset=UTF-8"; //Чем заменяем
$regis=false; //Учет регистра true-учитываем регистр, false-не учитываем регистр
$diropen = opendir("./$indir/"); //открываем директорию
while (gettype($file=readdir($diropen)) != 'boolean')
{
if ($file != "." && $file != ".." && ereg(".".$filetype,$file)) //Какие файлы будем обрабатывать(в данном случае html)
{
//Заносим содержимое найденного файла в переменную $content
$content = file_get_contents("$indir/".$file);
//Если $regis=true применяем str_replace, в противном случае - str_ireplace
if($regis) $content = str_replace($infragment, $outfragment, $content);
else $content = str_ireplace($infragment, $outfragment, $content);
//Открываем(создаем) файл в выходной директории
$fp = fopen("$outdir/".$file, "w");
fputs($fp, $content); //записываем результат
fclose($fp); //закрываем файл
}
}
closedir($diropen); //закрываем директорию
?>
Поиск и замена подстроки осуществляется посредством применения php функций str_replace или str_ireplace.

Php функция str_replace – поиск и замена подстроки.

Php функцияstr_ireplace – поиск и замена подстроки без учета регистра.

При поиске и замене подстроки на кириллице следует уделить внимание кодировке самого скрипта, а так же кодировкам исходных файлов. Для изменения кодировки:
$infragment = iconv('utf-8', 'windows-1251', 'строка поиска');

$outfragment = iconv('utf-8', 'windows-1251', 'строка замены');



Данный скрипт я написал когда неожиданно обнаружил, что вся куча html файлов созданного сайта имеет неверную кодировку. Кстати неверное написание кодировки имеет распространенный характер. К примеру вместо utf-8 часто пишут utf8.