PHP文件操作有五种方法:一、file_get_contents/file_put_contents简洁读写;二、fopen/fgets/fwrite逐行控制;三、SplFileObject面向对象处理;四、readfile/fpassthru直接输出;五、file读数组+file_put_contents写数组。

如果您需要在PHP中处理文件内容,例如从文本文件中提取数据或将信息保存到磁盘,则必须使用内置的文件系统函数。以下是执行PHP文件读取和写入操作的具体方法:
一、使用file_get_contents和file_put_contents函数
这两个函数是PHP中最简洁的文件读写方式,适用于中小型文件,无需手动打开和关闭文件流,自动处理编码与资源管理。
1、使用file_get_contents读取整个文件内容并赋值给变量:file_get_contents('example.txt')。
2、检查返回值是否为false以判断读取失败:if (false === $content) { /* 处理错误 */ }。
立即学习“PHP免费学习笔记(深入)”;
3、使用file_put_contents将字符串写入文件:file_put_contents('output.txt', 'Hello World');。
4、添加FILE_APPEND标志追加内容而非覆盖:file_put_contents('log.txt', 'New entry', FILE_APPEND);。
二、使用fopen配合fgets/fwrite进行逐行读写
该方法适合处理大文件或需逐行控制逻辑的场景,提供更精细的I/O控制能力,但需显式管理文件指针和资源释放。
1、调用fopen以只读模式打开文件:$handle = fopen('data.txt', 'r');。
2、使用fgets逐行读取内容直至返回false:while (($line = fgets($handle)) !== false) { echo $line; }。
3、使用fwrite向已打开的写入模式文件句柄写入数据:fwrite($handle, "Line content\n");。
4、操作完成后必须调用fclose关闭文件句柄:fclose($handle);。
三、使用SplFileObject面向对象方式操作文件
SplFileObject提供了面向对象接口,支持迭代器遍历、行号定位及CSV解析等高级功能,适合结构化文件处理任务。
1、实例化SplFileObject对象并指定文件路径:$file = new SplFileObject('list.txt');。
2、通过foreach遍历每一行:foreach ($file as $line) { echo trim($line); }。
3、调用seek方法跳转到指定行号(从0开始):$file->seek(5);。
4、使用fwrite方法写入内容(需以可写模式构造):$file = new SplFileObject('write.txt', 'w'); $file->fwrite('Data');。
四、使用readfile和fpassthru直接输出文件内容
当目标是将文件原始字节直接发送至输出缓冲区(如下载或图片响应),应避免加载全部内容进内存,提高效率并降低内存占用。
1、调用readfile直接输出文件并返回字节数:readfile('image.jpg');。
2、设置Content-Type和Content-Length响应头确保客户端正确解析:header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize('image.jpg'));。
3、使用fopen打开文件后调用fpassthru传输剩余内容:$fp = fopen('document.pdf', 'rb'); fpassthru($fp); fclose($fp);。
4、注意readfile和fpassthru均不进行内容修改,仅作透传,不可用于写入操作。
五、使用file函数将文件读入数组并用file_put_contents写入数组内容
file函数将文件按行分割为索引数组,便于对每行做独立处理;file_put_contents支持数组参数,自动以换行符连接后写入。
1、调用file读取文件为行数组,忽略空行和换行符:$lines = file('input.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);。
2、对数组元素进行过滤或修改,例如移除注释行:array_filter($lines, function($l) { return strpos($l, '#') !== 0; });。
3、将处理后的数组写入新文件:file_put_contents('filtered.txt', $lines);。
4、若需自定义分隔符,可先implode再写入:file_put_contents('joined.txt', implode('|', $lines));。











