English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، ستتعلم كيفية استخدام PHP لتحميل الملفات إلى خادم الويب الموجود على بعد.
في هذا الدرس، سنتعلم كيفية استخدام نموذج HTML بسيط وPHP لتحميل الملفات إلى الخادم عن بعد. يمكنك تحميل أي نوع من الملفات، مثل الصور، والأفلام، وملفات ZIP، ومستندات Microsoft Office، وملفات PDF، والملفات التنفيذية وأنواع ملفات أخرى.
في هذا المثال، سنقوم بإنشاء نموذج HTML بسيط يمكن استخدامه لتحميل الملفات.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>نموذج تحميل ملف</title> </head> <form action="upload-manager.html" method="post" enctype="multipart/form-data"> <h2>تحميل ملف</h2> <label for="fileSelect">اسم الملف:</label> <input type="file" name="photo" id="fileSelect"> <input type="submit" name="submit" value="Upload"> <p><strong>ملاحظة:</strong> يسمح فقط بالتنسيقات .jpg، .jpeg، .gif، .png، الحجم الأقصى 5 MB.</p> </form> </html>
ملاحظة:إضافة إلىاختيار الملفإضافة إلى الحقل، يجب أن يستخدم النموذجHTTP postالطريقة، وينبغي أن تحتوي على خاصية enctype="multipart/form-data". هذه الخاصية تأكد من أن يتم ترميز بيانات النموذج على شكل بيانات MIME متعددة، وهو ضروري لتحميل بيانات ثنائية كبيرة (مثل الصور، والأصوات، والأفلام، إلخ).
إليك الكود الكامل للملف "Upload-manager.php"، والذي سيقوم بحفظ الملفات المرسلة في مجلد "upload" بشكل دائم، وسيقوم ببعض التحقق الأساسي من الأمان مثل نوع الملف و حجم الملف لضمان أن يقوم المستخدم بتحميل نوع الملف الصحيح وضمن الحجم المسموح به.
<?php // التحقق من أن النموذج تم تقديمه إذا ($_SERVER["REQUEST_METHOD"] == "POST") { // التحقق من أن الملف تم تحميله بنجاح إذا (isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0) { $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png"); $filename = $_FILES["photo"]["name"]; $filetype = $_FILES["photo"]["type"]; $filesize = $_FILES["photo"]["size"]; // تأكد من امتداد الملف $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!array_key_exists($ext, $allowed)) die("خطأ: يرجى اختيار صيغة ملف صالحة."); // تأكد من حجم الملف - أقصى 5MB $maxsize = 5 * 1024 * 1024; if($filesize > $maxsize) die("خطأ: حجم الملف أكبر من الحد المسموح به."); // تأكد من نوع MIME للملف if(in_array($filetype, $allowed)){ // تحقق مما إذا كان الملف موجودًا قبل تحميله if(file_exists("upload/" . $filename)){ echo $filename . " يوجد بالفعل."; } else { move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename); echo "تم تحميل ملفك بنجاح."; } } else { echo "خطأ: حدث خطأ أثناء تحميل ملفك. يرجى المحاولة مجدداً."; } } else { echo "Error: " . $_FILES["photo"]["error"]; } } ?>
ملاحظة:يمنع هذا السكربت تحميل ملف يحمل نفس الاسم مع الملفات الموجودة في نفس الدليل. ولكن إذا كنت ترغب في السماح بذلك، فما عليك سوى إضافة رقام عشوائية أو علامة زمنية قبل اسم الملف، مثل $filename = time() . '_' . $_FILES["photo"]["name"];
قد تود أن تعرف ما هو موضوع هذا الكود. حسناً، دعنا نمر على كل جزء من هذا الكود المثال خطوة بخطوة لفهم العملية بشكل أفضل.
بمجرد تقديم النموذج، يمكن الوصول إلى معلومات تحميل الملف من خلال المجموعة العالمية PHP $_FILES. على سبيل المثال، يحتوي نموذجنا على حقل اختيار ملف يُدعى photo (أي name = "photo"). إذا قام أي مستخدم بتحميل ملف باستخدام هذا الحقل، يمكننا الحصول على تفاصيله، مثل الاسم والنوع والحجم والاسم المؤقت، أو أي أخطاء قد تحدث أثناء محاولة رفع الملف عبر مصفوفة الارتباط $_FILES["photo"]، مثلما يلي:
$_FILES["photo"]["name"] — يعين قيمة هذا المفتاح الاسم الأصلي للملف، بما في ذلك امتداد الملف. لا يشمل المسار.
$_FILES["photo"]["type"] — يعين قيمة هذا المفتاح نوع الملف MIME.
$_FILES["photo"]["size"] — يعين قيمة هذا المفتاح حجم الملف، بالبites.
$_FILES["photo"]["tmp_name"] — يعين قيمة هذا المفتاح الاسم المؤقت، بما في ذلك المسار الكامل الذي تم تخصيصه للملف بعد تحميله إلى الخادم.
$_FILES["photo"]["error"] — يعين قيمة هذا المفتاح خطأ أو رمز حالة مرتبط بتحميل الملف، مثل 0 إذا لم يكن هناك خطأ.
سيقوم الكود PHP في المثال التالي بعرض تفاصيل الملف المرفوع فقط وسيخزنه في مجلد مؤقت على خادم الويب.
<?php if($_FILES["photo"]["error"] > 0) { echo "خطأ: " . $_FILES["photo"]["error"] . "<br>"; } else { echo "اسم الملف: " . $_FILES["photo"]["name"] . "<br>"; echo "نوع الملف: " . $_FILES["photo"]["type"] . "<br>"; echo "حجم الملف: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>"; echo "مخزن في: " . $_FILES["photo"]["tmp_name"]; } ?>
إشارة:بعد رفع الملف بنجاح، سيتم تخزين الملف تلقائيًا في مجلد مؤقت على الخادم. لإجراء تخزين دائم لهذا الملف، تحتاج إلى استخدام دالة move_uploaded_file() في PHP لتحريك الملف من مجلد التخزين المؤقت إلى الموقع الدائم.