当前位置:首页 > 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 实现上传视频

<?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);

生成随机文件名避免覆盖和注入攻击:

php 实现上传视频

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

大文件上传配置

若需上传超大视频,需调整PHP配置(php.ini):

upload_max_filesize = 1000M
post_max_size = 1000M
max_execution_time = 300

分片上传实现

对于超大型视频,可采用分片上传技术:

前端使用JavaScript将文件分块,后端通过以下方式合并:

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

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

相关文章

h5怎么实现视频直播

h5怎么实现视频直播

实现H5视频直播的方法 H5视频直播可以通过多种技术实现,主要包括使用HTML5的<video>标签结合流媒体协议,或借助第三方库和平台。以下是几种常见方法: 使用HLS(HTTP Li…

vue实现视频下滑

vue实现视频下滑

Vue 实现视频下滑功能 实现视频下滑功能通常涉及监听滚动事件、动态加载视频内容以及优化性能。以下是具体实现方法: 监听滚动事件 在 Vue 中可以通过 @scroll 事件监听滚动行为,结合 sc…

php实现视频直播

php实现视频直播

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

vue实现上传视频

vue实现上传视频

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

vue项目实现视频

vue项目实现视频

视频播放基础实现 在Vue项目中实现视频播放,可以使用HTML5的<video>标签。以下是一个基础示例: <template> <div> &l…

vue实现短视频

vue实现短视频

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