我正在创建一个将数据存储在文件中的类,我需要知道是否可以使用一个文件句柄进行多次读/写?
我做了一些实验,使用这个代码:
$file_name = 'test.txt';
$file = fopen($file_name, 'r+');
echo fread($file, filesize($file_name)) . "<hr />";
fwrite($file, "|".rand());
echo fread($file, filesize($file_name));
fclose($file);
文件第一次被读取,写入有效,但第二次fread为空。
使用此代码:
$file_name = 'test.txt';
$file = fopen($file_name, 'r+');
echo fread($file, filesize($file_name)) . "<hr />";
fwrite($file, "|".rand());
fclose($file);
$file = fopen($file_name, 'r+');
echo fread($file, filesize($file_name));
fclose($file);
第二个fread可以工作,但它不包含在它上面的fwrite中附加到它的数据
因此,基本上,我想创建一个单独的文件句柄作为类的属性,并让它的方法在读取和写入时引用它,但包括其他方法可能对数据所做的任何更改。
如果这不可能的话,我有两种选择,一种是在每个方法中打开和关闭文件句柄,但这似乎效率很低,我不确定单个文件打开/关闭在性能方面的"成本"是多少。另一种选择是将数据转换为数组以便于操作,我可以每次更新数组而不是文件,但我什么时候更新文件?
检查fseek
以在文件中移动指针并从中读取,fread和fwrite正在向前移动指针。
您必须使用a+
而不是r+
,请参阅:fopen
的模式