Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/50: Рейтинг темы: голосов - 50, средняя оценка - 4.88
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577

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

03.08.2012, 04:08. Показов 9800. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php 
 
    $filename = "router.php";
    $findstr = '($count == 1)';
    $tostr  = '($count == 1 && !advanced)';
    
    $file = fopen($filename,"r+");
    if(!$file) {
    echo "Error open file";
    exit (0);
    } 
    
    while (!feof($file)) {
    
    $str = fgets( $file, 256 );
    $pos = strpos( $str, $findstr );
    if ( $pos === false ) {
//      echo "$str<br>";
    } else {
        str_replace( $findstr, $tostr, $str );
    fwrite( $file, $str );
    }
    }
    fclose( $file );
    echo "success";
?>
проблема в том, что запись идет на следующую строку. и прежнее значение не меняется. Цель: найти искомый фрагмент текста в файле и заменить его на другую строку, изменения после этого сохранить и файл закрыть.

Добавлено через 1 час 59 минут
разобрал варианты , вышел пока костыль, мне не нравится. Профи в php подскажите как решить задачу красиво?

костыль. примитивный.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php 
 
    $filename = "router.php";
    $filename2 = "router2.php";
    $findstr = '($count == 1)';
    $tostr  = '($count == 1 && !advanced)';
    $count = 0;
    $file = fopen($filename,"r+");
    $outf = fopen($filename2,"w");
    if(!$file) {
    echo "Error open file";
    exit (0);
    } 
    if (!$outf) {
    echo "error open file";
    exit(0);
    };
    
    while (!feof($file)) {
    
    $str = fgets($file,256);
    
    $pos = strpos($str, $findstr);
    if ($pos === false) {
        fwrite ($outf, $str);
    } else {
     fwrite($outf, str_replace($findstr, $tostr,  $str));
    }
    }
    fclose($file);
    unlink($filename);
    if (!rename($filename2, $filename)) { 
    echo "error rename file"; exit(0);
    }
    fclose($outf);
    echo "success";
?>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2012, 04:08
Ответы с готовыми решениями:

Поиск в файле и замена строки из массива
Собственно вопрос. Подскажите пожалуйста! Есть массив, к примеру: $text = 'cyberforum.ru.com' Есть текстовый файл: Version: 1.0 ...

Поиск и замена части строки в файле txt
Добрый день товарищи! Знаю тема неоднократно создавалась,но пошуршав на сайте ничего такого как нужно мне не нашел, а лепить костыль не...

Поиск значений в файле и замена соответствующих в другом файле
Сильно не пинайте, я новичок. Существует 2 файла. В первом (1.txt) текст: 123=qwerty 321=пример 12457=еще пример Во втором...

6
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.08.2012, 07:46
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$filename = "router.php";
    $filename2 = "router2.php";
    $findstr = '($count == 1)';
    $tostr  = '($count == 1 && !advanced)';
$file = file($filename);
$file2 = fopen($filename2,"w");
$new_text = '';
foreach($file as $k=>$v) {
$new_text.=(strpos($v, $findstr)) ? (str_replace($findstr, $tostr,  $v))."\n" : $V."\n";
}
if(!file_put_contents($filename2,$new_text)) die("Не могу записать в файл!");
if (!rename($filename2, $filename)) { 
    die("error rename file");
    }
   else
    echo "success";
0
 Аватар для shafl
258 / 147 / 37
Регистрация: 24.01.2011
Сообщений: 427
03.08.2012, 08:30
не идеал, но покороче
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$filename = "router.php";
$findstr = '/\(\$count == 1\)/';
$tostr  = '($count == 1 && !advanced)';   
$file = file($filename);
if (is_array($file)) 
    { 
    foreach($file as $key=>$value) 
        {
        $file[$key]= preg_replace($findstr, $tostr, $value); 
        } 
    } 
    else 
    {
    "Error open file";
    exit (0); 
    }
$fp = fopen('router.php', "w"); 
fwrite($fp,implode("",$file)); 
fclose($fp);
echo "success";
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.08.2012, 09:27
я там в регистре ошибся случайно, вот эта строчка
Цитата Сообщение от KOPOJI Посмотреть сообщение
PHP
1
$new_text.=(strpos($v, $findstr)) ? (str_replace($findstr, $tostr, $v))."\n" : $V."\n";
вот такой должна быть
PHP
1
$new_text.=(strpos($v, $findstr)) ? (str_replace($findstr, $tostr, $v))."\n" : $v."\n";
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
03.08.2012, 10:42  [ТС]
да, тернарка нормальный вариант, но принципиального варианта решения такой задачи не используя _второго файла_ разве нет?
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
03.08.2012, 10:45  [ТС]
Цитата Сообщение от shafl Посмотреть сообщение
не идеал, но покороче
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$filename = "router.php";
$findstr = '/\(\$count == 1\)/';
$tostr  = '($count == 1 && !advanced)';   
$file = file($filename);
if (is_array($file)) 
    { 
    foreach($file as $key=>$value) 
        {
        $file[$key]= preg_replace($findstr, $tostr, $value); 
        } 
    } 
    else 
    {
    "Error open file";
    exit (0); 
    }
$fp = fopen('router.php', "w"); 
fwrite($fp,implode("",$file)); 
fclose($fp);
echo "success";
с просонья пропустил твой ответ. Спасибо, то что надо. регулярка рулит.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.08.2012, 10:50
так перезаписывай этот же файл и все раз тебе с одним надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2012, 10:50
Помогаю со студенческими работами здесь

Поиск и замена в файле
Добрый день Если можно помогите разобраться. Нужно в текстовом документе найти например „BLA“ и заменить на „BLABLA222“ Вот код: ...

Поиск и замена в файле
Здравствует. Есть текстовый файл, в нем есть записи примерно такие: 1382814660|obggffdccghhh65fddxcfgqxi ...

Поиск и замена значения в файле
Не знаю как сделать поиск и замену значений в файле средствами php, каждое значение нужно заменить, дополнительная проблема что они все в...

Замена строки в PHP файле
Имеется 2 файла PHP: 1.php &lt;?php $data=1000000000000000; $array=file(&quot;2.php&quot;,&quot;w&quot;); //файл в котором надо изменить строку ...

Замена нескольких строк в файле начиная с найденой строки до определённого символа
Добрый день, Есть фаил в котором многа строк, например блабла1 блабла2 блабла3 * есть код для поиска первой строки,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru