PHP fwrite会删除尽可能多的字符

时间:2018-03-23 19:35:24

标签: php fwrite

我有一段PHP代码,它应该在txt文件中找到合适的行并用新值替换它。只要字符串的长度没有变化,一切都有效。如果它的一个字符更长,则以下行会删除一个字符,依此类推。我不知道如何解决它。此外,我没有包含搜索正确行的部分,它工作正常,我认为它不相关。
PHP代码:

$f = fopen("score.txt", "r+") or die("error");
$s = $_SESSION["id"].";".$_POST['S']."\n";
(...)
fwrite($f,$s);
fclose($f);

之前的TXT文件:

N01;99
N02;102
N03;11

将N01的值更改为100(一个字符更长)后的TXT文件:

N01;100
02;102
N03;11

1 个答案:

答案 0 :(得分:1)

当您写入文件时,您只是覆盖了字节。无法直接插入和删除文件。

您需要做的是将整个文件读入内存,替换您想要的内容,然后将其全部写回文件。

您可以使用file()函数将文件读入数组,其中每个元素都是文件的一行。

$lines = file("score.txt");
foreach ($lines as &$line) {
    list ($id, $s) = explode(';', $line);
    if ($id == $_SESSION['id']) {
        $line = $_SESSION["id"].";".$_POST['S']."\n";
        break;
    }
}
file_put_contents("score.txt", implode('', $lines));