php实现视频上传
视频上传功能实现
PHP实现视频上传需要处理文件接收、格式验证、存储路径设置以及可能的数据库记录。以下是具体实现方法:
创建HTML表单
前端表单需设置enctype="multipart/form-data"以支持文件上传:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="videoFile" accept="video/*">
<input type="submit" value="上传">
</form>
服务器端处理(upload.php)
<?php
// 定义允许的视频格式
$allowedTypes = ['video/mp4', 'video/quicktime', 'video/x-msvideo'];
// 检查文件是否上传成功
if ($_FILES['videoFile']['error'] !== UPLOAD_ERR_OK) {
die("上传失败,错误代码:" . $_FILES['videoFile']['error']);
}
// 验证文件类型
$fileType = $_FILES['videoFile']['type'];
if (!in_array($fileType, $allowedTypes)) {
die("仅支持MP4、MOV、AVI格式视频");
}
// 设置存储路径
$uploadDir = 'uploads/videos/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
// 生成唯一文件名
$extension = pathinfo($_FILES['videoFile']['name'], PATHINFO_EXTENSION);
$filename = uniqid() . '.' . $extension;
$destination = $uploadDir . $filename;
// 移动临时文件到永久目录
if (move_uploaded_file($_FILES['videoFile']['tmp_name'], $destination)) {
echo "视频上传成功";
// 可在此处添加数据库记录代码
} else {
echo "文件保存失败";
}
?>
安全增强措施
增加文件大小限制(在php.ini或脚本中设置):
ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '110M');
验证文件内容而非仅依赖扩展名:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['videoFile']['tmp_name']);
finfo_close($finfo);
if (!in_array($mime, $allowedTypes)) {
die("文件内容与类型不匹配");
}
数据库记录(可选)
如需记录上传信息到MySQL数据库:
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO videos (filename, path, size, upload_date) VALUES (?, ?, ?, NOW())");
$stmt->execute([
$filename,
$destination,
$_FILES['videoFile']['size']
]);
注意事项
- 确保服务器
uploads/videos/目录有写入权限 - 生产环境应添加CSRF防护
- 大文件上传需调整PHP配置和服务器超时设置
- 建议添加病毒扫描功能
以上代码实现了基础视频上传功能,可根据实际需求扩展更多特性如进度显示、分片上传等。






