Mr.Ajax
مدونتى – أعمالى – سيرتى الذاتية
مدونتى – أعمالى – سيرتى الذاتية
11th
للمرة الأولى التى تقام بها تلك الأيام بالشرق الأوسط كانت مصر صاحبة المنطقة رقم واحد فى تلك الأيام
جاءت تلك الأيام فى الفترة من الثانى عشر حتى الرابع عشر من ديسمبر من عام 2010
أتيح لى حضور اليوم الثانى والثالث من المؤتمر ولكن لظروف خاصة لم استطيع التواجد باليوم الثانى
جاء اليوم الاول خاص بطلاب وأعضاء هيئة التدريس علوم الحاسب الالى
واليوم الثانى لمطورين الويب أما الثالث لأصحاب الاعمال الصغيره والعاملون بمجال التسويق
عن تقييمى لليوم الثالث انه كان رائعا ولكن كان يوجد الأفضل من ذلك
المكان : فندق Dusit Thani
فترة الانعقاد : من الساعه التاسعه والربع صباحا حتى الساعه السادسه مساء
بدأ اليوم بالتسجيل واستلام كل مشارك البطاقة التعريفية الخاصه به وتأكيد حضورة

ثم انتقنا لتناول وجبة الافطار وتبادل اطراف الحديث للمشاركين بعضهم البعض
فى تمام الساعه التاسعه والربع انتقلنا الى القاعة الرئيسية وقام المنظم العام Sebastian بالترحيب بنا والقاء اول كلمة لة باللغه العربية “مرحبا” ثم اكمل كلماتة بالانجليزية مع التعريف بجوجل ايجبت

فى الساعه التاسعه والنصف انتقلنا الى المحاضرة الثانية القاها الينا Ari Kesisoglu وكانت بعنوان keynote وكانت عبارة عن بعض الاحصائات عن جوجل وعن مستخدمى الانترنت فى الشرق الأوسط

فى الساعه العاشرة انتقلنا الى المحاضرة التاليه بعنوان Internet insights and trends in the Middle East وقام بالقاءها وائل غنيم

فى الساعه العاشرة والنصف الا خمس دقائق نتقلنا الى محاضرة فى الاوبن سورس والقاها Chris DiBona

انتقلنا بعد ذلك الى عيادة المواقع Introduction to Search & Site Clinic (live review of websites) وقام بالقائها Luisella Mazza and Adel Saoud وفيها تم استعراض بعض المواقع الخاصه بالحضور لتشخيصها لمحركات البحث ولحسن حظى تم تشخيص موقعى ( cr-house.com )

بعدها انتقلنا عبر باصات خاصه بالمؤتمر لأداء صلاة الجمعه وهذا من أشد ما أعجبنى فى جوجل وهو احترامهم لنا كمسلمين وتخصيص وقت لما للصلاة
ثم بعدها عدنا الى الفندق لتناول وجبة الغذاء ( ملحوظة : الغذاء كان شهى جدا )

فى الساعه الواحده والربع قدم لنا Sebastian محاضرة عن Google Analytics & Website Optimizer – The importance of testing

انتقلنا بعدها الى محاضرة فى Maps for business وذلك فى الساعه الثانيه ظهرا

ثم انتقلنا فى الساعه الخامسة الا الربع فى محاضرة بعنوان AdWords & AdSense – Advertise and make money

ثم انتقلنا الى فترة راحة قمنا بأداء صلاة الصر ثم قام البعض بالراحه او تبادل اطراف الحديث او اللعب

ثم انتقلنا الى محاضره مقسمة الى 3 أجزاء
الاول : Tips on entrepreneurship
الثانى :قصة نجاح صاحب موقع nefsak.com
الثالث : قصة نجاح صاحب شركة vimov وتجربتة الأكثر من ناجحه مع apple store




ثم انتقلنا الى محاضرة قام بها رجل أعمال مصرى عن نجاحاته واصراره والمخاطر للعمل

وأنهينا اليوم بأسئله وأجوبه بعنوان “From product to business”

وتلك بعض الصور الخاصة بى التى قمت بالتقاطها هناك



