当前位置:首页 > PHP

php 实现视频上传

2026-03-13 04:54:30PHP

视频上传功能实现

在PHP中实现视频上传功能需要处理文件接收、验证、存储等步骤。以下是一个完整的实现方案:

创建HTML表单

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="video" accept="video/*">
    <button type="submit">上传视频</button>
</form>

处理上传的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;
    }
}

// 检查文件是否已存在
if (file_exists($targetFile)) {
    echo "抱歉,文件已存在";
    $uploadOk = 0;
}

// 限制文件大小 (50MB)
if ($_FILES["video"]["size"] > 50000000) {
    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);

添加文件重命名功能避免冲突

php 实现视频上传

$newFileName = uniqid().'.'.$videoFileType;
$targetFile = $targetDir . $newFileName;

限制上传文件类型更严格检查

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["video"]["tmp_name"]);
$allowedMimes = ["video/mp4", "video/avi", "video/quicktime", "video/x-ms-wmv"];
if(!in_array($mime, $allowedMimes)) {
    $uploadOk = 0;
}
finfo_close($finfo);

数据库记录存储

如果需要将上传信息存入数据库:

php 实现视频上传

$pdo = new PDO("mysql:host=localhost;dbname=yourdb", "username", "password");
$stmt = $pdo->prepare("INSERT INTO videos (filename, path, size, type) VALUES (?, ?, ?, ?)");
$stmt->execute([
    $_FILES["video"]["name"],
    $targetFile,
    $_FILES["video"]["size"],
    $_FILES["video"]["type"]
]);

进度显示实现

使用AJAX实现上传进度显示

// 前端JavaScript
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", function(e) {
    var percent = Math.round((e.loaded / e.total) * 100);
    document.getElementById("progress").innerHTML = percent + "%";
}, false);
xhr.open("POST", "upload.php", true);
xhr.send(formData);

大文件分块上传

对于超大视频文件,考虑分块上传

// 接收分块文件
$chunk = $_FILES["file"]["tmp_name"];
$chunkNumber = $_POST["chunkNumber"];
$totalChunks = $_POST["totalChunks"];
$fileName = $_POST["fileName"];

$tempDir = "temp_uploads/";
$tempFile = $tempDir . $fileName . ".part" . $chunkNumber;

move_uploaded_file($chunk, $tempFile);

// 所有分块上传完成后合并
if ($chunkNumber == $totalChunks - 1) {
    $finalFile = "uploads/" . $fileName;
    $out = fopen($finalFile, "wb");
    for ($i = 0; $i < $totalChunks; $i++) {
        $partFile = $tempDir . $fileName . ".part" . $i;
        $in = fopen($partFile, "rb");
        while ($buff = fread($in, 4096)) {
            fwrite($out, $buff);
        }
        fclose($in);
        unlink($partFile);
    }
    fclose($out);
}

以上代码提供了从基础到进阶的视频上传实现方案,可根据实际需求进行调整和扩展。

标签: 上传视频
分享给朋友:

相关文章

jquery上传

jquery上传

jQuery 文件上传的实现方法 jQuery 可以通过多种方式实现文件上传功能,以下介绍几种常见的方法: 使用原生表单和 AJAX 通过 HTML 表单结合 jQuery 的 AJAX 功能实现文…

vue上传视频实现

vue上传视频实现

使用 <input type="file"> 上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…

jquery视频

jquery视频

以下是关于 jQuery 视频学习资源的整理,涵盖免费教程、实战项目和进阶内容: 免费在线教程 W3School jQuery 教程 提供基础语法、选择器、事件处理等内容的交互式练习,适合快速入门。…

h5实现抖音刷视频

h5实现抖音刷视频

实现抖音刷视频的H5页面 实现类似抖音的刷视频功能需要结合H5的视频播放、手势交互和无限滚动等技术。以下是关键实现步骤: 视频播放与布局 使用HTML5的<video>标签实现视频播放容…

Vue实现视频截图

Vue实现视频截图

Vue实现视频截图的步骤 在Vue中实现视频截图功能,可以通过HTML5的<video>元素和Canvas API来完成。以下是具体实现方法: 创建视频元素和Canvas 在Vue组件的…

vue实现视频互动

vue实现视频互动

Vue 实现视频互动功能 实现视频互动功能通常需要结合 WebRTC 技术、第三方 SDK 或开源库。以下是几种常见的实现方式: 使用 WebRTC 实现点对点视频通话 安装 WebRTC 相关依…