当前位置:首页 > PHP

php实现上传视频文件

2026-01-28 23:44:52PHP

上传视频文件的基本实现

在PHP中实现视频文件上传需要处理文件接收、验证、移动和存储等步骤。以下是一个完整的实现示例:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $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 "抱歉,上传文件时出现错误。";
        }
    }
}
?>

前端HTML表单

需要创建一个HTML表单来提交视频文件:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <label for="video">选择视频文件:</label>
    <input type="file" name="video" id="video" accept="video/*">
    <input type="submit" value="上传视频" name="submit">
</form>

安全增强措施

增加文件重命名功能,防止文件名冲突和安全问题:

// 生成唯一文件名
$newFileName = uniqid().'.'.$videoFileType;
$targetFile = $targetDir . $newFileName;

添加MIME类型验证:

$allowedMimeTypes = ["video/mp4", "video/avi", "video/quicktime", "video/x-ms-wmv"];
$fileMimeType = mime_content_type($_FILES["video"]["tmp_name"]);

if(!in_array($fileMimeType, $allowedMimeTypes)) {
    echo "无效的视频文件类型。";
    $uploadOk = 0;
}

大文件上传处理

对于大视频文件,可能需要调整PHP配置:

php实现上传视频文件

// 在脚本开始处设置
ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '100M');
ini_set('max_execution_time', '300');

或在php.ini中修改:

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300

进度显示实现

使用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);

分块上传处理

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

php实现上传视频文件

// 前端分块处理
function uploadChunk(file, chunkSize) {
    var chunks = Math.ceil(file.size / chunkSize);
    for(var i=0; i<chunks; i++) {
        var chunk = file.slice(i*chunkSize, (i+1)*chunkSize);
        // 发送每个分块到服务器
    }
}
// PHP接收分块
file_put_contents($targetFile, file_get_contents($_FILES["chunk"]["tmp_name"]), FILE_APPEND);

视频预览生成

上传后生成缩略图预览:

// 使用FFmpeg生成缩略图
$thumbPath = $targetDir . pathinfo($newFileName, PATHINFO_FILENAME) . '.jpg';
exec("ffmpeg -i ".$targetFile." -ss 00:00:01 -vframes 1 ".$thumbPath);

数据库记录存储

将上传信息存入数据库:

// 连接数据库后执行
$stmt = $pdo->prepare("INSERT INTO videos (filename, path, size, upload_date) VALUES (?, ?, ?, NOW())");
$stmt->execute([$newFileName, $targetFile, $_FILES["video"]["size"]]);

错误处理与日志

添加详细的错误处理和日志记录:

try {
    // 上传处理代码
} catch (Exception $e) {
    error_log("上传错误: " . $e->getMessage());
    header("HTTP/1.1 500 Internal Server Error");
    echo "上传过程中发生错误";
}

以上实现涵盖了视频上传的基本功能和常见需求扩展,可以根据实际项目需求进行调整和扩展。

分享给朋友:

相关文章

vue实现文件的上传

vue实现文件的上传

文件上传的基本实现 在Vue中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

vue实现视频上传管理

vue实现视频上传管理

视频上传管理实现方案 前端部分(Vue.js) 使用<input type="file">元素配合<video>标签实现基础上传和预览功能: <template>…

vue实现头像上传

vue实现头像上传

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

vue 怎么实现上传

vue 怎么实现上传

Vue 实现文件上传的方法 使用原生 HTML5 文件上传 通过 <input type="file"> 元素结合 Vue 的数据绑定实现基础文件上传功能。 <template&…

vue实现上传表格

vue实现上传表格

Vue实现上传表格的方法 使用Element UI上传组件 Element UI提供了el-upload组件,可以方便地实现文件上传功能。需要安装Element UI并引入相关组件。 安装Elem…

php 实现上传视频

php 实现上传视频

上传视频的基本流程 在PHP中实现视频上传功能需要处理文件接收、验证、存储等步骤。核心是通过$_FILES超全局变量获取上传的文件信息,结合move_uploaded_file函数完成存储。 创建H…