PHP文件操作涵盖文件判断、读写、目录操作及上传。使用file_exists等函数检测文件状态,file_get_contents与fopen系列实现读写,支持追加和逐行处理大文件。目录操作创建与遍历,上传需验证错误码、限制类型和大小,生成唯一文件名。
PHP文件读写与上传详细步骤
作者:技术拾光
时间:2026-06-07
浏览:168
文章目录
在 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()
当需要逐行读取、处理大文件或更精细的控制时,应使用这组底层函数。
// 打开文件,返回资源句柄$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('文件移动失败');}?>实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。
相关文章