Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP fwrite删除的字符数与其添加的字符数相同_Php_Fwrite - Fatal编程技术网

PHP fwrite删除的字符数与其添加的字符数相同

PHP fwrite删除的字符数与其添加的字符数相同,php,fwrite,Php,Fwrite,我有一段PHP代码,它应该在txt文件中找到一个合适的行,并用一个新值替换它。只要字符串的长度不变,一切都可以工作。如果长了一个字符,则下一行将删除一个字符,依此类推。我不知道如何修理它。另外,我没有包括搜索正确行的部分,它工作正常,我认为它不相关。 PHP代码: $f = fopen("score.txt", "r+") or die("error"); $s = $_SESSION["id"].";".$_POST['S']."\n"; (...) fwrite($f,$s); fclose

我有一段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文件:


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

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

$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));
可以使用
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));

把一个文件想象成一张每平方一个字符的图形纸。你不能在中间的2个现存的数据上写3个新的数据方块,而不是覆盖另一个正方形,在插入之后重写所有的东西,或者重写整个页面。在这种情况下,最简单的方法是删除原始文件,然后编写一个新文件,并在其位置进行更改<代码> fOPEN()/<代码> <代码> W>代码>模式将执行此操作。既然您要逐行查看,请考虑将线条写入单独的临时文件,然后在修改完内容后替换原件。