PHP在文本文件中添加或编辑行

时间:2017-04-24 14:14:52

标签: php file replace find add

我试图搜索文本文件,如果一行包含我要更新整行的特定键ID,如果没有添加新行。

所以基于这个文本文件:

admin,1234,ID1345,NW
staff,1325,ID1001,NE
staff,2157,ID2003,SW
staff,8519,ID3001,NS

我想搜索ID1345,然后只更新该行,其他行完全保持不变。如果没有行包含ID1345,则在文本文件中添加一个新行。

到目前为止,我已经:

$search = 'ID1345';
$result = 'admin,6698,ID1345,OP';

$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');
$replaced = false;

while (!feof($reading)) {
  $line = fgets($reading);
  if (stristr($line, $search)) {
    $line = "$result\n";
    $replaced = true;
  }
  fputs($writing, $line);
}

if (!$replaced) fputs($writing, "$result\n");
fclose($reading); fclose($writing);
rename('myfile.tmp', 'myfile');

这似乎适用于查找和替换,但如果该行不存在,它会不断添加它。

我知道这是由于if (!$replaced)行,但我不知道该怎么做。

上面的示例很小,但文件中可能有几千个条目..

由于

1 个答案:

答案 0 :(得分:0)

function file_properties($fileProperties) {
$result = array();
$lines = split("\n", $fileProperties);
$key = "";
$isWaitingOtherLine = false;

foreach($lines as $i=>$line) {
    if(empty($line) || (!$isWaitingOtherLine && strpos($line,"#") === 0)) continue;

    if(!$isWaitingOtherLine) {
        $key = substr($line,0,strpos($line,'='));
        $value = substr($line,strpos($line,'=') + 1, strlen($line));
    } else {
        $value .= $line;
    }

    /* Check if ends with single '\' */
    if(strrpos($value,"\\") === strlen($value)-strlen("\\")) {
        $value = substr($value, 0, strlen($value)-1)."\n";
        $isWaitingOtherLine = true;
    } else {
        $isWaitingOtherLine = false;
    }

    $result[$key] = $value;
    unset($lines[$i]);
}

return $result;

}

这将读取和写入任何扩展名的文件,例如Laravel中的.env或Java中的任何* .properties