في هذا الدرس 6تصفّح المواضيع
لا تستطيع نماذج HTML إرسال الملفات الثنائية إلا عند إضافة خاصية الترميز enctype="multipart/form-data" في وسم النموذج. وفي الخادم يغلف Laravel كل ملف مرفوع داخل كائن UploadedFile يتم الوصول إليه عبر دالة file لفحص وجوده وسلامة انتقاله.
- ترميز النموذج (multipart/form-data): خاصية إلزامية في وسم form لتمكين المتصفح من نقل البيانات الثنائية.
- فحص الوجود (hasFile): التأكد من قيام المستخدم برفع ملف فعلي تحت اسم الحقل المحدد.
- سلامة النقل (isValid): التحقق من اكتمال رفع الملف بنجاح دون انقطاع أو أخطاء في إعدادات PHP.
<form method="POST" action="/upload"
enctype="multipart/form-data">
@csrf
<input type="file" name="avatar">
<button type="submit">Upload</button>
</form>
يعد قبول الملفات المرفوعة دون تحقق من أخطر الثغرات الأمنية لأن المهاجم قد يرفع ملفات برمجية خبيثة متنكرة في هيئة صور. تفحص قواعد التحقق في Laravel البصمة الفعلية لنوع الملف MIME والامتداد والحجم بالكيلوبايت وأبعاد الصورة قبل حفظها.
- فحص البصمة (image & mimes): فحص المحتوى الفعلي للملف للسماح بالصيغ الآمنة فقط مثل الصور أو PDF.
- تقييد الحجم (max): تحديد الحجم الأقصى المسموح به مقدراً بالكيلوبايت لحماية مساحة الخادم.
- أبعاد الصور (dimensions): فرض شروط على العرض والارتفاع للأيقونات والصور الشخصية.
$request->validate([
'avatar' => [
'required',
'image',
'mimes:jpg,png,webp',
'max:2048',
],
]);
يجرد Laravel التعامل مع الملفات عبر محركات Flysystem المعرفة في ملف config/filesystems.php ليعمل الكود بنفس الطريقة محلياً أو سحابياً. يخزن القرص المحلي الافتراضي الملفات الخاصة داخل storage/app/private، بينما يخصص القرص العام public للملفات المتاحة للمتصفح.
- القرص الخاص (local Disk): يحفظ الملفات الحساسة في مجلد خاص لا يمكن الوصول إليه عبر روابط المتصفح.
- القرص العام (public Disk): يحفظ الصور والوسائط العامة داخل storage/app/public تمهيداً لعرضها.
- التخزين السحابي (s3 Driver): يتيح الانتقال للتخزين السحابي عبر تعديل الإعدادات دون تغيير كود التطبيق.
// Storing files on explicit Flysystem disks
Storage::disk('local')
->put('private/note.txt', 'Secret');
Storage::disk('public')
->put('banners/hero.txt', 'Public');
إياك وحفظ الملفات المرفوعة باسمها الأصلي القادم من جهاز المستخدم لأن ذلك يفتح باب استبدال ملفات الآخرين أو التلاعب بالمسارات. تقوم دالة store تلقائياً بتوليد اسم عشوائي فريد ومشفر للملف مع الحفاظ على امتداده الصحيح.
- الحفظ المشفر (store): توليد اسم فريد عشوائي تلقائياً وحفظ الملف داخل المجلد والقرص المحددين.
- الحفظ المسمى (storeAs): تحديد اسم ملف مخصص ومضبوط برمجياً عند الحاجة لتسمية موحدة.
- إرجاع المسار (Relative Path): تعيد الدالتان المسار النسبي للملف المحفوظ ليسهل تخزينه واسترجاعه لاحقاً.
$path = $request->file('avatar')
->store('avatars', 'public');
return back()->with('avatar_path', $path);
نظراً لأن مجلد public فقط هو المتاح لخادم الويب، فإن الملفات المحفوظة في storage/app/public لا تظهر في المتصفح مباشرة. ينشئ الأمر php artisan storage:link رابطاً رمزياً يربط public/storage بمجلد التخزين العام لتتمكن دالة Storage::url من عرضها.
- إنشاء الرابط الرمزي (storage:link): ربط مجلد العرض العام بمجلد التخزين عبر رابط رمزي في نظام التشغيل.
- توليد رابط العرض (Storage::url): إرجاع الرابط العام الصالح للوضع داخل وسم الصورة في القالب.
- حذف الملفات (Storage::delete): إزالة الملفات القديمة من القرص لتجنب تراكم الملفات اليتيمة.
// Run once in CLI: php artisan storage:link
$url = Storage::disk('public')->url($path);
Storage::disk('public')
->delete('avatars/old.png');
يتطلب التعامل الآمن مع الملفات أربع خطوات متكاملة: ترميز النموذج، والتحقق الصارم من النوع والحجم، والحفظ باسم مشفر في القرص المناسب، وتوليد الرابط عبر الرابط الرمزي. اعتمد على هذا الملخص لمراجعة كافة نقاط رفع الملفات في تطبيقك.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحمي | معيار Laravel 12 الحديث |
|---|---|---|
| فحص الملف المرفوع | الاعتماد على امتداد الاسم النصي في $_FILES فقط | فحص البصمة الثنائية والحجم عبر قواعد image و mimes و max |
| مجلد الحفظ | نقل الملف مباشرة داخل مجلد public المتاح للتنفيذ | العزل في storage/app والربط الآمن عبر الرابط الرمزي storage:link |
| أمان اسم الملف | استخدام اسم ملف المستخدم الأصلي المعرض للاستبدال | توليد اسم مشفر فريد بطول 40 حرفاً تلقائياً عبر دالة store |
| قابلية النقل السحابي | مسارات ملفات محلية ثابتة داخل الكود يصعب تغييرها | واجهة Storage::disk الموحدة للأقراص المحلية والسحابية S3 |
if ($request->hasFile('avatar')) {
$path = $request->file('avatar')
->store('avatars', 'public');
$url = Storage::url($path);
}
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «رفع الملفات الآمن وأقراص التخزين والروابط الرمزية في Laravel» مفاهيم نماذج رفع الملفات وفحص استلامها، والتحقق من نوع وحجم الملفات، وإعداد أقراص التخزين المحلية والعامة وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «إعداد اتصال قواعد البيانات وأساسيات التهجير في Laravel» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 File Uploads رفع الملفات
- التحقق من نوع وحجم الملفات المرفوعة وحفظها بأسماء آمنة عبر نظام التخزين Storage وربطها بأمر storage:link وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
- للمراجعة
- 02 Multipart Forms and Uploaded Files نماذج رفع الملفات وفحص استلامها
- المفهوم الهندسي والتطبيق العملي المباشر لقسم نماذج رفع الملفات وفحص استلامها في إطار العمل Laravel 12.
- للمراجعة
- 03 Validating File Types and Sizes التحقق من نوع وحجم الملفات
- المفهوم الهندسي والتطبيق العملي المباشر لقسم التحقق من نوع وحجم الملفات في إطار العمل Laravel 12.
- للمراجعة
- 04 Configuring Local and Public Disks إعداد أقراص التخزين المحلية والعامة
- المفهوم الهندسي والتطبيق العملي المباشر لقسم إعداد أقراص التخزين المحلية والعامة في إطار العمل Laravel 12.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 MVC MVC
- Model View Controller
- النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
- للمراجعة
- 02 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
- للمراجعة
- 03 HTTP HTTP
- Hypertext Transfer Protocol
- بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
- للمراجعة
- 04 PSR PSR
- PHP Standards Recommendations
- المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «نماذج رفع الملفات وفحص استلامها» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «التحقق من نوع وحجم الملفات» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من نماذج رفع الملفات وفحص استلامها في إطار العمل Laravel 12؟
يسهم نماذج رفع الملفات وفحص استلامها في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «التحقق من نوع وحجم الملفات» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة إعداد أقراص التخزين المحلية والعامة بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة إعداد أقراص التخزين المحلية والعامة.
لماذا يُعد تطبيق حفظ الملفات بأسماء مشفرة آمنة مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق الرابط الرمزي وإدارة الملفات المخزنة في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص رفع الملفات وأقراص التخزين؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.