为什么fopen('file.txt', 'r+')后面跟着write()会截断文件?


Why does fopen('file.txt', 'r+') followed by write() truncate the file?

我在windows上测试了这段PHP代码,它首先删除了file.txt的内容,然后在上面写入新的内容。

$f = fopen('file.txt', 'r+');
fwrite($f, "first-time");
fclose($f);

每次我执行这段代码并看到file.txt时,它都有一个"first-time"。

我希望它在旧文件前加上"first-time"。如:first-timefirst-timefirst-time

为什么r+像w+一样使长度为零?

回答您的问题:您的代码没有截断文件,而只是覆盖先前的内容。

您想要实现的行为的快速和肮脏的解决方案:

<?php
$file_data = "Stuff you want to add'n";
$file_data .= file_get_contents('file.txt');
file_put_contents('file.txt', $file_data);
?>

编辑:答案可以在这里找到:如何将文件添加到开头?

根据PHP fopen手册:

'r+'为读写打开;将文件指针放在文件开头的

'a+'为读写打开;将文件指针放在文件的末尾处。如果文件不存在,尝试创建。

$f = fopen('file.txt', 'a+');
fwrite($f, "fisrt-time");
fclose($f);

如果你想添加内容,使用+模式