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
未被截断为零长度(因为 w
或 w+
会在 fopen()
上执行),
它仍然包含字符串(4):test
现在看看当我们使用 c+
将一个字符写入文件时会发生什么
$fp = fopen('test.txt','c+');
fwrite($fp, 'b');
fclose($fp);
文件 test.txt
现在包含:best
,文件指针位于文件的开头,只覆盖原来的第一个字符 - test
已变为 best
据我了解 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
未被截断为零长度(因为 w
或 w+
会在 fopen()
上执行),
它仍然包含字符串(4):test
现在看看当我们使用 c+
$fp = fopen('test.txt','c+');
fwrite($fp, 'b');
fclose($fp);
文件 test.txt
现在包含:best
,文件指针位于文件的开头,只覆盖原来的第一个字符 - test
已变为 best