ساخت سیستم مدیریت آپلود ویدیو

ساخت سیستم مدیریت آپلود ویدیو با PHP

ساخت سیستم مدیریت آپلود ویدیو با PHP

در دنیای امروز، ویدیو به یکی از پرمخاطب‌ترین و پرکاربردترین فرمت‌های محتوا تبدیل شده است. بسیاری از وب‌سایت‌ها و پلتفرم‌ها نیاز به سیستمی دارند که به کاربران امکان آپلود، مدیریت و پخش ویدیوها را بدهد. این مقاله به بررسی گام به گام ساخت یک سیستم مدیریت آپلود ویدیو با استفاده از PHP می‌پردازد. هدف، ارائه یک راهنمای عملی و قابل فهم برای توسعه‌دهندگان است تا بتوانند یک سیستم پایه را پیاده‌سازی کرده و آن را بر اساس نیازهای خود گسترش دهند.

بخش اول: پیش‌نیازها و آماده‌سازی

قبل از شروع، اطمینان حاصل کنید که پیش‌نیازهای زیر را دارید:

  • PHP: نسخه 7.4 یا بالاتر
  • MySQL: یک پایگاه داده MySQL برای ذخیره اطلاعات ویدیوها و کاربران
  • Web Server: Apache یا Nginx
  • HTML, CSS, JavaScript: دانش پایه این زبان‌ها برای طراحی رابط کاربری

همچنین، یک محیط توسعه محلی (مانند XAMPP، WAMP یا MAMP) برای تست و توسعه سیستم توصیه می‌شود.

بخش دوم: طراحی پایگاه داده

برای ذخیره اطلاعات ویدیوها و کاربران، به یک پایگاه داده نیاز داریم. یک جدول `users` برای ذخیره اطلاعات کاربران و یک جدول `videos` برای ذخیره اطلاعات ویدیوها ایجاد می‌کنیم.

جدول 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
);

جدول Videos

CREATE TABLE videos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    filename VARCHAR(255) NOT NULL,
    upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

در جدول `videos`، `filename` نام فایل ویدیو را در سرور ذخیره می‌کند. `user_id` کلید خارجی است که ویدیو را به کاربر آپلود کننده مرتبط می‌کند.

بخش سوم: پیاده‌سازی آپلود ویدیو

برای آپلود ویدیو، از یک فرم HTML استفاده می‌کنیم که فایل ویدیو را به یک اسکریپت PHP ارسال می‌کند. اسکریپت PHP فایل را دریافت کرده، آن را در یک پوشه مشخص ذخیره می‌کند و اطلاعات مربوط به ویدیو را در پایگاه داده ثبت می‌کند.

فرم HTML

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="video">
    <input type="submit" value="آپلود ویدیو">
</form>

ویژگی `enctype=”multipart/form-data”` برای ارسال فایل‌های بزرگ ضروری است.

اسکریپت PHP (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));

// بررسی نوع فایل
if($fileType != "mp4" && $fileType != "avi" && $fileType != "mov") {
    echo "متاسفیم، فقط فایل‌های MP4، AVI و MOV مجاز هستند.";
    $uploadOk = 0;
}

// بررسی اندازه فایل
if ($_FILES["video"]["size"] > 5000000) { // 5MB
    echo "متاسفیم، فایل شما خیلی بزرگ است.";
    $uploadOk = 0;
}

// اگر همه چیز درست است، فایل را آپلود کنید
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["video"]["tmp_name"], $target_file)) {
        echo "فایل " . htmlspecialchars(basename($_FILES["video"]["name"])) . " با موفقیت آپلود شد.";

        // ذخیره اطلاعات ویدیو در پایگاه داده
        $user_id = $_SESSION['user_id'];
        $title = basename($_FILES["video"]["name"]); // می توانید از یک فیلد ورودی برای دریافت عنوان استفاده کنید
        $filename = $target_file;

        // اتصال به پایگاه داده
        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "video_upload";

        $conn = new mysqli($servername, $username, $password, $dbname);

        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        $sql = "INSERT INTO videos (user_id, title, filename) VALUES ('$user_id', '$title', '$filename')";

        if ($conn->query($sql) === TRUE) {
            echo "اطلاعات ویدیو با موفقیت در پایگاه داده ذخیره شد.";
        } else {
            echo "Error: " . $sql . "
" . $conn->error; } $conn->close(); } else { echo "متاسفیم، در آپلود فایل خطایی رخ داد."; } } ?>

این اسکریپت ابتدا بررسی می‌کند که کاربر وارد شده باشد. سپس، نوع و اندازه فایل را بررسی می‌کند و در صورت معتبر بودن، فایل را در پوشه `uploads/` ذخیره می‌کند و اطلاعات مربوط به آن را در پایگاه داده ثبت می‌کند.

بخش چهارم: نمایش ویدیوها

برای نمایش ویدیوها، باید اطلاعات آنها را از پایگاه داده دریافت کرده و در یک صفحه HTML نمایش دهیم. از تگ `

اسکریپت PHP (videos.php)

<?php
session_start();

// بررسی اینکه کاربر وارد شده باشد
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit();
}

// اتصال به پایگاه داده
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "video_upload";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, title, filename FROM videos";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<h1>ویدیوهای آپلود شده</h1>";
    echo "<ul>";
    while($row = $result->fetch_assoc()) {
        echo "<li>";
        echo "<video width="320" height="240" controls>";
        echo "<source src="" . $row["filename"] . "" type="video/mp4">";
        echo "<Your browser does not support the video tag.</video>";
        echo "<p>" . $row["title"] . "</p>";
        echo "</li>";
    }
    echo "</ul>";
} else {
    echo "هیچ ویدیویی یافت نشد.";
}

$conn->close();
?>

این اسکریپت اطلاعات ویدیوها را از پایگاه داده دریافت کرده و برای هر ویدیو، یک تگ `

بخش پنجم: امنیت و بهینه‌سازی

برای افزایش امنیت و بهینه‌سازی سیستم، نکات زیر را در نظر بگیرید:

  • اعتبارسنجی ورودی: تمام ورودی‌های کاربر را اعتبارسنجی کنید تا از حملات تزریق SQL و XSS جلوگیری کنید.
  • رمزنگاری رمز عبور: رمز عبور کاربران را با استفاده از توابع رمزنگاری قوی (مانند password_hash) ذخیره کنید.
  • کنترل دسترسی: مطمئن شوید که فقط کاربران مجاز می‌توانند ویدیوها را آپلود و مشاهده کنند.
  • بهینه‌سازی تصاویر: تصاویر ویدیوها را بهینه‌سازی کنید تا حجم آنها کاهش یابد و سرعت بارگذاری صفحه افزایش یابد.
  • استفاده از CDN: از یک شبکه توزیع محتوا (CDN) برای ارائه ویدیوها به کاربران در سراسر جهان استفاده کنید.

نتیجه‌گیری

در این مقاله، یک سیستم مدیریت آپلود ویدیو پایه با استفاده از PHP را بررسی کردیم. این سیستم شامل آپلود ویدیو، ذخیره اطلاعات ویدیو در پایگاه داده و نمایش ویدیوها می‌شود. با رعایت نکات امنیتی و بهینه‌سازی، می‌توانید این سیستم را به یک پلتفرم قدرتمند برای مدیریت ویدیوها تبدیل کنید.