我试图搜索文本文件,如果某一行包含特定的密钥ID,我想更新整行,如果不添加新行。PHP在文本中添加或编辑行文件
因此,基于这个文本文件:
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)
行,但我不知道如何做到这一点。
上面的例子虽小,但有可能是文件中的几千项..
感谢
备注:是否有一个特殊/特定的原因,为什么你不使用数据库呢?文本文件非常有用。 –
也许指针不在正确的位置。测试它。移动'fclose()'下的'if($ repl ..)'行并使用if($ repl ..)file_put_contents('myfile.tmp','$ result \ n',FILE_APPEND);' – JustOnUnderMillions
do你的意思是,当你只运行一次这个脚本时,或者只有当你使用同一个文件运行多次时,它才会继续添加它?如果第二种情况,也许它可能是新行字符不被识别?在手册中推荐使用'wb'而不是''w'带'fopen'来实现可移植性和新的字符串。 – Kaddath