شرح رفع الملفات (File Upload) في PHP

رفع الملفات ميزة مهمة في تطبيقات كثيرة: صورة حساب، مرفقات، مستندات، أو ملفات منتج. لكن في نفس الوقت تعتبر من أكثر النقاط حساسية أمنياً.

في هذا الدرس ستتعلم الطريقة الصحيحة لرفع الملفات في PHP باستخدام $_FILES وmove_uploaded_file() مع أهم قواعد الحماية.

المتطلبات الأساسية لرفع الملفات

  • النموذج يجب أن يكون method="POST".
  • إضافة enctype="multipart/form-data" داخل form.
  • وجود حقل input type="file" مع name.

مثال 1: نموذج HTML لرفع ملف

الكود:

<form action="upload.php" method="POST" enctype="multipart/form-data">
  اختر صورة: <input type="file" name="myImage">
  <button type="submit">رفع الملف</button>
</form>

مثال 2: استقبال ونقل الملف في PHP

الكود في upload.php:

<?php
$targetDir = "uploads/";
$fileName = basename($_FILES["myImage"]["name"]);
$targetFile = $targetDir . $fileName;

if (move_uploaded_file($_FILES["myImage"]["tmp_name"], $targetFile)) {
    echo "تم رفع الملف بنجاح";
} else {
    echo "حدث خطأ أثناء رفع الملف";
}
?>

شرح كود PHP:

  • $_FILES["myImage"] يحتوي بيانات الملف المرفوع.
  • tmp_name هو المسار المؤقت للملف قبل الحفظ النهائي.
  • move_uploaded_file() تنقل الملف إلى مجلدك الدائم.

بنية $_FILES باختصار

المفتاح المعنى
name اسم الملف الأصلي
type نوع الملف المرسل من المتصفح
size حجم الملف بالبايت
tmp_name المسار المؤقت على الخادم
error كود خطأ الرفع إن وجد

أهم قواعد الأمان عند رفع الملفات

  • تحقق من الامتداد المسموح (مثل: jpg, png, pdf).
  • حدد حداً أقصى لحجم الملف.
  • غيّر اسم الملف إلى اسم فريد (مثل uniqid()).
  • لا تسمح برفع ملفات تنفيذية مثل .php أو .exe.
  • احفظ الملفات في مجلد لا يسمح بتنفيذ السكربتات.
تنبيه أمني: عدم التحقق من نوع الملف وحجمه قد يعرّض موقعك لثغرات خطيرة.

أخطاء شائعة للمبتدئين

  • نسيان enctype="multipart/form-data" في النموذج.
  • استعمال $_POST بدل $_FILES لقراءة الملف.
  • عدم التحقق من قيمة $_FILES[...]["error"].
  • استخدام الاسم الأصلي للملف مباشرة دون تغييره.

تمرين تطبيقي سريع

  1. أنشئ نموذج رفع صورة باسم حقل avatar.
  2. اسمح فقط بامتدادي jpg وpng.
  3. حدد الحجم الأقصى بـ 2MB.
  4. احفظ الملف باسم فريد داخل مجلد uploads.

الأسئلة الشائعة — FAQ

كيف أرفع ملفاً في PHP؟

عبر نموذج POST مع multipart/form-data ثم نقل الملف بـ move_uploaded_file().

ما فائدة enctype="multipart/form-data"؟

بدونها لن يتم إرسال الملف بشكل صحيح من المتصفح إلى الخادم.

ما وظيفة $_FILES؟

تحتوي كل معلومات الملف المرفوع: الاسم، الحجم، النوع، المسار المؤقت، وحالة الخطأ.

كيف أؤمن رفع الملفات؟

بالتحقق من النوع والحجم، منع الامتدادات الخطرة، وتخزين الملفات بأسماء فريدة.

ممتاز! الآن فهمت طريقة رفع الملفات في PHP بشكل عملي وآمن. في الدرس القادم سنتعلم الكوكيز (Cookies).
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن