PHP 如何读取文件
在日常网站开发中,我们经常需要处理本地文件的内容,比如读取用户上传的日志文件、导出的CSV数据,或者网站的配置文件。很多刚接触PHP的开发者,第一次尝试读取文件时,容易因为方法不对出现“读不到内容”“文件路径出错”的问题。其实只要掌握两种最常用的基础方法,结合实际场景就能轻松解决大部分需求。
最常用的两种读取方法
PHP读取文件的核心逻辑是“打开文件→读取内容→关闭文件”,其中最常用的是file_get_contents()和fread()两种方法,它们适用的场景略有不同。

file_get_contents()是最简单的“一步式读取”,相当于直接把整个文件的内容“拎出来”,不需要手动开关文件。举个生活化的例子:就像你从书架上直接抽出一本想看的书,整本书的内容都能直接读,不用额外拿书签夹位置。如果要读取网站根目录下的data.txt,代码只需要一行:
`php
$content = file_get_contents('data.txt');
echo $content;
`
这个方法适合读取小文件,比如几KB的配置文件、简单的文本记录,代码短,出错概率低。但如果是几百MB的大文件,用这个方法会一次性把内容加载到内存里,可能导致网站卡顿,这时候就需要用另一种方法。
fread()则是“分步读取”,需要手动打开、读取、关闭文件,更像你翻书时一页一页读,不会一下子占满你的注意力。它的用法需要三步:先创建“文件句柄”(相当于拿书的手),再指定读取的长度,最后用完关掉“手”:
`php
// 打开文件,'r'代表只读模式
$file = fopen('large_data.txt', 'r');
// 每次读取1024字节(约1KB),循环读取直到结束
while (!feof($file)) {
echo fread($file, 1024);
}
// 用完必须关闭,避免资源占用
fclose($file);
`
这个方法的优势是可以控制读取的速度,适合大文件,比如日志文件、用户导出的大容量数据,不会给服务器增加额外负担。
避开最容易踩的坑
很多人第一次用这两个方法都会遇到“读不到内容”,90%的原因是路径写错了。PHP里的文件路径分两种:相对路径和绝对路径。比如代码里写'data.txt',是相对当前运行的PHP文件的位置,如果你把文件放在public文件夹里,就需要写成'public/data.txt';如果路径写错,PHP会找不到文件,返回空内容。
另外要注意文件的权限,就像你不能随便打开别人锁起来的本子,如果文件的权限是只读且服务器没有读取权限,也会读取失败。可以用file_exists()先判断文件是否存在,is_readable()判断是否可读取,避免报错:
`php
$file = 'data.txt';
if (file_exists($file) && is_readable($file)) {
$content = file_get_contents($file);
echo $content;
} else {
echo '文件不存在或无法读取';
}
`
特殊场景的小技巧
如果需要读取CSV格式的文件(比如用户上传的表格数据),可以用fgetcsv()方法,它会自动把每行的内容按逗号拆分,变成数组,不用自己手动处理分割符,就像把一本书按章节拆成单独的段落,方便后续处理:
`php
$file = fopen('user_data.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
print_r($row); // 输出每行的用户数据数组
}
fclose($file);
`
不管是简单读取小文件,还是处理复杂的大文件,只要选对方法、注意路径和权限,就能轻松用PHP处理各种文件读取需求。