当前位置:首页 > PHP

php 实现上传视频

2026-01-16 11:52:24PHP

上传视频的基本流程

在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将文件分块,后端通过以下方式合并:

php 实现上传视频

$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);
}

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

相关文章

vue实现视频通话

vue实现视频通话

Vue实现视频通话的方法 使用WebRTC技术 WebRTC是一种支持浏览器之间实时通信的技术,无需插件即可实现视频通话。Vue可以结合WebRTC的API实现视频通话功能。 安装必要的依赖库:…

Vue实现视频截图

Vue实现视频截图

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

vue实现上传按钮

vue实现上传按钮

Vue 实现上传按钮的方法 使用原生 HTML input 和 Vue 处理 通过 HTML 的 input 元素结合 Vue 的事件处理实现文件上传功能。 <template> &…

vue实现视频流

vue实现视频流

Vue实现视频流的方法 在Vue中实现视频流通常涉及HTML5的<video>标签、WebRTC或第三方库。以下是几种常见的方法: 使用HTML5 video标签 通过HTML5的<…

vue实现视频预加载

vue实现视频预加载

实现视频预加载的方法 在Vue中实现视频预加载可以通过多种方式完成,关键在于提前加载视频资源,确保播放时流畅无卡顿。 使用<video>标签的preload属性 <templat…

前端vue实现导出视频

前端vue实现导出视频

实现视频导出的基本思路 在Vue中实现视频导出功能通常涉及以下两种场景:导出已有视频文件或录制屏幕/摄像头内容后导出。核心流程包括获取视频数据、处理格式转换及触发下载。 导出已有视频文件 若需直接导…