PHP 文件上传
文件上传是 PHP 中最常用的功能之一,它允许用户通过表单将文件从客户端上传到服务器端。
创建 HTML 表单
在下面的代码中,我们创建了一个 HTML 表单,包含一个文件输入字段和一个提交按钮:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
enctype="multipart/form-data"
是必须的,用于文件上传method
必须设置为 "post"
创建 PHP 上传脚本 (upload.php)
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// 检查文件是否已存在
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// 检查文件大小 (这里限制为5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// 允许特定文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// 检查 $uploadOk 是否为0
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// 如果一切正常,尝试上传文件
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
✅ 在上面的代码中,我们执行了以下操作:
- 初始化变量:设置上传文件目录
- 安全检查:检查文件是否已存在,检查文件大小(限制5MB),检查文件类型(只允许图片)
- 执行上传:尝试移动临时文件到目标位置
$_FILES 数组详解
当文件上传后,PHP 会创建一个$_FILES
数组,包含以下信息:
$_FILES["fileToUpload"]["name"]
- 原始文件名$_FILES["fileToUpload"]["type"]
- 文件 MIME 类型$_FILES["fileToUpload"]["size"]
- 文件大小(字节)$_FILES["fileToUpload"]["tmp_name"]
- 服务器上的临时文件名$_FILES["fileToUpload"]["error"]
- 错误代码(0 表示无错误)
PHP 上传错误代码
以下是 PHP 中所有定义的文件上传错误代码($_FILES["file"]["error"]
的可能值):
UPLOAD_ERR_OK (0) - 文件上传成功,没有错误
UPLOAD_ERR_INI_SIZE (1) - 文件大小超过php.ini
中的upload_max_filesize
限制
UPLOAD_ERR_FORM_SIZE (2) - 文件大小超过 HTML 表单中指定的 MAX_FILE_SIZE 限制
UPLOAD_ERR_PARTIAL (3) - 文件只有部分被上传(上传过程中断)
UPLOAD_ERR_NO_FILE (4) - 没有文件被上传(表单中没有选择文件)
UPLOAD_ERR_NO_TMP_DIR (6) - 服务器上缺少临时文件夹(PHP 4.3.10 和 PHP 5.0.3 引入)
UPLOAD_ERR_CANT_WRITE (7) - 无法将文件写入磁盘(权限问题或磁盘已满)
UPLOAD_ERR_EXTENSION (8) - PHP 扩展停止了文件上传
✅ 实际应用中的错误处理实例:
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
switch ($_FILES['file']['error']) {
case UPLOAD_ERR_INI_SIZE:
$message = "文件超过服务器限制大小";
break;
case UPLOAD_ERR_FORM_SIZE:
$message = "文件超过表单限制大小";
break;
case UPLOAD_ERR_PARTIAL:
$message = "文件只有部分被上传";
break;
case UPLOAD_ERR_NO_FILE:
$message = "没有文件被上传";
break;
case UPLOAD_ERR_NO_TMP_DIR:
$message = "服务器缺少临时文件夹";
break;
case UPLOAD_ERR_CANT_WRITE:
$message = "文件写入磁盘失败";
break;
case UPLOAD_ERR_EXTENSION:
$message = "文件上传被PHP扩展阻止";
break;
default:
$message = "未知上传错误";
break;
}
die("上传错误: " . $message);
}
评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
42
章节
30
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