PHP fwrite 删除的字符与添加的字符一样多
PHP fwrite deletes as much characters as it adds
我有一段 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
当您写入文件时,您只是在覆盖字节。无法直接在文件中插入和删除。
您需要做的是将整个文件读入内存,替换您想要的内容,然后将其全部写回到文件中。
您可以使用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));
我有一段 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
当您写入文件时,您只是在覆盖字节。无法直接在文件中插入和删除。
您需要做的是将整个文件读入内存,替换您想要的内容,然后将其全部写回到文件中。
您可以使用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));