• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'progress'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 3 نتيجة

  1. السلام عليكم و رحمة الله وبركاته . هذا الدرس من سلسلة الدروس التالية لتعلم لغة php . رفع الملفات باستخدام لغة php . لا يكاد موقع يخلو من تمكين المُستخدم من رفع ملف من جهازه على الخادم كإرفاق ملف بأحد المنشورات أو رفع صورة شخصية ...الخ فسيكون موضوع هذا الدرس عن كيفية رفع الملفات الى الخادم باستخدام php بالإضافة الى تنسيق حقل رفع الملف وكيفية إظهار نسبة مئوية لتقدم رفع الملف ... نموذج HTML : في البداية عند إنشاء نموذج HTML يجب تحديد الطريقة post كالطريقة التي سيتم ارسال البيانات فيها , بالإضافة الى وضع ترميز النموذج "multipart/form-data" بدلا من الترميز الإفتراضي "application/x-www-form-urlencoded" كمثال على ذلك , نموذج HTML البسيط التالي : <form action="file_upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file1"> <input type="submit"></form>لاحظ نوع الحقل type="file" في الوسم input . المصفوفة $_FILES : تُخزن هذه المصفوفة معلومات عن الملف أو الملفات التي تم رفعها الى الخادم . و بشكل عام هذه الصفوفة ثنائية البعد (تم التطرق الى المصفوفات متعددة الأبعاد في درس المصفوفات و الدوال) حيث يُعبر البعد الأول عن اسم حقل الملف المُحدد في حقل الملف في نموذج HTML (سيتم اعتماد file1 كأسم لحقل الملف في الأمثلة القادمة) . أما البُعد الثاني , فيوفر معلومات عن اسم الملف أو حجمه أو نوعه أو رسالة الخطأ في حال وجودها ... - القيمة $_FILES['file1']['name'] : يُحدد هذا المتغير اسم الملف الأصلي كما هو في جهاز المستخدم . - القيمة $_FILES['file1']['size '] : كما هو واضح من الأسم , تُحدد هذه القيمة حجم الملف الذي تم رفعه مقدرا ً بالبايت , لذا قد تحتاج الى قسمة هذا الرقم على 1024 أو 1024^2 للحصول على حجم الملف مقدرا ً بالكيلوبايت أو الميغابايت على التوالي . - القيمة $_FILES['file1']['type'] : تُحدد هذه القيمة ما يُسمى MIME type للملف الذي تم رفعه , فمثلا ً تكون قيمة MIME type لملف من صيغة png : image/png , أو لملف pdf : application/pdf , ملف مضغوط من نوع zip : application/zip ... - القيمة $_FILES['file1']['tmp_name'] : تُحدد هذه القيمة اسم الملف المؤقت المُخزن على الخادم , وسيتم استخدام هذه القيمة كثيرا ً عند استدعاء الدوال الخاصة برفع الملفات كما سنرى لاحقا ً . - القيمة $_FILES['file1']['error'] : لا يمكن أبدا ً ضمان سير عملية رفع ملف على الخادم بشكل صحيح , وبعض الأحيان تكون هنالك مشكلة في رفع الملفات و من المُفيد معرفتها و تبليغ المستخدم عن سبب الخطأ , حيث تُعيد القيمة $_FILES['file1']['error'] رقم رسالة الخطأ أو الثابت الموافق لها . و هذه اشهرها : الرقم 0 UPLOAD_ERR_OK : يُعيد المتغير $_FILES['file1']['error'] هذه القيمة عندما تتم عملية رفع الملف بنجاح دون أي أخطاء . الرقم 1 UPLOAD_ERR_INI_SIZE : يُعيد المتغير $_FILES['file1']['error'] هذه القيمة عندما يتم رفع ملف حجمه يتجاوز الحجم المسموح به المُحدد بالراية upload_max_filesize الموجودة في ملف php.ini . الرقم 3 UPLOAD_ERR_PARTIAL : يتم إعادة هذه القيمة عند رفع جزء من الملف وعدم تكمن من رفعه كاملا ً كحدوث مشكلة في الشبكة ... الرقم 4 UPLOAD_ERR_NO_FILE : يتم إعادة هذه القيمة عندما يقوم المُستخدم من ارسال نموذج HTML دون تحديد ملف لكي يتم رفعه . وبالطبع يمكن التحقق من رسالة الخطأ أما باستخدام الأرقام أو بمساواتهم بالثوابت السابقة , مثال يقوم بطباعة حالة رفع ملف : <?phpswitch ($_FILES['file1']['error']){ case UPLOAD_ERR_OK: echo "File uploaded succesfuly"; break; case UPLOAD_ERR_INI_SIZE: echo "Uploaded File is too big"; break; case UPLOAD_ERR_PARTIAL : echo "File is not completely uploaded"; break; case UPLOAD_ERR_NO_FILE : echo "No File was Selected"; break; default: echo "UnKnown Error"; break;}?>و يقوم متصفح المُستخدم بارسال اسم الملف الأصلي ونوعه في HTTP header , وبالتالي فليس من المُفضل التحقق من نوع الملف عن طريق $_FILES['file1']['type'] و عوضا ً عن ذلك نقوم بإستخراج إمتداد الملف والتحقق منه . دوال رفع الملفات : التحقق من رفع ملف : يتم تمرير وسيط وحيد هو الأسم المؤقت للملف الذي تم رفعه الى الدالة is_uploaded_file للتأكد من رفعه , تُعيد هذه الدالة true في حال تم رفع الملف و false عدا ذلك , شكلها العام : is_uploaded_file($filename);نقل الملف : نستخدم الدالة move_uploaded_file لنقل ملف تم رفعه الى مجلد مُعين تقبل هذه الدالة وسيطين : الوسيط الأول هو اسم الملف المؤقت و الثاني هو المسار الهدف الذي سيتم نقل الملف إليه . شكل الدالة العام : move_uploaded_file($tmp_name, $distination);يمكن ان يكون قد خطر ببالك استخدام احدى الدالتين copy لنسخ الملفات أو rename لنقل الملفات اللتان تم شرحهما في درس التعامل مع الملفات و المجلدات لنسخ أو نقل الملفات التي يتم رفعها على الخادم , يمكنك استخدامهم لكن لغة php دوال أكثر أمانا ً , مثال عن رفع ملف : <html> <head> </head> <body> <form action="index3.php" method="post" enctype="multipart/form-data"> <input type="file" name="file1"> <br> <input type="submit"> </div> </form> </body></html>و يتوجب وجود مجلد باسم upload على سبيل المثال لكي يتم نقل الملفات المرفوعة عليه (لا تنسى تحديد الصلاحيات المناسبة) كود صفحة file_upload.php : <?php$explode = explode('.', $_FILES['file1']['name']);$ext = $explode[count($explode) - 1];if($ext != 'png'){ echo "Only PNG images can be uploaded"; exit();}if(is_uploaded_file($_FILES['file1']['tmp_name'])){ $result = move_uploaded_file($_FILES['file1']['tmp_name'], 'upload/'. basename($_FILES['file1']['name'])); echo $result === true ? 'File uploaded successfuly' : 'There are some errors';}else{ echo 'No File uploaded';}?> وبالطبع يجب أن يكون هناك مجلد باسم upload (لا تنسى تحديد الصلاحيات المُناسبة) , و يُفضل استخدام الدالة basename عند الاشارة الى الاسم الأصلي للملف . رفع عدة ملفات : إن لغة php تدعم ما يُسمى HTML arrays لذا يمكن استخدام هذه الميزة لرفع عدد من الملفات سوية ً , و عندها ستكون مصفوفة $_FILES ثلاثية الابعاد حيث سيكون البُعد الثالث هو رقم حقل الملف ويبدأ العد - كالعادة - من القيمة صفر حيث يكون اسم الملف الاصلي لأول حقل ملف هو : $_FILES['file']['name'][0] وللملف الثاني $_FILES['file']['name'][1] ... الخ , ويكون نموذج HTML كالتالي : <form action="file_upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file[]"> <br> <input type="file" name="file[]"> <br> <input type="file" name="file[]"> <br> <input type="file" name="file[]"> <br> <input type="submit"></form>و سنقوم بطباعة محتويات المصفوفة $_FILES في الصفحة file_upload.php التالية : <?phpprint_r($_FILES);?>تنسيق حقل رفع الملف : اذا قمت َ سابقا ً بمحاولة تنسيق حقل لرفع ملف , فمن المؤكد من أنك قد لاحظت عدم توفر عدد كبير من الخيارات . فعلى سبيل المثال لا يمكنك تغيير كلمة browse .. و لا يمكنك تغيير أبعاد الحقل ...الخ , وللإلتفاف على هذه الإشكالية يمكن استخدام الطريقة التالية : في البداية نقوم بانشاء حقل نص و زر عادي و من ثم نقوم بجعل حقل رفع الملف فوقهم (باستخدام خاصية z-index في css) وجعل حقل الملف شفاف تماما ً ونقوم بتنسيق حقل النص العادي و زر التصفح كما نُريد , في المثال التالي سنقوم بتغيير بسيط باستبدال كلمة browse .. بالكلمة Add File :   <html> <head> <style> * { padding:0px; margin :0px; } #realupload { position:absolute; top : 0px; left: 0px; opacity:0; -moz-opacity:0; -webkit-opacity:0; -o-opacity:0; z-index: 2; } </style> </head> <body> <form> <div stlyle="position:relative;"> <input type="text" id="text_field"> <input type="button" value = "Add File"> <input type="file" name="upload" id="realupload" onchange="document.getElementById('text_field').value = this.value;"> </div> </form> </body></html>ولتغيير قيمة حقل النص تلقائيا ً عند تحديد ملف , قمنا بوضع سطر javascript التالي في خاصية onchange   document.getElementById('text_field').value = this.value; طريقة جميلة أليست كذلك :) انشاء حقل تقدم رفع ملف : في السابق كان مطورو الويب يستخدمون تقنية الفلاش لإظهار تقدم رفع الملفات للمستخدم , أما مؤخرا ً فقد ظهرت مكتبة php تدعم هذه الميزة تُسمى APC تدعم هذه الميزة , ولكن لا يمكن تنصيب مكتبة APC على إصدارات php اقل من 5.2 , وإفتراضيا ً لا تأتي هذه المكتبة مدمجة مع php بشكل إفتراضي , لذا تحتاج الى اضافتها يدويا ً (أو بالطبع الطلب من شركة الإستضافة إن وافقت) . أما في إصدار php 5.4 الذي تم إصداره في 2012-03-01 فأصبح يوفر ميزة Session Upload Progress بشكل إفتراضي دون أية إضافات وتأتي مُفعلة إفتراضيا ً في ملف php.ini . وسيتم اعتماد Session Upload Progress في أمثلتنا القادمة . في البداية يجب تضمين حقل مخفي hidden في نموذج HTML قبل حقل رفع الملف ويجب ان يكون خاصية name لهذا الحقل مساوية لقيمة الراية session.upload_progress.name الوجودة في ملف php.ini لذا سنستخدم الدالة ini_get للحصول عليها , ويمكن وضع أي قيمة (value) تريدها لهذا الحقل , كما في المثال التالي :   <form action="php_upload.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="file1_upload"> <input type="file" name="file1"> <input type="submit"></form> مصفوفة المعلومات حول تقدم رفع الملف موجودة في مصفوفة $_SESSION :   <?php$key = ini_get("session.upload_progress.prefix") ."file1_upload";print_r($_SESSION[$key]);/*Example when uploading big file like iso image of ubuntuArray( [upload_progress_123] => Array ( [start_time] => 1362916055 [content_length] => 705999396 [bytes_processed] => 247534688 [done] => [files] => Array ( [0] => Array ( [field_name] => file1 [name] => ubuntu-11.10-alternate-i386.iso [tmp_name] => [error] => 0 [done] => [start_time] => 1362916055 [bytes_processed] => 247534364 ) ) ))*/?>  ويجدر بالذكر بأن المصفوفة السابقة سيتم حذفها فور الإنتهاء من رفع الملف , فسوف نحتاج الى استخدام تقنية ajax للحصول عليها . ملاحظة : اذا اردت تجربة الأمثلة التالية على خادم محلي فيتوجب عليك زيادة قيم الرايتين "post_max_size" و "upload_max_filesize" للتمكن من رفع ملفات كبيرة الحجم , لأن الملفات الصغير تُرفع بشكل سريع ولا يُمكنك ملاحظة شريط التقدم . ملاحظة : حسب تجربتي ; يوجد عدد من المشاكل لدى محاولة استخدام ajax في أثناء رفع الملف في بعض المتصفحات , لذا سأقوم بوضع نسبة التقدم في اطار منفصل iframe . ملف form.php الذي يحوي على نموذج رفع الملف :   <?phpsession_start();?><!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>File uploading Example</title> </head> <body> <form action="php_upload.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="file1_upload"> <input type="file" name="file1"> <input type="submit"> </form> <iframe src="progress.html" style="border: 0; width: 500px"></iframe> </body> </html> اما ملف php الذي سوف يطبع النسبة المئوية لتقدم رقع الملف php_progress.php :   <?phperror_reporting(0);session_start();$key = ini_get("session.upload_progress.prefix") . 'file1_upload';if(isset($_SESSION[$key]['bytes_processed']) AND $_SESSION[$key]['bytes_processed'] != 0){ $file_uploaded = true; echo round($_SESSION[$key]['bytes_processed'] / $_SESSION[$key]['content_length'] * 100); }elseif($file_uploaded === true AND $_SESSION[$key]['bytes_processed'] == 0){ echo 100;}?> قمنا بمنع عرض الأخطاء في الصفحة تفاديا ً لحصول مشاكل في ajax , ملف progress.html الذي يستخدم تقنية ajax للحصول على نسبة التقدم :   <?phpsession_start();?><!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>File uploading Example</title> <script type="text/javascript"> window.setInterval(ajax, 1000); function ajax() { req = new XMLHttpRequest(); req.open("post", "progress.php"); req.send(); req.onreadystatechange=function() { if (req.readyState==4 && req.status==200) { document.getElementById("progress").innerHTML=req.responseText; document.getElementById("progress").value =req.responseText; } } } </script> </head> <body> <progress max="100" value="0" id="progress"></progress> </body> </html>استخدمت وسم HTML5 المُسمى progress الذي يقبل خاصيتين max وهي القيمة الأعلى و value هي القيمة الحالية . وبعض المتصفحات لا تدعم HTML5 و يمكن ببعضة أسطر انشاء طريقة بديلة لهذه الطريقة . ولتحميل المثال السابق : file_upload_progress.zip       الدرس السابق | الإنتقال للموضوع الأساسي
  2. السلام عليكم ورحمة الله وبركاته لدي قاعدة بيانات منذ 1999 وكانت مربوطه ببرنامج يعمل على ms-dos وقد قررت الشركة التي اعمل بها ان تحدث من برامجها، وقد طلب مني ان استخرج البيانات من قاعدة البيانات هذه الى اصدار احدث من قواعد البيانات )مثلا sql او access( ، حاولت بشتى الطرق ان احول قاعدة البيانات ببرامج معينة مثل fullconvert او sqlways ولكن لا فائده من ذلك ايضا قمت بالبحث عن نوع القاعده في الانترنت وقد تبين لي انها قد تحتمل عدة انواع، فلم اجد جوابا شافيا لطريقة فتحها او استخراج المعلومات منها. امتداد قاعدة البيانات .db وياتي معها ملفان امتداد الاول .lg والثاني .bi ملفات القاعده http://www.4shared.com/zip/6VFCm3lQce/data.html ارجو الافاده
  3. السلام عليكم ورحمة الله وبركاته      اريد معرفة طريقة ربط الـ Progress Bar  بكود الاستعلام  مثلاً  مثلاً عند عمل استعلام معين يظهر Progress Bar وبعد ذلك تظهر النتائج  ولكن اريد ان يكون تحميل ال Progress bar متزامن مع توقيت استدعاء البيانات وليس انا من اقوم بتحديده   رجاء المساعده وشكرااا