跳到主要内容

如何用PHP和MySQL上传视频?

参考答案:

使用PHP和MySQL上传视频主要涉及以下步骤:

  1. 创建数据库和表

首先,你需要在MySQL数据库中创建一个表来存储视频的相关信息(如标题、描述、上传者等),但通常不会直接存储视频文件本身在数据库中,而是存储视频文件的路径或URL。

CREATE TABLE videos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    uploader VARCHAR(255),
    video_path VARCHAR(255) NOT NULL,
    uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. 创建上传表单

在HTML中,你可以创建一个简单的表单来允许用户上传视频文件。

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="video_file" required>
    <input type="text" name="title" placeholder="Video Title" required>
    <input type="text" name="description" placeholder="Video Description">
    <input type="submit" value="Upload">
</form>
  1. 处理上传的视频文件

在PHP中(例如upload.php),你可以处理上传的视频文件,并将其保存到服务器的某个目录中。同时,将相关信息插入到MySQL数据库中。

<?php
$targetDir = "uploads/"; // 上传目录
$targetFile = $targetDir . basename($_FILES["video_file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile,PATHINFO_EXTENSION));

// 检查文件是否已经存在
if (file_exists($targetFile)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

// 允许某些文件类型
$allowed = array('mp4', 'webm', 'ogg');
if(!in_array($imageFileType, $allowed)) {
    echo "Sorry, only MP4, WEBM & OGG files are allowed.";
    $uploadOk = 0;
}

// 检查文件大小(这里设置为50MB)
if ($_FILES["video_file"]["size"] > 50000000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

// 如果文件上传没有问题,则尝试将其移动到目标目录
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["video_file"]["tmp_name"], $targetFile)) {
        echo "The file ". htmlspecialchars( basename( $_FILES["video_file"]["name"])). " has been uploaded.";

        // 连接到数据库
        $conn = new mysqli("localhost", "username", "password", "database_name");

        // 检查连接
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        // 插入数据到数据库
        $title = $_POST['title'];
        $description = $_POST['description'];
        $uploader = 'some_user'; // 可以从session或其他地方获取
        $video_path = $targetFile;

        $sql = "INSERT INTO videos (title, description, uploader, video_path) VALUES ('$title', '$description', '$uploader', '$video_path')";

        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

        $conn->close();
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

注意

  • 上面的代码是一个非常基础的示例,实际使用中你可能需要添加更多的错误检查和安全性措施,例如防止SQL注入、检查上传文件的内容类型等。
  • 你还需要确保PHP的配置(php.ini)允许文件上传,并且uploads/目录具有适当的写入权限。
  • 在实际应用中,你可能还希望添加其他功能,例如视频的预览图、转码、水印等。
  • 如果你预计会有大量的视频上传或需要高可用性,你可能还需要考虑使用专门的媒体服务器或CDN来存储和分发视频。