当前位置:首页 > PHP

php 实现上传视频

2026-02-27 16:09:09PHP

上传视频的基本实现

在PHP中实现视频上传功能,主要涉及文件处理、类型验证和存储管理。以下是一个完整的实现方法:

创建HTML表单用于选择视频文件:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="video" accept="video/*">
    <input type="submit" value="Upload">
</form>

处理上传的PHP脚本

在服务器端创建upload.php文件处理上传逻辑:

php 实现上传视频

<?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["video"]["name"]);
$uploadOk = 1;
$videoFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

// 检查文件是否为视频
$validExtensions = ["mp4", "avi", "mov", "wmv"];
if(!in_array($videoFileType, $validExtensions)) {
    echo "仅支持MP4, AVI, MOV或WMV格式";
    $uploadOk = 0;
}

// 检查文件大小(限制为50MB)
if ($_FILES["video"]["size"] > 50000000) {
    echo "文件过大,最大支持50MB";
    $uploadOk = 0;
}

// 检查上传状态并移动文件
if ($uploadOk == 0) {
    echo "上传失败";
} else {
    if (move_uploaded_file($_FILES["video"]["tmp_name"], $targetFile)) {
        echo "文件". htmlspecialchars(basename($_FILES["video"]["name"])). "上传成功";
    } else {
        echo "上传过程中发生错误";
    }
}
?>

安全增强措施

增加文件重命名防止覆盖:

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

添加MIME类型验证:

php 实现上传视频

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["video"]["tmp_name"]);
$validMimes = ["video/mp4", "video/quicktime", "video/x-ms-wmv"];

if(!in_array($mime, $validMimes)) {
    echo "无效的视频文件类型";
    $uploadOk = 0;
}
finfo_close($finfo);

大文件上传配置

修改php.ini配置以支持大文件上传:

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300

进度显示实现

使用JavaScript实现上传进度显示:

document.querySelector('form').addEventListener('submit', function(e) {
    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener('progress', function(evt) {
        if (evt.lengthComputable) {
            var percentComplete = (evt.loaded / evt.total) * 100;
            console.log(percentComplete + '% uploaded');
        }
    }, false);
    xhr.open('POST', 'upload.php', true);
    xhr.send(new FormData(this));
    e.preventDefault();
});

分块上传方案

对于超大视频文件,建议实现分块上传:

// 前端将文件分块后发送
// 后端接收并合并分块
$chunkNumber = $_POST['chunkNumber'];
$totalChunks = $_POST['totalChunks'];
$fileName = $_POST['fileName'];

file_put_contents("uploads/$fileName.part$chunkNumber", file_get_contents($_FILES['chunk']['tmp_name']));

if($chunkNumber == $totalChunks) {
    // 合并所有分块
    $finalFile = fopen("uploads/$fileName", 'w');
    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 实现视频播放功能 Vue 可以通过集成第三方库或直接使用 HTML5 的 <video> 标签来实现视频播放功能。以下是几种常见的方法: 使用 HTML5 <video&g…

vue视频怎么实现

vue视频怎么实现

Vue 视频实现方法 在 Vue 中实现视频功能可以通过多种方式完成,以下是常见的几种方法: 使用 HTML5 <video> 标签 在 Vue 组件模板中直接使用 HTML5 的 &…

vue实现头像上传

vue实现头像上传

Vue 头像上传实现方法 使用 <input type="file"> 基础方法 创建文件输入控件并监听 change 事件: <template> <div&g…

vue实现视频通话

vue实现视频通话

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

php实现视频直播

php实现视频直播

PHP 实现视频直播的基本方法 PHP 本身并不直接处理视频流,但可以作为后端支持视频直播系统的搭建。以下是几种常见的实现方式: 使用第三方流媒体服务 利用现成的流媒体平台(如 Wowza、Red…

vue实现视频直播

vue实现视频直播

Vue 实现视频直播的方法 使用 video.js 和 HLS 协议 安装 video.js 和 videojs-contrib-hls 插件: npm install video.js vide…