PHP 使用 c/c+ 模式打开

PHP fopen with c/c+ mode

据我了解 c/c+ 模式,我期待像 'a/a+ 模式这样的行为,所以文件不应该被截断,任何 fwrite() 结果应该是附加到现有文件。

事实上,该文件似乎无论如何都被截断了,因为该文件始终只包含最后一个 fwrite() 内容。

这可能是我的 PHP 版本 (7.0) 中的错误,还是我误解了什么?

<?php
$fp = fopen($fpath,'c+');
fwrite($fp, date("H:i:s")." test\n");
fclose($fp);

是什么让您认为这应该有不同的表现?根据文档,使用 c 指针是 "positioned on the beginning of the file"。从那个特定的位置开始写,你总是会覆盖那个文件中已经存在的任何东西

也许是对已经说过的内容的一个小补充:

<?php 
/* file test.txt contains string(4): 'test' */
$fp = fopen('test.txt','c+');
fclose($fp);

文件 test.txt 未被截断为零长度(因为 ww+ 会在 fopen() 上执行), 它仍然包含字符串(4):test

现在看看当我们使用 c+

将一个字符写入文件时会发生什么
$fp = fopen('test.txt','c+');
fwrite($fp, 'b');
fclose($fp);

文件 test.txt 现在包含:best,文件指针位于文件的开头,只覆盖原来的第一个字符 - test 已变为 best