ساخت فرم با انتخاب ویدیو

ساخت فرم با انتخاب ویدیو و پردازش در PHP

ساخت فرم با انتخاب ویدیو و پردازش در PHP

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

بخش اول: فرم HTML برای انتخاب ویدیو

برای شروع، باید یک فرم HTML ایجاد کنیم که به کاربر اجازه دهد فایل ویدئویی را انتخاب کند. از تگ <input type="file"> برای این منظور استفاده می‌کنیم. ویژگی accept در این تگ به ما امکان می‌دهد تا انواع فایل‌های مجاز را مشخص کنیم. در اینجا، ما فقط فایل‌های ویدئویی را مجاز می‌کنیم.

<form action="upload.php" method="post" enctype="multipart/form-data">
  <label for="video">انتخاب ویدیو:</label>
  <input type="file" id="video" name="video" accept="video/*">
  <br>
  <input type="submit" value="آپلود ویدیو">
</form>

در کد بالا:

  • action="upload.php": مشخص می‌کند که فرم پس از ارسال، به فایل upload.php ارسال شود.
  • method="post": مشخص می‌کند که داده‌ها با استفاده از متد POST ارسال شوند.
  • enctype="multipart/form-data": این ویژگی ضروری است زیرا ما در حال آپلود فایل هستیم. این نوع انکودینگ به مرورگر اجازه می‌دهد تا داده‌های فایل را به درستی ارسال کند.
  • <input type="file">: این تگ یک فیلد انتخاب فایل ایجاد می‌کند.
  • id="video": یک شناسه منحصر به فرد برای فیلد انتخاب فایل.
  • name="video": نام فیلد که در سمت سرور برای دسترسی به فایل آپلود شده استفاده می‌شود.
  • accept="video/*": مشخص می‌کند که فقط فایل‌های ویدئویی مجاز به انتخاب هستند.

بخش دوم: پردازش فایل ویدئویی در PHP

حالا که فرم HTML را ایجاد کردیم، باید فایل upload.php را ایجاد کنیم تا فایل ویدئویی آپلود شده را پردازش کند. این فایل مسئول دریافت فایل، بررسی آن و ذخیره آن در سرور است.

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // بررسی اینکه آیا فایل آپلود شده است
  if (isset($_FILES["video"])) {
    $file = $_FILES["video"];

    // اطلاعات فایل
    $file_name = $file["name"];
    $file_tmp = $file["tmp_name"];
    $file_size = $file["size"];
    $file_type = $file["type"];

    // مسیر ذخیره سازی فایل
    $upload_dir = "uploads/";
    $target_file = $upload_dir . basename($file_name);

    // بررسی نوع فایل
    $allowed_types = array("video/mp4", "video/avi", "video/mov", "video/wmv");
    if (!in_array($file_type, $allowed_types)) {
      echo "نوع فایل مجاز نیست.";
      exit;
    }

    // بررسی اندازه فایل (مثلاً حداکثر 10 مگابایت)
    $max_file_size = 10 * 1024 * 1024; // 10MB
    if ($file_size > $max_file_size) {
      echo "حجم فایل بیش از حد مجاز است.";
      exit;
    }

    // تلاش برای انتقال فایل
    if (move_uploaded_file($file_tmp, $target_file)) {
      echo "فایل " . htmlspecialchars($file_name) . " با موفقیت آپلود شد.";
    } else {
      echo "خطا در آپلود فایل.";
    }
  } else {
    echo "هیچ فایلی آپلود نشده است.";
  }
} else {
  echo "دسترسی غیرمجاز.";
}
?>

در کد بالا:

  • $_SERVER["REQUEST_METHOD"] == "POST": بررسی می‌کند که آیا فرم با متد POST ارسال شده است.
  • isset($_FILES["video"]): بررسی می‌کند که آیا فایلی با نام “video” آپلود شده است.
  • $_FILES["video"]: یک آرایه است که اطلاعات فایل آپلود شده را در خود نگه می‌دارد.
  • $file["name"]: نام فایل اصلی.
  • $file["tmp_name"]: مسیر موقت فایل در سرور.
  • $file["size"]: اندازه فایل به بایت.
  • $file["type"]: نوع فایل (MIME type).
  • $upload_dir: پوشه‌ای که فایل در آن ذخیره می‌شود.
  • $target_file: مسیر کامل فایل ذخیره شده.
  • $allowed_types: آرایه‌ای از انواع فایل‌های مجاز.
  • in_array($file_type, $allowed_types): بررسی می‌کند که آیا نوع فایل در لیست انواع مجاز وجود دارد.
  • $max_file_size: حداکثر اندازه مجاز فایل.
  • move_uploaded_file($file_tmp, $target_file): فایل را از مسیر موقت به مسیر نهایی منتقل می‌کند.
  • htmlspecialchars($file_name): برای جلوگیری از حملات XSS، نام فایل را قبل از نمایش آن، رمزگذاری می‌کند.

بخش سوم: نکات امنیتی و بهبود عملکرد

هنگام کار با آپلود فایل، رعایت نکات امنیتی بسیار مهم است. در اینجا چند نکته کلیدی آورده شده است:

  • اعتبارسنجی نوع فایل: همیشه نوع فایل را در سمت سرور اعتبارسنجی کنید. به نوع فایل ارسالی از سمت کاربر اعتماد نکنید.
  • اعتبارسنجی اندازه فایل: اندازه فایل را محدود کنید تا از پر شدن فضای سرور جلوگیری شود.
  • تغییر نام فایل: نام فایل آپلود شده را تغییر دهید تا از جایگزینی فایل‌های موجود جلوگیری شود و از حملات احتمالی جلوگیری شود. می‌توانید از یک شناسه منحصر به فرد یا تاریخ و زمان آپلود برای نام‌گذاری فایل استفاده کنید.
  • ذخیره فایل در خارج از ریشه وب: فایل‌های آپلود شده را در پوشه‌ای خارج از ریشه وب ذخیره کنید تا از دسترسی مستقیم به آنها جلوگیری شود.
  • بررسی خطاها: همیشه خطاها را بررسی کنید و پیام‌های مناسبی را به کاربر نمایش دهید.
  • بهینه‌سازی ویدیو: پس از آپلود، می‌توانید ویدیو را برای کاهش حجم و بهبود عملکرد بهینه‌سازی کنید.

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

پس از آپلود ویدیو، ممکن است بخواهید آن را در وب‌سایت خود نمایش دهید. می‌توانید از تگ <video> برای این منظور استفاده کنید.

<video width="640" height="360" controls>
  <source src="uploads/your_video.mp4" type="video/mp4">
  مرورگر شما از تگ ویدیو پشتیبانی نمی‌کند.
</video>

در کد بالا:

  • src="uploads/your_video.mp4": مسیر فایل ویدئویی آپلود شده.
  • type="video/mp4": نوع فایل ویدئویی.
  • controls: نمایش کنترل‌های ویدیو (پخش، مکث، صدا، و غیره).

به جای your_video.mp4، نام فایل ویدئویی آپلود شده را قرار دهید.

نتیجه‌گیری

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