2014-09-18 3 views
2

В настоящее время я пытаюсь заменить строку в файле конфигурации для обновления версии. Строка выглядит как requiredBuild = 123456;, и мне нужно изменить нумерацию. У меня есть следующее, которое вставляет новую строку после него, но мне нужно вместо этого заменить существующую строку.Замена строки в файле с помощью PHP

Как это осуществить? ftell() дает мне POS после строки, которую я хочу заменить, но удаление исходной строки там, где я запутался. Есть ли способ сделать что-то вроде ftell() - strlen (thisline) и заменить его на ''?

<? 

    $config = 'serverDZ.cfg'; 

    $file=fopen($config,"r+") or exit("Unable to open file!"); 
    $insertPos=0; 

    while (!feof($file)) 
    { 
     $line=fgets($file); 

     if (strpos($line, 'requiredBuild') !== false) 
     { 
      $insertPos = ftell($file); 
      $newline = "requiredBuild = 124971;\n"; 

      break; 
     } 
    } 

    fseek($file, $insertPos); 
    fwrite($file, $newline); 

    fclose($file); 

?> 
+0

вы слышали 'sed'? Это отличная возможность узнать это! –

+0

Я этого не делал, ранее использовал FART, но в этом случае он не работает. SED выглядит идеально, но я стараюсь, чтобы он был очень легким, поскольку я должен развернуть его как обновление для разных серверов, а затем очистить все файлы после его запуска, поэтому я выбрал один файл PHP. Неужели это будет сложно достичь? – 2014-09-18 03:01:25

ответ

1

Попробуйте это решение:

<?php 
$content = file($path); 

foreach ($content as $line_num => $line) { 
    if (false === (strpos($line, 'requiredBuild'))) continue; 

    $content[$line_num] = "requiredBuild = 124971;\n"; 
} 

file_put_contents($path, implode($content)); 
+0

Ничего себе, что сработало отлично! Я должен буду помнить это решение в будущем, поскольку на самом деле это очень просто увидеть его сейчас. благодаря – 2014-09-18 03:50:50

Смежные вопросы