Вебмастерская > Вебпрограмминг/Скрипты

Поиск и замена во всех файлах и подпапках (php)

(1/1)

admin:

--- Код: ---<?php

$work_dir="./"; 
// рабочая директория - обязательно должна заканчиваться
// символом "/"

$excl_dir=array();
$excl_dir[0]="./no_work_here/"; 
$excl_dir[1]="./and_here/and_here/";

// директории, где поиск/замена не производятся - обязательно должны заканчиваться
// символом "/"


$file_mask_1=".html"; 
$file_mask_2=".js";
// маски обрабатываемых файлов (будут обработаны все файлы,
// содержащие данную строку в имени)

$search_str="test"; #что ищем
$replace_str="TEST"; #чем заменяем

//******************************************************

$level=0;

function sr($dir)
{
global $level,$file_mask_1,$file_mask_2,$search_str,$replace_str,$excl_dir;
echo "";
for ($i=0;$i<$level;$i++) echo "* * ";
echo $dir."";

if (@in_array($dir,$excl_dir))
{
echo " - needn&#39;t search & replace
";
return;
}

echo "
";

$p = dir($dir);
while($ent=$p->read()) 
{
if ($ent!="." && $ent!=".." && !is_dir($dir . $ent) && (eregi(sql_regcase($file_mask_1),$ent) || eregi(sql_regcase($file_mask_2),$ent)))
{
$tmp=@file($dir.$ent);
$str=@implode("",$tmp);

if (strpos($str,$search_str))
{
for ($i=0;$i<($level)+1;$i++) echo "* * ";
echo $dir.$ent." found...";

$str=str_replace($search_str,$replace_str,$str);

if ($fp=@fopen($dir.$ent, "w"))
{
flock($fp,LOCK_EX); 
fwrite($fp,$str);
fclose($fp);
echo " and replace
";
}
else echo " and can&#39;t replace
";
}

}
elseif($ent!="." and $ent!=".." and is_dir($dir . $ent))
{
$level++;
sr($dir.$ent."/");
$level--;
}
}
$p->close();

return;
}

sr($work_dir);

echo "SEARCH & REPLACE Complete";

?>
--- Конец кода ---

спасено отсюда: http://scripts.xrenoder.com/sr.txt

dobrmir:
Здравствуйте. Попробывал вот такой код в скрипт вставить

--- Код: ---$patterns = array('\A.+\(54\)');  // то чего менять
$replace = array('');     //  то на что менять
$file = preg_replace($patterns,$replace,$file);
--- Конец кода ---

Это удалил:

--- Код: ---$search_str="test"; #что ищем
$replace_str="TEST"; #чем заменяем
--- Конец кода ---

Выдает в браузер такие сообщения и не работает:

--- Код: ---Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in Z:\home\1netbeans\www\PhpProject1\index.php on line 25
./
Deprecated: Function sql_regcase() is deprecated in Z:\home\1netbeans\www\PhpProject1\index.php on line 51
--- Конец кода ---

admin:
Вообще, код старый и не мой. Был добавлен для тех, кто ищёт именно его, т.к. был в своё время популярен.


--- Код: ---$patterns = array('/\A.+\(54\)/');  // то чего менять
$replace = array('');     //  то на что менять
$file = preg_replace($patterns,$replace,$file);

--- Конец кода ---
попробуй так. Для pcre нужно выражения ограничивать с двух сторон

admin:
Этот вроде посовременней: http://www.php.su/articles/?cat=examples&page=055

Если есть доступ к шеллу, то ещё лучше


--- Код: ---find -type f -name \*.py -exec sed -i -r 's/regexp1/regexp2/g' {} \;
--- Конец кода ---

Заменит во всех файлах *.py начиная от текущей директории строку regexp1 на regexp2. (можно использовать regexp выражения)
http://habrahabr.ru/qa/5396/

dobrmir:
Большое спасибо

Навигация

[0] Главная страница сообщений

Перейти к полной версии