php实现视频上传
视频上传功能实现
使用PHP实现视频上传功能需要处理文件接收、验证、存储等步骤。以下是具体实现方法:
创建HTML表单
前端表单需要设置enctype="multipart/form-data"以支持文件上传:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="video" accept="video/*">
<input type="submit" value="上传视频">
</form>
服务器端处理脚本
在upload.php中处理上传逻辑:
<?php
$targetDir = "uploads/";
$maxFileSize = 500 * 1024 * 1024; // 500MB
$allowedTypes = ['video/mp4', 'video/quicktime', 'video/x-msvideo'];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$file = $_FILES["video"];
$targetFile = $targetDir . basename($file["name"]);
// 验证文件类型
if (!in_array($file["type"], $allowedTypes)) {
die("错误:仅支持MP4、MOV、AVI格式");
}
// 验证文件大小
if ($file["size"] > $maxFileSize) {
die("错误:文件超过500MB限制");
}
// 移动临时文件到目标目录
if (move_uploaded_file($file["tmp_name"], $targetFile)) {
echo "视频上传成功";
} else {
echo "上传失败,请重试";
}
}
?>
安全增强措施
设置目录权限确保uploads/目录可写:
chmod 755 uploads/
添加文件名消毒防止路径遍历攻击:
$safeFilename = preg_replace("/[^a-zA-Z0-9._-]/", "", $file["name"]);
验证文件扩展名:
$extension = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
$allowedExtensions = ['mp4', 'mov', 'avi'];
if (!in_array($extension, $allowedExtensions)) {
die("错误:不支持的文件扩展名");
}
大文件上传优化
修改php.ini配置:
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 300
对于超大文件考虑分片上传方案:
// 前端使用File API分割文件
// 后端通过$_FILES["chunk"]接收分片并重组
数据库记录(可选)
上传后可将文件信息存入数据库:
$pdo = new PDO("mysql:host=localhost;dbname=yourdb", "user", "pass");
$stmt = $pdo->prepare("INSERT INTO videos (filename, size, upload_date) VALUES (?, ?, NOW())");
$stmt->execute([$safeFilename, $file["size"]]);
注意事项
- 确保服务器有足够存储空间
- 考虑添加病毒扫描功能
- 实现进度显示需要AJAX配合
- 生产环境应使用对象存储服务(如AWS S3)替代本地存储
以上实现可根据具体需求调整文件大小限制、支持格式和安全验证规则。







