آموزش ساخت سیستم مدیریت آپلود ویدیو با PHP
در این مقاله، به بررسی گام به گام ساخت یک سیستم مدیریت آپلود ویدیو با استفاده از زبان برنامهنویسی PHP خواهیم پرداخت. این سیستم به کاربران امکان میدهد ویدیوهای خود را آپلود، مدیریت و به اشتراک بگذارند. تمرکز اصلی بر روی جنبههای عملی و کاربردی پیادهسازی این سیستم خواهد بود.
بخش اول: پیشنیازها و آمادهسازی
قبل از شروع، اطمینان حاصل کنید که پیشنیازهای زیر را دارید:
- سرور وب: Apache یا Nginx
- PHP: نسخه 7.4 یا بالاتر
- MySQL: پایگاه داده برای ذخیره اطلاعات
- PHPMyAdmin: برای مدیریت پایگاه داده
- دانش پایه PHP و MySQL: آشنایی با مفاهیم اولیه این دو فناوری ضروری است.
همچنین، یک محیط توسعه محلی (مانند XAMPP، WAMP یا MAMP) راهاندازی کنید تا بتوانید سیستم را به صورت آفلاین توسعه دهید.
بخش دوم: طراحی پایگاه داده
برای ذخیره اطلاعات ویدیوها و کاربران، به یک پایگاه داده نیاز داریم. جدولهای زیر را در MySQL ایجاد کنید:
جدول Users
CREATE TABLE Users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
جدول Videos
CREATE TABLE Videos (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
filename VARCHAR(255) NOT NULL,
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
views INT DEFAULT 0,
FOREIGN KEY (user_id) REFERENCES Users(id)
);
این دو جدول، اطلاعات اصلی کاربران و ویدیوها را ذخیره میکنند. جدول Users اطلاعات کاربری مانند نام کاربری، رمز عبور و ایمیل را نگهداری میکند. جدول Videos اطلاعات ویدیوها مانند عنوان، توضیحات، نام فایل و تاریخ آپلود را ذخیره میکند. کلید خارجی (Foreign Key) در جدول Videos، ارتباط بین ویدیوها و کاربران را برقرار میکند.
بخش سوم: پیادهسازی بخش آپلود ویدیو
برای آپلود ویدیوها، به یک فرم HTML و یک اسکریپت PHP نیاز داریم.
فرم آپلود (upload.php)
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="video">
<input type="submit" value="آپلود ویدیو">
</form>
این فرم یک فیلد آپلود فایل با نام “video” دارد. ویژگی enctype="multipart/form-data" برای آپلود فایلهای بزرگ ضروری است.
اسکریپت آپلود (upload.php)
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["video"]["name"]);
$uploadOk = 1;
$fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if file type is allowed
$allowed_types = array("mp4", "avi", "mov");
if(!in_array($fileType, $allowed_types)) {
echo "متاسفیم، فقط فایلهای MP4، AVI و MOV مجاز هستند.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["video"]["size"] > 5000000) { // 5MB limit
echo "متاسفیم، فایل شما خیلی بزرگ است.";
$uploadOk = 0;
}
// Check if file already exists
if (file_exists($target_file)) {
echo "متاسفیم، فایلی با این نام قبلاً وجود دارد.";
$uploadOk = 0;
}
if ($uploadOk == 1) {
if (move_uploaded_file($_FILES["video"]["tmp_name"], $target_file)) {
// Insert video information into database
$user_id = $_SESSION['user_id'];
$title = $_POST['title'] ?? 'بدون عنوان'; // Get title from POST if available
$description = $_POST['description'] ?? ''; // Get description from POST if available
$filename = basename($_FILES["video"]["name"]);
include 'db_connection.php'; // Include database connection file
$sql = "INSERT INTO Videos (user_id, title, description, filename) VALUES ('$user_id', '$title', '$description', '$filename')";
if ($conn->query($sql) === TRUE) {
echo "فایل با موفقیت آپلود شد.";
} else {
echo "خطا در آپلود فایل: " . $conn->error;
}
$conn->close();
} else {
echo "متاسفیم، خطایی در آپلود فایل رخ داد.";
}
}
?>
این اسکریپت ابتدا بررسی میکند که کاربر وارد سیستم شده باشد. سپس، نوع فایل، اندازه فایل و وجود فایل با همان نام را بررسی میکند. اگر همه بررسیها موفقیتآمیز باشند، فایل آپلود شده و اطلاعات آن در پایگاه داده ذخیره میشود.
بخش چهارم: نمایش ویدیوها
برای نمایش ویدیوها، به یک اسکریپت PHP نیاز داریم که اطلاعات ویدیوها را از پایگاه داده دریافت کرده و آنها را در یک صفحه نمایش دهد.
نمایش ویدیوها (videos.php)
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
include 'db_connection.php';
$sql = "SELECT * FROM Videos";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<div>";
echo "<video width='320' height='240' controls>";
echo "<source src='uploads/" . $row["filename"] . "' type='video/mp4'>";
echo "مرورگر شما از تگ video پشتیبانی نمیکند.";
echo "</video>";
echo "<p>عنوان: " . $row["title"] . "</p>";
echo "<p>توضیحات: " . $row["description"] . "</p>";
echo "</div>";
}
} else {
echo "هیچ ویدیویی یافت نشد.";
}
$conn->close();
?>
این اسکریپت اطلاعات ویدیوها را از جدول Videos دریافت کرده و آنها را در یک صفحه نمایش میدهد. از تگ <video> برای نمایش ویدیوها استفاده میشود.
بخش پنجم: مدیریت کاربران (Login/Register)
برای مدیریت کاربران، به صفحات ورود و ثبتنام نیاز داریم. این صفحات شامل فرمهای HTML و اسکریپتهای PHP برای پردازش اطلاعات کاربری هستند. (پیادهسازی این بخش به دلیل طولانی بودن، در این مقاله به صورت مختصر توضیح داده میشود.)
- ثبتنام (register.php): فرمی برای دریافت اطلاعات کاربری (نام کاربری، رمز عبور، ایمیل) و ذخیره آنها در جدول Users.
- ورود (login.php): فرمی برای دریافت نام کاربری و رمز عبور و بررسی صحت آنها در جدول Users. در صورت صحت، یک session ایجاد میشود.
- خروج (logout.php): از بین بردن session کاربر.
بخش ششم: نکات امنیتی
امنیت سیستم آپلود ویدیو بسیار مهم است. نکات زیر را در نظر داشته باشید:
- اعتبارسنجی ورودی: تمام ورودیهای کاربر را اعتبارسنجی کنید تا از حملات تزریق SQL و XSS جلوگیری کنید.
- رمزنگاری رمز عبور: رمز عبور کاربران را با استفاده از توابع رمزنگاری قوی (مانند password_hash) ذخیره کنید.
- محدودیت اندازه فایل: اندازه فایلهای آپلود شده را محدود کنید تا از پر شدن فضای سرور جلوگیری کنید.
- نوع فایل مجاز: فقط انواع فایلهای مجاز را اجازه آپلود دهید.
- بررسی فایل آپلود شده: فایل آپلود شده را برای وجود ویروس یا کد مخرب اسکن کنید.
این مقاله یک راهنمای کلی برای ساخت سیستم مدیریت آپلود ویدیو با PHP است. با توجه به نیازهای خود، میتوانید این سیستم را گسترش داده و ویژگیهای بیشتری به آن اضافه کنید.
