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

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

相关文章

vue 实现上传

vue 实现上传

Vue 实现文件上传 使用 Vue 实现文件上传可以通过原生 HTML 的 <input type="file"> 或第三方库(如 axios、vue-upload-component)完…

vue实现头像上传

vue实现头像上传

实现头像上传功能 在Vue中实现头像上传功能通常需要结合文件上传组件和后端接口处理。以下是具体实现步骤: 前端组件实现 创建文件上传组件模板部分: <template> &l…

elementui视频

elementui视频

以下是关于 ElementUI 视频资源的整理,涵盖教程、实战案例和官方资源: ElementUI 官方视频资源 ElementUI 官方文档虽以文字为主,但部分社区或第三方平台可能有官方团队发布…

h5实现视频直播

h5实现视频直播

实现H5视频直播的基本方法 使用HTML5的<video>标签结合直播流协议(如HLS或DASH)是实现视频直播的常见方式。现代浏览器已普遍支持这些技术。 选择直播流协议 HLS(HT…

利用h5实现视频通话

利用h5实现视频通话

实现H5视频通话的关键技术 WebRTC(Web Real-Time Communication)是实现H5视频通话的核心技术。它允许浏览器之间直接进行实时音视频通信,无需插件或第三方软件。 基本…

css帧动画制作视频

css帧动画制作视频

CSS帧动画制作方法 CSS帧动画通过@keyframes规则和animation属性实现,以下是具体步骤: 定义关键帧 使用@keyframes定义动画序列,从0%到100%描述每一帧的状态:…