php post 文件实现
使用 PHP 接收 POST 文件
在 PHP 中接收通过 POST 方法上传的文件需要使用 $_FILES 超全局变量。文件上传表单必须设置 enctype="multipart/form-data"。
HTML 表单示例:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload">
<input type="submit" value="Upload File">
</form>
处理文件上传的 PHP 代码
在 upload.php 文件中,可以通过 $_FILES 访问上传的文件信息。$_FILES 是一个关联数组,包含以下键:

name:原始文件名type:文件 MIME 类型tmp_name:服务器上的临时文件路径error:错误代码size:文件大小(字节)
基本文件上传处理:
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
// 检查文件是否已上传
if ($_FILES["fileToUpload"]["error"] != UPLOAD_ERR_OK) {
$uploadOk = 0;
}
// 检查文件是否已存在
if (file_exists($targetFile)) {
$uploadOk = 0;
}
// 限制文件大小(例如 5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
$uploadOk = 0;
}
// 允许特定文件类型
$allowedTypes = ["jpg", "png", "jpeg", "gif"];
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if (!in_array($fileType, $allowedTypes)) {
$uploadOk = 0;
}
// 最终上传文件
if ($uploadOk) {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
echo "File uploaded successfully.";
} else {
echo "Error uploading file.";
}
} else {
echo "File not uploaded.";
}
安全注意事项
- 始终验证文件类型,不要仅依赖客户端验证。
- 限制文件大小以防止服务器过载。
- 为上传的文件生成唯一文件名,避免覆盖和潜在的安全问题。
- 将上传目录设置为不可执行,防止恶意文件执行。
处理多个文件上传
如果需要同时上传多个文件,可以在 HTML 表单中使用数组形式的名称:

<input type="file" name="filesToUpload[]" multiple>
在 PHP 中通过循环处理:
foreach ($_FILES["filesToUpload"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmpName = $_FILES["filesToUpload"]["tmp_name"][$key];
$name = basename($_FILES["filesToUpload"]["name"][$key]);
move_uploaded_file($tmpName, "uploads/" . $name);
}
}
错误代码参考
$_FILES["fileToUpload"]["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):找不到临时文件夹UPLOAD_ERR_CANT_WRITE(7):文件写入失败UPLOAD_ERR_EXTENSION(8):PHP 扩展阻止了文件上传






