منتديات مدينة الاحلام

منتديات مدينة الاحلام (http://m.dreamscity.net/)
-   قسم تطوير المواقع و المنتديات (http://m.dreamscity.net/f41.html)
-   -   درس التحميل المتعدد للملفات Multi upload (http://m.dreamscity.net/t32876.html)

php pro 22 - 07 - 2010 10:56

درس التحميل المتعدد للملفات Multi upload
 
باسم الله الرحمــن الرحيم
السلام عليكم و رحمة الله و بركاته
في برمجة الويب لا بد و أن يأتي يوم سنحتاج فيه إلى برمجة صفحة لتحميل الملفات .. و قد يكون هذا التحميل فردي أو متعدد .. في هذا الإطار سأحاول بحول الله تقديم درس خفيف لطريقة التحميل المتعدد .

1 - إنشاء الفورم FORM و سيكون بال HTML بالطريقة المعتادة ..

من الضروريات هنا تحديد ال enctype في الفورم .. و ما دمنا نود استعماله لتحميل الملفات سنستعمله بهذه الطريقة ..




[PHP]

[/PHP]


هنا حددنا طريقة إرسال الكود POST و كذلك ملف الاستقبال upload.php من أجل معالجة الكود ..
أيضاً نعلم أن هذا الفورم يجب أن يضم input لتحديد الملف المراد تحميله عادة نستعمله بهذه الطريقة ..


[PHP]

[/PHP]

هذا بالنسبة للتحميل الأحادي ..
بالنسبة لنا و للتحميل المتعدد .. سنعمل عليها بطريقة الجداول .. يعني ببساطة إضافة [] داخل name فيصبح الكود ..


[PHP]

[/PHP]

هنا نفهم أنه من أجل التحميل المتعدد يلزمنا إعادة هذا الحقل مرات عديدة حسب الحاجة .
و من أجل إرسال الكود لصفحة التحرير يلزمنا أيقونة الإرسال ..


[PHP]


[/PHP]


نحصل بالتالي على كود الإرسال .. و سنبدأ بإرسال 3 ملفات في نفس اللحظة ..


[PHP]









[/PHP]

لمن لا يحب التكرار في أكواده يمكن استعمال حلقة التكرارfor
الفكرة ببساطة هنا : يمكننا تحديد عدد مرات التكرار بواسطة متغيرمعين .. ثم عمل حلقة التكرار بالطريقة المعتادة من أجل تكرار حقل file عدد مرات المتغير ..



[PHP]
$nbr_max = 3;

echo '
';
for($i = 1;$i <= $nbr_max;$i++)
{
echo'Numéro '.$i.' :
';
}
echo'
';
?>

[/PHP]

هنا انتهينا من كود الإرسال html

2 - معالجة الكود
في الحقيقة فإن المهم هنا هو تخزين الملف .. و يتم ذلك في سطرين ..
السطر الأول : رابط مجلد التخزين
السطر الثاني : دالة التخزين
رابط المجلد يلزمنا أولاً إنشاء مجلد جديد نسميه مثلاً upload ..
دالة التخزين .. بالنسبة لي أستعمل إحدى الدالتان اللتان تمكنان من التخزين
الأولى :
move_uploaded_file
الثانية : copy
الفرق بينهما أن الأولى تقوم بالتأكد من أن الملف محمل بطريقة HTTP POST و تقوم بنقله في المجلد .. الثانية تقوم بعمل نسخ للملف و نقله إلى مجلد التخزين هنا إذا كان الملف موجود فإنها تقوم بحذفه و نقل الجديد ..
طريقة استعمالهما بالنسبة لنا ..


[PHP]
move_uploaded_file($_FILES['images']['tmp_name'], $path . $_FILES['images']['name']);
[/PHP]

[PHP]
copy($_FILES['images']['tmp_name'], $path . $_FILES['images']['name']);

[/PHP]

الشطر الأول : الإسم المؤقت للملف
الشطر الثاني : المجلد و اسم الملف ..

أعتقد أننا في الرنين الآن (بين قوسين عبارة خاصة بي -- اللي فهمها يجاوبني) ..

المهم أننا وصلنا الآن إلى طريقة عمل ملف المعالجة



[PHP]
$path = dirname(__file__) . '/upload/';
move_uploaded_file($_FILES['images']['tmp_name'], $path . $_FILES['images']['name']);

[/PHP]


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


[PHP]
$path = dirname(__file__) . '/upload/';
for ($i = 0; $i < count($_FILES['images']['name']); $i++)
{
move_uploaded_file($_FILES['images']['tmp_name'][$i], $path . $_FILES['images']['name'][$i]);
}
?>

[/PHP]

count لحساب عدد الملفات المحملة ..
ما تبقى الآن هو العمل على الأخطاء و تخصيص السكريبت ..
مثلاً أود أن أحمل فقط الملفات بصيغة gif فما علي إلا طلب ذلك باستعمال أدات الشرط if ..
أو التأكد من الكليك على submit او وجود ملف محمل ..

3 - الكود كاملاً
صالح لجميع أنواع الملفات ..
سأضيف هنا حساب عدد الملفات المحملة و كذلك أسماء الملفات ..
من أجل تخصيص تحميل ملفات معينة

[PHP]

$nbr_uploaded =0;
$files_uploded = array();

if(isset($_POST['submit']))
{
$path = dirname(__file__) . '/upload/';
for ($i = 0; $i < count($_FILES['images']['name']); $i++)
{
if($_FILES['images']['name'][$i] != '')
{
move_uploaded_file($_FILES['images']['tmp_name'][$i], $path . $_FILES['images']['name'][$i]);
$files_uploded[] = $_FILES['images']['name'][$i];
$nbr_uploaded++;
}
}
echo ' Nombre de fichiers : '. $nbr_uploaded .'

Les fichiers :
'. implode('
', $files_uploded);
}

$nbr_max = 3;

echo '
';
for($i = 1;$i <= $nbr_max;$i++)
{
echo'Numéro '.$i.' :
';
}
echo'
';
?>


[/PHP]


4 - تطوير السكريبت
- يمكن إضافة عرض الملفات المحملة .
- إمكانية اختيار عدد الملفات المراد تحميلها
عن طريق عمل input text أو select option و اختيار العدد المراد تحميله
- إمكانيات أخرى من طرفكم .

أعلم أني أطلت كثيراً بالموضوع و لكن فقط لتفادي الأسئلة الكثيرة حول أمور تتعلق بالكود .



الدرس منقول


vpsvalley 25 - 07 - 2010 22:49

رد: درس التحميل المتعدد للملفات Multi upload
 
درس جميل جدا

قاهر الاعداء 25 - 07 - 2010 22:50

رد: درس التحميل المتعدد للملفات Multi upload
 
مـ ـشـ ـكـ ـور اخـ ـي الـ ـكـ ـريـ ـم وجـ ـزك الـ ـلـ ـة خـ ـيـ ـراً وتـ ـقـ ـبـ ـل مـ ـرـ ـوـ ـري

السامي 25 - 07 - 2010 23:31

رد: درس التحميل المتعدد للملفات Multi upload
 
درس رائع كنت ابحث عن اكواده منذ فتره مشكور اخي الكريم


الساعة الآن 15:22.

Powered by vBulletin Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd
ترقية وتطوير: مجموعة الدعم العربى
جميع الحقوق محفوظه لمدينة الاحلام ©


SEO by vBSEO