замена строк

Статус
В этой теме нельзя размещать новые ответы.

despainer

Постоялец
Регистрация
15 Фев 2008
Сообщения
614
Реакции
167
Итак есть такой файл

<site>
index_dir=/usr/www/site.ru/
sitename=www.site.com
</site>

<site1>
index_dir=/usr/www/site1.ru/
sitename=www.site1.ru
</site>

<site2>
index_dir=/usr/www/site1.ru/
sitename=www.site2.ru
</site>

первая задача:
нужно заменить строку index_dir=/usr/www/site.ru/ на index_dir=/usr/www/sitezzz.ru/ и при этом не трогать строку index_dir=/usr/www/site1.ru/ и sitename=www.site2.ru

вторая задача:

удалить из файла:

<site1>
index_dir=/usr/www/site1.ru/
sitename=www.site1.ru
</site>

при этом остальные записи не трогать!!!

как это реализовать на php?
 
по первой задаче
PHP:
str_replace("index_dir=/usr/www/site.ru/","index_dir=/usr/www/sitezzz.ru/",$str)
не пойдет? :)
Вы просто как-то туманно объяснили задачу, честно говоря не понял какие строки надо трогать, а какие нет
 
прошу прощения немного туманно описал вы правы....
вот смотрите:
вот фрагмент из вышестоящего примера:
Код:
<site>
index_dir=/usr/www/site.ru/
sitename=www.site.com
</site>
строку:
index_dir=/usr/www/site.ru/
заменить на index_dir=/usr/www/sitezzz.ru/
если в файле встречается строка index_dir=/usr/www/site.ru/ еще раз то ее не заменять (то есть работать с заменой строки в пределах
ограниченных тегами <site> </site> и дальше по файлу не лазить :)
вторая задача:
удалить из файла фрагмент кода:
Код:
<site1>
index_dir=/usr/www/site1.ru/
sitename=www.site1.ru
</site>
 
Скрипт предназначен для поиска и замены одной подстроки на другую
во всех файлах определенной директории на сервере
(включая файлы во всех вложенных поддиректориях)

Которые понимаюь - легко сделают вариант с регулярными выражениями для себя.

---------- sr.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 "<b>";
for ($i=0;$i<$level;$i++) echo "* * ";
echo $dir."</b>";

if (@in_array($dir,$excl_dir))
{
echo " - needn't search & replace<br>";
return;
}

echo "<br>";

$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("@!#%xrenoder^&*()".$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<br>";
}
else echo " and <b>can't replace</b><br>";
}

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

return;
}

sr($work_dir);

echo "SEARCH & REPLACE Complete";

?>

---------- sr.php - конец цитаты ---------

Скрипт от хренодёра,сайт не пашет источник Для просмотра ссылки Войди или Зарегистрируйся
 
Код:
[quote="puika, post: 1654832"]Скрипт предназначен для поиска и замены одной подстроки на другую 
во всех файлах определенной директории на сервере 
(включая файлы во всех вложенных поддиректориях)
Которые понимаюь - легко сделают вариант с регулярными выражениями для себя.
---------- sr.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 "<b>";
for ($i=0;$i<$level;$i++) echo "* * ";
echo $dir."</b>";
if (@in_array($dir,$excl_dir))
{
echo " - needn't search & replace<br>";
return;
}
echo "<br>";
$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("@!#%xrenoder^&*()".$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<br>";
}
else echo " and <b>can't replace</b><br>";
}
}
elseif($ent!="." and $ent!=".." and is_dir($dir . $ent))
{
$level++;
sr($dir.$ent."/");
$level--;
}
}
$p->close();
return;
}
sr($work_dir);
echo "SEARCH & REPLACE Complete";
?>
---------- sr.php - конец цитаты ---------
Скрипт от хренодёра,сайт не пашет источник [url]http://web.archive.org/web/200611130...der.com/sr.txt[/url][/QUOTE]

не то
вопрос то как ограничить поиск\замену между указанными тегами нужен пример
 
PHP:
$newtext = preg_replace ("/(<site>[^<]+?index_dir=)\/usr\/www\/site\.ru\/
([^<]+?</site>)/i", "$1\/usr\/www\/sitezzz\.ru\/$2", $text);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху