为什么PHP在一个文件中混合使用两个fopen句柄?

为什么PHP在一个文件中混合使用两个fopen句柄?,php,file-io,fopen,handle,Php,File Io,Fopen,Handle,在一个文件上测试两个fopen()句柄时,我注意到句柄或通道混合,调用fread()时文件内容为空。一个句柄是读的,一个句柄是写的 示例代码: $rh = fopen('existingfilewithcontent.txt', 'r'); $wh = fopen('existingfilewithcontent.txt', 'w'); echo fread($rh, 1000); fclose($rh); fclose($wh); // file is now blank 这是在Linux和

在一个文件上测试两个
fopen()
句柄时,我注意到句柄或通道混合,调用
fread()
时文件内容为空。一个句柄是读的,一个句柄是写的

示例代码:

$rh = fopen('existingfilewithcontent.txt', 'r');
$wh = fopen('existingfilewithcontent.txt', 'w');
echo fread($rh, 1000);
fclose($rh);
fclose($wh);
// file is now blank
这是在Linux和Windows上测试的

我在PHP文档中找不到关于它的任何内容

请不要问我为什么要在一个文件上有两个句柄,因为这不是问题所在


谢谢

打开一个文件进行写入是破坏性的

手册上说:

'w'-仅开放用于写作;将文件指针放在文件的开头,并将文件截断为零长度。如果文件不存在,请尝试创建它

您可能想要:

'r+'-开放阅读和写作;将文件指针放在文件的开头

“a+”-开放阅读和写作;将文件指针放在文件末尾。如果文件不存在,请尝试创建它。在此模式下,fseek()仅影响读取位置,写入操作始终附加


参见手册:

啊,我真蠢,没听清楚。我假设在调用
fwrite()
之前不会发生截断。。谢谢你!