PHP文件读写与上传详细步骤

作者:技术拾光时间:2026-06-07 08:13:01浏览:169

PHP文件操作涵盖文件判断、读写、目录操作及上传。使用file_exists等函数检测文件状态,file_get_contents与fopen系列实现读写,支持追加和逐行处理大文件。目录操作创建与遍历,上传需验证错误码、限制类型和大小,生成唯一文件名。

在 PHP 开发中,文件操作属于基础能力,但许多开发者容易忽视细节。本文系统梳理文件判断、读写、目录操作与上传的实现要点,这些内容在日常开发中频繁使用,掌握后能有效避免常见问题。

判断与信息获取

判断文件

PHP 提供了多个判断函数,用法直观:
函数说明返回值
file_exists($path)判断文件或目录是否存在bool
is_file($path)判断是否为文件bool
is_dir($path)判断是否为目录bool
is_readable($path)判断是否可读bool
is_writable($path)判断是否可写bool
示例:判断文件是否存在、是否为文件,以及目录是否存在且可写:

获取文件信息

除判断外,获取文件的元信息同样常用:
函数说明
filesize($path)获取文件大小(字节)
filemtime($path)获取文件最后修改时间(时间戳)
pathinfo($path)获取文件路径信息(目录、文件名、后缀)
实际用法示例:
";// 获取最后修改时间$mtime = filemtime($file);echo "最后修改时间:" . date('Y-m-d H:i:s', $mtime) . "
";// 获取路径信息$info = pathinfo($file);echo "文件名:" . $info['filename'] . "
";echo "后缀名:" . $info['extension'] . "
";echo "目录:" . $info['dirname'] . "
";?>

文件读写

简单方式:file_get_contents() / file_put_contents()

对于小文件,使用这两个函数最为便捷,一行代码即可完成读写:
// 读取文件内容到字符串$content = file_get_contents(string $filename);// 将字符串写入文件(返回写入的字节数)file_put_contents(string $filename, mixed $data, int $flags = 0);

读取 JSON 配置文件

实际场景:读取配置文件并解析为数组:

写入日志文件(追加模式)

写日志时经常需要追加内容,使用 FILE_APPEND 加锁标志可保证写入安全:

底层方式:fopen() / fwrite() / fclose()

当需要逐行读取、处理大文件或更精细的控制时,应使用这组底层函数。

PHP文件读写与上传详细步骤

// 打开文件,返回资源句柄$handle = fopen(string $filename, string $mode);// 写入文件fwrite(resource $handle, string $data);// 读取一行$line = fgets(resource $handle);// 关闭文件fclose(resource $handle);
常用 mode 参数
模式说明
r只读,指针在文件开头
w只写,清空文件内容,指针在开头
a追加,指针在文件末尾
r+读写,指针在开头

逐行读取大文件(节省内存)

处理GB级别的日志文件时,不宜一次性读入内存。采用逐行读取的方式更为稳妥:
";        }    }    fclose($handle);}?>

目录操作:创建、删除与遍历

函数说明
mkdir($path)创建目录
rmdir($path)删除空目录
unlink($path)删除文件

递归创建多级目录

如需一次创建多级目录(例如 ./uploads/2023/10/01),可利用 mkdir 的第三个参数 true 实现递归创建:

遍历目录

scandir()——适用于简单遍历单层目录:
";    }}?>
RecursiveDirectoryIterator——适用于递归遍历多层目录:
getPathname() . " - 大小:" . $file->getSize() . " 字节
";}?>

文件上传:图片上传

文件上传是 Web 开发的常见需求,PHP 通过 $_FILES 超全局变量和 move_uploaded_file() 函数处理。需注意以下几点:验证错误码、限制文件类型、限制文件大小、生成唯一文件名以避免冲突。
选择图片:
 2 * 1024 * 1024) {    exit('文件大小不能超过 2MB');}// 从临时目录移动到目标目录if (move_uploaded_file($_FILES['a vatar']['tmp_name'], $destPath)) {    echo "上传成功!文件路径:" . $destPath;} else {    exit('文件移动失败');}?>