السلام عليكم و رحمة الله و بركاته ،
هذا أول موضوع لي في سوالف ، و ان شاء الله ما راح يكون الأخير .. 
طبعا سكريبت الأبلود هذا بسيط لدرجة إن ما فيه أي مميزات غير الأبلود ، و لا حتى راح يكون فيه واجهة أو تصميم -- لأن الغرض منه تعليمي فقط .. و تقدر تطوّر السكريبت كما تشاء ..
و قريبا ان شاء الله راح أنتهي من تطويره ، لأني احتاجه ..
طبعا أكواد php اللي في المنتدى هنا مقلوبة مدري ليش !
----------------------------------------------------------------------------
بعد هالمقدمة أقول :
إننا راح ننشئ ملفّين ، أحدهما هو ملف الكونفيق (Config.php) و الآخر هو ملف الأبلود (Upload.php).
ملف الكونفيق راح يحتوي فقط على المسار اللي راح نرفع ملفاتنا له ( يعني سطر واحد بس ، اذا استثنينا وسمي <? و ?> ..)
يمكن أحد يتساءل ليش ما نستغني عن ملف الكونفيق و نضع المسار في نفس ملف upload.php ..
الإجابة هي : لأننا راح نطوّر السكريبت مستقبلا بحيث يحتوي مميزات كثيرة مثل : تخصيص حجم و نوع الملفات المراد رفعها ، إلخ.
حاليًا هذا شكل ملف الكونفيق :
كود PHP:
<?PHP
$path = "C:\\lahloob"; //اخترت رفع الملف إلى مجلد لهلوب في السي
?>
-----------------------------------------------------------------------
ملف upload.php راح يحوي الأشياء التالية :
1 ) وسم بداية كود الـ PHP
2) استدعاء ملف الكونفيق اللي يحتوي المسار
كود PHP:
include "config.php";
3) إدراج النموذج (الفورم) الخاص باستعراض الملفات لتحميلهاو أيضا نحتاج إلى زر خاص بالتحميل
كود PHP:
echo "<form method=\"POST\" action=\"$PHP_SELF?upload=uploading\"
enctype=\"multipart/form-data\">
<input type=file name=file size=30><br><br>
<button name=\"submit\" type=\"submit\">
تحميل</button></form>";
طبعًا في هذا الجزء من الكود غموض شوي لذا سأشرحه.
الغريب في هالفورم يمكن هو استخدام المتغيّر $PHP_SELF -- و للمعلومية فإن هذا المتغيّر مبني داخل لغة PHP ووظيفته إنه يرجّع لك رابط السكريبت الحالي. إذن نحن في خانة الـ action راح نسترجع الرابط الحالي اللي فيه السكريبت ثم نضيف إليه ?upload=uploading
حيث upload و uploading هذي متغيّرات عادية راح أعرّفها بعدين
لاحظوا إننا في هالفورم عرّفنا المتغيّرات التالية :
upload -- uploading -- file
4) الآن نصل إلى نقطة هامة و هي إنه بعد ما اختار المستخدم الملف ، و ضغط على زر "تحميل" ، ما ذا يجب أن يفعل السكريبت ؟
السكريبت في هالحالة راح يختبر ، إذا تم نسخ الملف بشكل صحيح فيرجّع لك "تم تحميل الملف بنجاح" ، أو إذا لم يتم نسخه بشكل صحيح ستأتيك الرسالة "لم تختر الملف بشكل صحيح" -- السبب في الخطأ يعود ربما لخطأ في اختيار الملف المراد تحميله أو من هذا القبيل.
أولاً سنضع متغيّر و نسميه $result و نسند له عبارة "تم تحميل الملف بنجاح" ، دون أن نطبع هالرسالة.
كود PHP:
$result = "تم تحميل الملف بنجاح !!";
ثم بعد ذلك نحاول رفع الملف ، إذا تم رفعه بنجاح ستبقى قيمة $result كما هي، أو نسند لـ $result قيمة جديدة و هي : "لم تختر الملف بشكل صحيح"
الدالّة اللي راح نستخدمها لرفع الملفات هي copy و سنضيف قبلها علامة @ عشان بس نتفادى رسائل التحذير ..
كود PHP:
@copy($file, "$path/$file_name") or $result ="لم تختر الملف بشكل صحيح";
كما تلاحظون فدالة الـ copy تاخذ اسم الملف ، اللي عرفناه في النموذج العلوي -- و تاخذ أيضا مسار الملف.
$file ---> عرّفناه في الفورم الأول
$path---> مسار الملف ، و حددناه في الكونفيق
$file_name --> هذا المتغيّر يتم إنشاؤه اوتوماتيكيا و يحمل اسم الملف اللي نبغى نرفعه
الآن نطبع قيمة $result و هي إما نجاح التحميل أو فشله :
5) نغلق الوسم الخاص بالسكريبت :
--------------------------------------------------------------
الآن السكريبت جاهز ، لكن فيه مشكلة بدائيّة ، و هي إنه في حالة إما نجاح أو فشل التحميل ، فإنه راح تظهر لي نفس الصفحة اللي تطلب اختيار الملف المراد تحميله ، و زر التحميل ، و تحتهم راح تشاهد عبارة النجاح أو الفشل. المطلوب الآن إننا فقط نعرض عبارة نجاح أو فشل دون عرض الفورم الخاص بالتحميل.
لعمل ذلك نحتاج إلى أداة الشرط switch -- نقول في هالأداة إنه إذا ضغط المستخدم على زر التحميل (يعني إن upload=uploading) ، في هالحالة نستخدم الخطوات المذكورة في الخطوة 4 ، عدا ذلك لا نستخدمها.
كود PHP:
switch ($upload)
{
default:
//الآن استخدم الخطوات من 1 إلى 3
break; // هذا لقطع الأمر switch و تجاهل أي خيار أو شرط آخر
case "uploading": //يعني إذا upload=uploading
نفذ الخطوة 4
break;
}
الآن نستخدم الخطوة 5
-------------------------------------------------------------------
ملف upload موجود في المرفقات
للتسهيل ، و لأن الأكواد في المنتدى مقلوبة..
نسألكم الدعاء في هالشهر الفضيل ، و تقبل الله صيامنا و صيامكم ، و قيامنا و قيامكم..