You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何file_get_contents可读取文件内容而fread不行?fputcsv后如何读文件?

问题解答

为什么fread无法返回内容,而file_get_contents可以?

核心原因是文件指针的位置差异:

  • 用fopen('test.txt', 'r+')打开文件后,初始文件指针在文件开头。执行fputcsv($file, [1, 2, 4])写入内容时,指针会自动移动到写入内容的末尾。此时调用fread($file, 1024)是从当前指针位置(文件末尾)开始读取,自然读不到任何内容。
  • file_get_contents是独立打开文件并读取,它会默认从文件起始位置开始读取全部内容,不受之前的文件指针位置影响,所以能返回写入的内容。

执行fputcsv后如何读取文件内容?

可以通过以下几种方式处理:

方法1:重置文件指针到开头

使用rewind()函数将文件指针移回文件起始位置,再调用fread读取:

$file = fopen('test.txt', 'r+');
fputcsv($file, [1, 2, 4]);
rewind($file); // 重置指针到开头
var_dump(fread($file, 1024));
fclose($file);

方法2:关闭文件后重新打开读取

先关闭当前文件句柄,再以只读模式重新打开并读取:

$file = fopen('test.txt', 'r+');
fputcsv($file, [1, 2, 4]);
fclose($file);

$file = fopen('test.txt', 'r');
var_dump(fread($file, 1024));
fclose($file);

方法3:使用fseek定位指针到开头

通过fseek()手动将指针定位到文件起始位置(偏移量0):

$file = fopen('test.txt', 'r+');
fputcsv($file, [1, 2, 4]);
fseek($file, 0); // 定位到文件开头
var_dump(fread($file, 1024));
fclose($file);

内容的提问来源于stack exchange,提问作者Petro Chaikivskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:51:00