php 实现上传视频
上传视频的基本流程
在PHP中实现视频上传功能需要处理文件接收、验证、存储等步骤。核心是通过$_FILES超全局变量获取上传的文件信息,结合move_uploaded_file函数完成存储。
创建HTML表单
构建一个包含文件上传字段的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/";
$targetFile = $targetDir . basename($_FILES["video"]["name"]);
$uploadOk = 1;
$videoFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查是否为真实视频文件
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["video"]["tmp_name"]);
if($check !== false) {
$uploadOk = 1;
} else {
echo "文件不是视频格式";
$uploadOk = 0;
}
}
// 检查文件大小(例如限制为500MB)
if ($_FILES["video"]["size"] > 500000000) {
echo "文件过大";
$uploadOk = 0;
}
// 允许特定格式
$allowedFormats = ["mp4", "avi", "mov", "wmv"];
if(!in_array($videoFileType, $allowedFormats)) {
echo "仅支持MP4, AVI, MOV, WMV格式";
$uploadOk = 0;
}
// 最终处理
if ($uploadOk == 0) {
echo "上传失败";
} else {
if (move_uploaded_file($_FILES["video"]["tmp_name"], $targetFile)) {
echo "文件已上传: " . htmlspecialchars(basename($_FILES["video"]["name"]));
} else {
echo "上传过程中发生错误";
}
}
?>
安全增强措施
设置上传目录权限为不可执行,防止脚本文件被运行:
chmod($targetDir, 0755);
生成随机文件名避免覆盖和注入攻击:

$newFileName = uniqid() . '.' . $videoFileType;
$targetFile = $targetDir . $newFileName;
大文件上传配置
若需上传超大视频,需调整PHP配置(php.ini):
upload_max_filesize = 1000M
post_max_size = 1000M
max_execution_time = 300
分片上传实现
对于超大型视频,可采用分片上传技术:
前端使用JavaScript将文件分块,后端通过以下方式合并:
$chunkNumber = $_POST['chunkNumber'];
$totalChunks = $_POST['totalChunks'];
$fileName = $_POST['fileName'];
file_put_contents(
"uploads/{$fileName}.part{$chunkNumber}",
file_get_contents($_FILES["file"]["tmp_name"])
);
if ($chunkNumber == $totalChunks) {
// 合并所有分片
$finalFile = fopen("uploads/{$fileName}", 'wb');
for ($i = 1; $i <= $totalChunks; $i++) {
fwrite(
$finalFile,
file_get_contents("uploads/{$fileName}.part{$i}")
);
unlink("uploads/{$fileName}.part{$i}");
}
fclose($finalFile);
}






