如何用PHP和MySQL上传视频?
参考答案:
使用PHP和MySQL上传视频主要涉及以下步骤:
- 创建数据库和表
首先,你需要在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
);
- 创建上传表单
在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>
- 处理上传的视频文件
在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来存储和分发视频。