2017-10-08 9 views
0

私はlogs.txtと呼ばれるテキストファイルを持っています。私はfoo||で始まる文字列が存在するかどうかをチェックするスクリプトをPHPで作成しようとしています。存在する場合は、特定の文字列に置き換える必要があります。そうでない場合、特定の文字列がファイルの最後に追加されます。PHPで特定の文字列で始まる行を上書きする方法はありますか?

これは私が作ってみましたコードです:

<?php 

function replaceInFile($what, $with, $file){ 
    $buffer = ""; 
    $fp = file($file); 
    foreach($fp as $line){ 
     $buffer .= preg_replace("|".$what."[A-Za-z_.]*|", $what.$with, $line); 
    } 
    fclose($fp); 
    echo $buffer; 
    file_put_contents($file, $buffer); 
} 

replaceInFile("foo||", "foo||hello", "logs.txt"); 

?> 

が、それは本当に私がやりたいことはありません。誰かがコードを修正するのに私を助けることができますか?どんな助けもありがとうございます。

+0

fread()fwrite()を調べてください。あなたは現在、ファイル全体を読み書きしていますが、行単位で処理していません。行が見つかると、その行だけに書き込むことができるようにポインタの位置が必要になります。 – Chris

+0

@Chris PHPの初心者にとっても、この例は本当に感謝しています。 :) – WayneXMayersX

+0

https://stackoverflow.com/a/236082/2154871 – Chris

答えて

0

これは動作するはずです:

$newline = preg_replace('/^' . $what . '(.*)$/', $with . '${1}', $line, 1 , $count); 
$buffer .= ($count == 1) ? $newline : $line . $with; 

共通区切り文字を/ noです|検索条件で|を持っている特別な場合。キャプチャグループを作成するよりも、これは()の間です。今度はこのキャプチャグループを使用して、交換中に${ +キャプチャグループの番号+ }とすることができます。あなたのケースでは1つしかありません。

+1

その文字列で始まる行がない場合は、指定した文字列が追加されますか? – WayneXMayersX

+0

あなたのニーズに合わせて変更しました。置き換えを行った場合、使用しない場合は、最後に '$ with'を付けた元のものを使用します。 – Webdesigner

関連する問題