fopen 模式 w+ 并读取文件?
fopen mode w+ and reading the file?
我正在研究所有模式并试图了解您可以在哪里应用其中的一些模式,我偶然发现了 w
。现在我明白了那个模式是如何工作的,但是 w+
的目的是什么?显然,如果我们在打开文件后立即使用 fopen
,它将不起作用,因为文件将被截断,所以我认为在文件中写入一些内容然后稍后从中读取是很好的,所以我决定像这样测试它:
$handle = fopen('new.txt', 'w+');
fwrite($handle, '123');
$file = fread($handle, filesize('new.txt'));
var_dump($file); // string '' (length=0)
fclose($handle);
出于某种原因,它稍后没有读取文件的内容。
有人可以向我解释它适用的地方,我的代码有什么问题吗? filesize
returns 3,所以它不会删除文件的内容,我假设 $handle
可能从我们打开文件的那一刻起就被使用并且它没有更新?然后我更加困惑为什么我们要使用模式 w+
并同时从文件中读取?
编辑: 我什至可以理解如何使用 r+
在文件中写入内容,然后再次使用 fopen
检查我所写入的内容,如下所示:
$handle = fopen('new.txt', 'r+');
fwrite($handle, '123');
$handle = fopen('new.txt', 'r+');
$file = fread($handle, filesize('new.txt'));
var_dump($file);
fclose($handle);
如果我对w+
做同样的事情,它显然只会删除内容,我将无法阅读任何内容?
fopen()
with w+
option 在开头打开文件 read/write 并将长度截断为 0。这与写入新的空文件基本相同。
在此处查看 fopen() 用法:http://php.net/manual/en/function.fopen.php
w+主要用于"read back"你写的东西。在您的情况下,您使用的是 fread() 函数,该函数在执行 fwrite() 后从当前位于文件末尾的指针读取 "forward",这可以解释为什么您得到空内容。
我希望这能回答你的问题。
@叶。关于指针是正确的。执行 fwrite 后,指针将位于文件末尾。你需要的是fseek()回到文件开头。
$handle = fopen('new.txt', 'w+');
fwrite($handle, '123');
fseek($handle, 0);
$file = fread($handle, filesize('new.txt'));
var_dump($file); // string '123' (length=3)
fclose($handle);
我正在研究所有模式并试图了解您可以在哪里应用其中的一些模式,我偶然发现了 w
。现在我明白了那个模式是如何工作的,但是 w+
的目的是什么?显然,如果我们在打开文件后立即使用 fopen
,它将不起作用,因为文件将被截断,所以我认为在文件中写入一些内容然后稍后从中读取是很好的,所以我决定像这样测试它:
$handle = fopen('new.txt', 'w+');
fwrite($handle, '123');
$file = fread($handle, filesize('new.txt'));
var_dump($file); // string '' (length=0)
fclose($handle);
出于某种原因,它稍后没有读取文件的内容。
有人可以向我解释它适用的地方,我的代码有什么问题吗? filesize
returns 3,所以它不会删除文件的内容,我假设 $handle
可能从我们打开文件的那一刻起就被使用并且它没有更新?然后我更加困惑为什么我们要使用模式 w+
并同时从文件中读取?
编辑: 我什至可以理解如何使用 r+
在文件中写入内容,然后再次使用 fopen
检查我所写入的内容,如下所示:
$handle = fopen('new.txt', 'r+');
fwrite($handle, '123');
$handle = fopen('new.txt', 'r+');
$file = fread($handle, filesize('new.txt'));
var_dump($file);
fclose($handle);
如果我对w+
做同样的事情,它显然只会删除内容,我将无法阅读任何内容?
fopen()
with w+
option 在开头打开文件 read/write 并将长度截断为 0。这与写入新的空文件基本相同。
在此处查看 fopen() 用法:http://php.net/manual/en/function.fopen.php
w+主要用于"read back"你写的东西。在您的情况下,您使用的是 fread() 函数,该函数在执行 fwrite() 后从当前位于文件末尾的指针读取 "forward",这可以解释为什么您得到空内容。
我希望这能回答你的问题。
@叶。关于指针是正确的。执行 fwrite 后,指针将位于文件末尾。你需要的是fseek()回到文件开头。
$handle = fopen('new.txt', 'w+');
fwrite($handle, '123');
fseek($handle, 0);
$file = fread($handle, filesize('new.txt'));
var_dump($file); // string '123' (length=3)
fclose($handle);