php实现文件传输
PHP实现文件上传
创建HTML表单用于文件上传
在HTML中设置enctype="multipart/form-data"属性,这是文件上传必需的设置。表单方法应为POST。
<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超全局数组包含所有上传文件信息。
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
文件验证检查
检查文件是否已存在,限制文件大小,限制特定文件类型等安全措施。
if (file_exists($targetFile)) {
echo "文件已存在";
$uploadOk = 0;
}
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "文件过大";
$uploadOk = 0;
}
$allowedTypes = ['jpg', 'png', 'jpeg', 'gif'];
if (!in_array($imageFileType, $allowedTypes)) {
echo "只允许JPG, JPEG, PNG和GIF文件";
$uploadOk = 0;
}
执行文件上传
检查所有条件后,使用move_uploaded_file函数将临时文件移动到目标位置。
if ($uploadOk == 1) {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
echo "文件". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). "上传成功";
} else {
echo "上传过程中出现错误";
}
}
安全注意事项
永远不要信任用户上传的文件。除上述检查外,还应考虑以下安全措施:

- 设置upload_max_filesize和post_max_size在php.ini中
- 将上传目录设置为不可执行
- 随机重命名上传的文件
- 存储文件在web根目录外
- 使用病毒扫描程序检查上传文件
大文件分块上传
对于大文件,可以考虑使用分块上传技术。HTML5的File API可以配合PHP实现。
前端JavaScript代码示例:
// 将文件分割为多个块
// 使用XMLHttpRequest或Fetch API发送每个块
PHP接收端处理分块:

// 接收文件块并临时存储
// 所有块上传完成后合并文件
进度显示实现
使用PHP的session上传进度功能或AJAX技术显示上传进度。
在php.ini中启用:
session.upload_progress.enabled = On
session.upload_progress.cleanup = On
前端通过AJAX轮询进度:
// 定期向服务器请求上传进度
PHP返回进度信息:
// 读取$_SESSION["upload_progress_*"]信息
// 返回已上传字节数和总大小






