当前位置:首页 > 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);
}

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

相关文章

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

php实现视频直播

php实现视频直播

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

vue实现上传视频

vue实现上传视频

使用 <input type="file"> 实现基础上传 通过 HTML 原生文件选择控件获取视频文件,结合 Vue 处理上传逻辑。 <template> <…

vue实现短视频

vue实现短视频

Vue 实现短视频功能 在 Vue 中实现短视频功能通常涉及视频播放、列表展示、交互控制等模块。以下是关键实现方法: 视频播放组件 使用 <video> 标签或第三方库(如 vue-vi…

vue实现视频上传

vue实现视频上传

Vue 实现视频上传的方法 使用原生 input 元素和 FormData 在 Vue 中可以通过原生 input 元素结合 FormData 实现视频上传功能。创建一个文件选择输入框,监听文件变化事…

vue实现视频倒放

vue实现视频倒放

实现视频倒放的方法 在Vue中实现视频倒放可以通过多种方式完成,以下是几种常见的方法: 使用HTML5 Video API和Canvas 通过HTML5 Video API和Canvas可以实现视频…