وهذا هو سرد لهؤلاء من قامو بامتاعنا بهذا اليوم
1 Nelson Mattos – VP, EMEA Product & Engineering
2 Ari Kesisoglu – Regional Manager, Middle East North Africa
3 Chris DiBona – Open source and public sector programs manager
4 Ahmad Hamzawi – Head of Engineering, Middle East/North Africa
5 AbdelKarim Mardini – Product Manager, Middle East/North Africa
6 Mohamed Elfeky – Senior software engineer
7 Basel Al-Naffouri – Software Engineer
8 David Renie – Software engineer
9 Boulos Harb – Senior software engineer
10 Jeremiah Kariuki – Geographic Specialist
11 William Kanaan – New Business Development Manager, Middle East and North Africa
12 Rania Hadi – Account Manager
13 Nicolas Garnier – Developer Programs Engineer
14 Ryan Brown – Software Engineer
15 Timothy Jordan – Developer Advocate
16 Noha Salem – University Outreach Specialist
17 Wael Ghonim – Marketing Manager, Middle East and North Africa
18 Luisella Mazza – Search Quality Senior Strategist
19 Adel Saoud – Search Quality Strategist
20 Paa Kwesi Imbeah – Partner Solutions Organization
21 Chewy Trewhella – New Business Development Manager
22 Sebastian Trzcinski-Clément – Developer / Industry Relations Lead, Middle East and North Africa
5th
اقدم اليكم اليوم درس خاص جدا ومتقدم .
الدرس يتحدث عن تخزين وحفظ الملفات بداخل قواعد البيانات MySql
بدلا من حفظها بداخل القرص التخزينى
ملاحظه : وصفى للدرس أنه متقدم لا يعنى أنه بدرجه عاليه من الصعوبه ولكننى أقصد ان فئه معينه فقط من المبرمجين الذين يستخدموا تلك الطريقه وهم المبرمجين الذين يقومون باستغلال أقصر الطرق وأفضلها والضين يحرصون على عدم فقدان البيانات الخاصه بهم .
ولذلك اذا كنت مبرمج مبتدئ أو متوسط يمكنك تطبيق الدرس وفهمه أيضا بكل سلاسه .
فوائدها :
1- الحفاظ على مساحة التخزين الخاصه بك بدون استهلاك مساحة المرفقات او الملفات التى تم رفعها 
2- الحفاظ على الملفات المرفوعه بدون فقدانها أو ضياعها
.
3- عندما تريد ان تقوم بأخذ نسخه احتياطيه من الموقع يكتفى بأخذ نسخة احتياطيه من قاعدة البيانات فقط فالملفات المرفوعه موجوده بقاعدة البيانات
.
4- كافة المشاريع المحترمه
تستخدم تلك الطريقه كطريقه متميزه فى الحفاظ على الملفات كسكربت VBulletin .
سكربت VBulletin يستخدم تلك الطريقه فى عملية رفع الملفات المرفقه والصور الشخصيه والصور الرمزيه .
الفكره الأساسيه :
من المعلوم ان قاعدة البيانات لا تسمح بتخزين الملفات بصوره مباشره بداخلها
ولذلك سنحول الملف الى نوع آخر من البيانات حتى يمكن ادخالها وتخزينها بقاعدة البيانات
ولذلك سنقوم بتحويل الملف الى صيغة البيانات BLOB .
خطوات التطبيق للدرس :
1- سنقوم أولا بتكوين قاعدة البيانات التى سيتم تخرين الملف بها وسيكون اسمها upload
بذلك الاستعلام :
CREATE TABLE upload ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL, type VARCHAR(30) NOT NULL, size INT NOT NULL, content MEDIUMBLOB NOT NULL, PRIMARY KEY(id) );
- سنقوم بتكوين الصفحة التى سيوجد بها الفورم الخاص بعملية اختيار المستخدم للملف المراد رفعه
وهذا الفوم يتطابق بشكل كلى مع الفورم الخاص برفع الملفات الى القرص الصلب والتى تستخدم فيها الطريقه البسيطه جدا لرفع الملفات والمنتشره درسها بالمعهد
سنقوم بتسمية الملف up.htm
<form method="post" enctype="multipart/form-data"> <table width="350" border="0" cellpadding="1" cellspacing="1"> <tr> <td width="246"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000"> <input name="userfile" type="file" id="userfile"> </td> <td width="80"><input name="upload" type="submit" id="upload" value=" Upload "></td> </tr> </table> upupupالملفات المرفقة</form>
3- سنقوم بتكوين الصفحه الخاصه بعملية تخزين الملف الى قاعدة البيانات والمسئوله عن قرائة الملف باستخدام الداله fopen والداله fread والتى تقوم أيضا بالاتصال بقاعدة البيانات وتنفيذ الاستعلام الخاص باضافة الملف الى قاعدة البيانات .
وسيكون محتواه هو :
<php
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}
$name = "root";
$pass = "";
$dbname = "upload";
$host = "localhost";
//connect with mysql
$link = mysql_connect($host,$name,$pass);
mysql_select_db($dbname,$link);
$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
mysql_query($query) or die(mysql_error());
echo "<br>File $fileName uploaded<br>";
}
?>
الى هنا سنكون قد اتممنا عملية ادخال الملف وتخزينه الى قاعدة البيانات .
__________________________________________________ ________
سنأتى الآن الى الخطوه المقابله لعملية الرفه وهى عملية التحميل
4- الملف down.php سيكون وظيفته هى الاتصال بقاعدة البيانات وعمل رص لأسماء الملفات فى عمود واحد وعند الضغط على أى ملف يتم استدعاؤه من قاعدة البيانات وتحميله .
وسيكون محتواه هو :
<php
$name = "root";
$pass = "";
$dbname = "upload";
$host = "localhost";
//connect with mysql
$link = mysql_connect($host,$name,$pass);
mysql_select_db($dbname,$link);
$query = "SELECT id, name FROM upload";
$result = mysql_query($query) or die('Error, query failed');
if(mysql_num_rows($result) == 0)
{
echo "Database is empty <br>";
}
else
{
while(list($id, $name) = mysql_fetch_array($result))
{
echo "<a href=down2.php?id=$id>$name</a> <br> ";
}
}
?>
5- الخطوه الأخيره وهى الخاصه باستدعاء الملف المطلوب واجراء العمليه العكسيه لعملية تحويل صيغة الملف الى BLOB وجعله فى صوره قابله للتحميل للمستخدم .ومحتواه سيكون كما يلى
<?php
if(isset($_GET['id']))
{
// if id is set then get the file with the id from database
$name = "root";
$pass = "";
$dbname = "upload";
$host = "localhost";
//connect with mysql
$link = mysql_connect($host,$name,$pass);
mysql_select_db($dbname,$link);
$id = $_GET['id'];
$query = "SELECT name, type, size, content " .
"FROM upload WHERE id = '$id'";
$result = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $content) = mysql_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $content;
exit;
}
?>
والى هنا ستكون قد أتتمت الدرس بنجاح وكاجمالا قمنا بعمل 4 ملفات هم :
1- up.htm : الخاص بتحديد المستخدم للملف المراد تخزينه بقاعدة البيانات .
2- up.php : الخاص بعملية تحويل الملف الى الصيغة BLOB وتخزينه بقاعدة البيانات .
4- down.php : الخاص بعملية صف الملفات لاختيار الملف المراد تحميله .
5- down2.php : الخاص باتمام عملية التحميل للملف الى جهازك .
مرفق مع الدرس ال4 ملفات الخاصه بالدرس جاهزه للتشغيل مباشرة واختبارها
الرابط للمرفقات : http://blog.mr-ajax.com/wp-content/uploads/2010/11/up.zip
أرجو أن أكون قد وفقت فى تقديم اليكم الدرس
منتظر أن أرى تفاعلكم وتطبيقاتكم وأسئلتكم واستفساراتكم فى الدرس .
قمت بكتابة هذا الدرس بمعهد ترايدنت بتاريخ : 07 – 05 – 2008 وتبعة نقل اما بواسطتى أو بواسطة الزوار الى المنتديات التطويرية
مع خالص تحياتى اليكم
Mr.Ajax