замена текста в строке по шаблону, как сделать?

Nevsky

Новичок
замена текста в строке по шаблону, как сделать?

Приветствую!

Очень прошу помочь с такой штукой.
Есть тестовый файл, в его недрах имеется строчка (возможна не одна), нужно открыть файл, и заменить строчку, после чего файл сохранить...

есть
ServerAlias domain.com www.domain.com
а нужно
ServerAlias domain.com *.domain.com

Прошу помочь, т.к. сам не силен а php
 

kost

Новичок
PHP:
function do_replace($fname, $strfrom, $strto)
    {
        $f = fopen($fname, "r");
        $fnew = fopen("delme.tmp", "w");

        while (!feof($f)) {
            $buffer = fgets($f);
            $buffer = ereg_replace($strfrom, $strto, $buffer);
            fputs($fnew, $buffer);
        }

        fclose($f);
        fclose($fnew);

        copy("delme.tmp", $fname);
        unlink("delme.tmp");
    }
 

Nevsky

Новичок
ой, извините, а куда здесь строку
ServerAlias domain.com www.domain.com
пихать...
 

kost

Новичок
Прошу прощения. Для данной задачи вам необходимо написать следующий код:

PHP:
do_replace("Путь\к\нужному\файлу", "ServerAlias domain[.]com www[.]domain[.]com", "ServerAlias domain.com *.domain.com");
 

SelenIT

IT-лунатик :)
по-моему, тут лучше использовать не [m]ereg_replace[/m], а обычный [m]str_replace[/m] - и быстрее, и проще (не нужно возиться с квадратными скобками в шаблоне для поиска)...
 

Nevsky

Новичок
Ой, спасиб
только вот в файле:
ServerAlias - будет всегда постоянно
domain.com - меняется в каждой строчке
www и *. - постоянные

и это все в .php файл теперь поместить?

-~{}~ 09.01.06 02:23:

или вместо domain.com писать *, или как?
 

SelenIT

IT-лунатик :)
Тогда, действительно, без регулярных выражений не обойтись.

Только вместо ereg_replace придется использовать [m]preg_replace[/m], а вызывать всю ф-цию, например, так:
PHP:
do_replace("Путь\к\нужному\файлу",
           "/ServerAlias (\S+) www\.\\1/",
           "ServerAlias $1 *.$1");
 

Nevsky

Новичок
т.е. останется так, да?

function do_replace("Путь\к\нужному\файлу", "/ServerAlias (\S+) www\.\\1/", "ServerAlias $1 *.$1");
{
$f = fopen($fname, "r");
$fnew = fopen("delme.tmp", "w");

while (!feof($f)) {
$buffer = fgets($f);
$buffer = ereg_replace($strfrom, $strto, $buffer);
fputs($fnew, $buffer);
}

fclose($f);
fclose($fnew);

copy("delme.tmp", $fname);
unlink("delme.tmp");
}

и все это можно в .php-файл пихнуть, да?
 

SelenIT

IT-лунатик :)
Не совсем. В php-файл нужно пихнуть
Код:
<?php
function do_replace($fname, $strfrom, $strto)
    {
        /*
            сюда полностью копируешь код [b]kost[/b], только вместо
            $buffer = ereg_replace($strfrom, $strto, $buffer);
            ставишь
            $buffer = preg_replace($strfrom, $strto, $buffer);
        */
    }

do_replace("Путь\к\нужному\файлу",
           "/ServerAlias (\S+) www\.\\1/",
           "ServerAlias $1 *.$1");

?>
 

Nevsky

Новичок
а из консоли как отправить файл на выполнение?
/usr/bin/php /dir/file.php
не получается?
 

Nevsky

Новичок
ну появляется
server3# /usr/bin/php /root/seral.php
X-Powered-By: PHP/4.4.1
Content-type: text/html

-~{}~ 09.01.06 03:14:

и больше ничего не происходит

-~{}~ 09.01.06 03:21:

Спасибо, запуск с ключом -f подошел вполне :)
И скрипт работает замечательно :)
Эх... пора самому учиться
 
Сверху