دورة PHP للمستوى المتقدم 101
سنتطرق بهذه الدورة الى مفاهيم تنسيق الشفيرة البرمجية وكيفية التحكم بالأخطاء بشقيها الداخلية والخارجية .. بالإضافة الى التعرف على هجمات ال XSS والثغرات الأمنية ..وتجنبها ...
يمكنك الإطلاع على الدورة كاملة مع ملفات الأمثلة من هنا
2nees.com
(دورة مجانية)
1. بسم الله الرحمن الرح مٌ
دورة PHP لما بعد المستوى المبتدئ
تقد مٌ : أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
دورة مجان ةٌ للجم عٌ, لا جٌوز استخدامها للأغراض التجار ةٌ ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
2. المقدمة
الحمد لله الذي بحمده تتم النعم, الحمد لله رب العالم نٌ..
بفضل من الله تعالى وتوف قٌه أبدأ ال وٌم دورة جد دٌة. وه دورة PHP لما بعد المستوى المبتدئ,ف هذه الدورة
إن شاء الله, سنقوم بالترك زٌ على المرحلة الثان ةٌ من
مراحل التطور لمبرمج نٌ ال PHP , كث رٌ منا
وللأسف لم نعلم ك فٌ ومتى وأ نٌ مٌكن البدء والتعلم
لاكتساب مهارات جد دٌة غ رٌ الأمور الاساس ةٌ الت نتعلمها بكثرة, وف كث رٌ من الأح اٌن ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
3. المقدمة
كطلاب أو كمبرمج نٌ ف أول الطر قٌ نكتف بالأمور الاساس ةٌ , أو بالأمور الت تنتج
المشار عٌ الت نرغب ...ولكن أغلب هذه المشار عٌ ف هٌا من نقاط الضعف الكث رٌ , والت لا مٌكن تجاهلها , مع صعوبة كب رٌة ف تحد ثٌ هذه المنتجات , أي أنه ف الغالب ل سٌت
توافق ةٌ ولا مرنة ولا آمنة...
وهنا بإذن الله تعالى , سنحاول معا أن نرتق قل لٌا لنكون قر بٌ نٌ من الانتقال الى المستوى
المحترف للبرمجة ف لغة ال PHP ...
هذا المستوى بٌدأ من بعد الانتهاء من مفاه مٌ ال OOP , وهذا لا عٌن ذلك أنك اذا لم تصل
مستوى ال OOP أنك لن تستط عٌ قرابتها ...ولكن السبب ف ذلك هو أن الكث رٌ تٌوقف
عند هذه المرحلة ..ولا سٌتط عٌ أن تٌابع التطور لمهاراته البرمج ةٌ ...
وفقنا الله وإ اٌكم الى خ رٌ العمل ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
4. القناعــة .. راس الغنى :
رأ تٌ القناعة رأس الغنى ..... فصرت بأذ اٌلها متمسك
فلا ذا رٌان على بابه ..... ولا ذا رٌان به منهمك
فصرت غن اٌ بلا درهم ..... أمر على الناس شبه الملك
للإمام الشافع رحمه الله..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
6. Coding Style
عل كٌ أن تعلم عز زٌي المبرمج, أنك مهما امتكلت من
تقن اٌت برمج ةٌ, ومهارة ف استخدام ال PHP Syntax
أو PHP Function .. فان هذا لا عٌن أنه ج دٌ, وهذا
لا عٌن أن المبرمج نٌ الآخر نٌ أو أنت بنفسك
..ستستط عٌ التطو رٌ أو التعد لٌ على ما كتبت من كود..
جٌب عل كٌ عز زٌي المبرمج أن تقوم بعمل اندماج ب نٌ
الكود الخاص بك , وطر قٌة كتابة هذا الكود ... ل صٌبح
كود سهل, مرن ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
7. Coding Style معلومات عالطا رٌ
أولا: عل نٌا أن نعلم أنه لا وٌجد معا رٌٌ مثال ةٌ لطر قٌة
تصم مٌ الكود بشكل جذاب ... نعم لا وٌجد معا رٌٌ
مثال ةٌ, ولكن هناك أسال بٌ اتفق عل هٌا ل سٌ رٌ عل هٌا
المبرمج نٌ, لتعط جانب من المثال ةٌ, مقترنة بإسلوب
كل مبرمج, وك فٌما فٌضل المبرمج ذلك , فهو نٌدرج
تحت احدى الأسال بٌ ...
ثان اٌ: جٌب أن تعلم , أنه جٌب عل كٌ كتابة الكود بأبسط
أسلوب ممكن, وهذا لا عٌن أن كٌون بس طٌ بقدر لا
نٌفذ احت اٌجته , أو أن لا قٌوم بوظابفه ..أو أن صٌبح
غ رٌ قابل للتطو رٌ .... بس طٌ ولكن مرن
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
8. لنبدأ معا - 1 - Coding Style
عند تصم مٌ أي كود , جٌب عل كٌ مراعاة النقاط التال ةٌ:
المسافة البادبة
طول السطر
الفراغات
مراعاة البن ةٌ الترك بٌة والطر قٌة القواعد ةٌ لل ال SQL
هذه الأمور ه الأهم , وه من الأسال بٌ الت تعط جانب من المثال ةٌ ف كتابة الكود ...
*( بعد معرفة هذه النقاط ..سننطلق الى مستوى آخر ف تصم مٌ الكود ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
9. المسافة البادبة Coding Style
المقصود بالمسافة البادبة, ه تلك المسافة الت تسبق
أي سطر برمج ... وه مهمة جدا, رغم بساطتها,
فه تعط سهولة رابعة ف تتبع الكود, واكتشاف
الأخطاء حتى والكث رٌة الش وٌع –مثل نس اٌن وضع {
ف نها ةٌ block مع نٌ - , والآن سنرى مثال نٌ , الأول
س كٌون بدون علامات بادبة والآخر بها ... ولاحظ
أ هٌما أسهل بالقرابة والفهم ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
12. المسافة البادبة Coding Style
الآن بالنسبة للمسافة البادبة ..ورأ نٌا طر قٌة استخدامها ..وفابدتها الرابعة ..مع
بساطتها ...
عل كٌ ان تعلم انه هناك أنواع لها :
الأول : Hard Tab : عندما تقوم بالضغط على زر tab س ظٌهر مسافة مع نٌة,
تختلف من محرر نصوص الى آخر, وتكمن س بٌته ف هذه النقطة...
الثان :ً Soft Tab : أ ضٌا نٌطلق عن الضغط على زر Tab ولكنك هنا تكون قد
قمت باعداده على وضع عدد مع نٌ من الفراغات .. وهنا كٌون الطول عبارة
عن فراغات ..لذلك لا تٌأثر من محرر نصوص الى آخر ...وف الغالب فٌضل
استخدام هذا النوع.
الثالث: Spaces : عند استخدامك لل Spaces العاد ةٌ فهذا عٌن ازاحة بمقدار
فراغ واحد فقط ... وهو ثابت لا تٌغ رٌ ... )و مٌكن اعتبار Soft tab نٌدرج
تحت هذا المسمى ..ولكن مع شرط الضغط على زر Tab ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
13. طول السطر Coding Style
عندما كٌون السطر البرمج طو لٌ جدا , فإنه صٌعب
تتبعه وقرابته , وهذا قد سٌبب مشكلة ..ق تتبع الكود,
قرابته, بالاضافة الى شعور بالملل خصوصا ف وجود
العد دٌ من الأسطر الت تكون بهذا الشكل ..
لذلك تذكر دابما أنه عل كٌ فصل السطر الطو لٌ الى
عدة أسطر ... وهذا جٌعل من الكود الخاص بك
...سهل وسلس للقرابة ... لننظر الفرق ب نٌ الكتابة
بسطر واحد وعدة أسطر ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
14. طول السطر Coding Style
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
15. طول السطر Coding Style
طبعا ...وبشكل عام لا تدع السطر البرمج تٌجاوز ال
80 حرف مع فراغ ...
وذلك لأن معا رٌٌ ال وٌنكس مثلا تستقبل 80 حرف
لغا اٌت الطباعة , وإن تجاوز هذا العدد ..تصبح
الخطوط عن الطباعة غ رٌ قابلة للقرابة ...
عل كٌ ان تراع ذلك بالنسبة للمبرمج نٌ من ح ثٌ
القرابة , وبالنسبة لتعامل البرمج اٌت المخلتفة مع طول
الأسطر ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
16. إن ب تٌا خٌلو من كتاب هو ب تٌ بلا روح
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
17. الفراغات Coding Style
نعم , الفراغات ...لا تتعجب من ذلك ...
تلعب الفراغات دورا كب رٌا جدا ف الترك بٌة المنطق ةٌ
للكود , ودورها كب رٌ ف تبس طٌ وتسه لٌ الرؤ اٌ لأي
كود قد قمت بكتابته ...
ان استغلالك السل مٌ لهذه الفراغات ...س جٌع من الكود
الخاص بك ...رابع المنظر وسهل القرابة ..
والآن لننظر الى أمثلة توضح ذلك ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
19. Coding Style *SQL*
نحن نعلم أن ال SQL ...تستخدم بكثرة جدا حول العالم
وف تطب قٌات ولغات برمجة كث رٌة ... ومن ضمنها ال
PHP ... ونعلم أن لل SQL ..مجموعة قواعد خاصة
للكتابة بها ..وأمور أخرى تسهل عل نٌا قرابة جمل
الاستعلام الخاصة بها ..وكما نعلم فإن ال SQL تحتوي
على جمل استعلام معقدة ..وهذا قد شٌكل خوف لدى
الكث رٌ من المبرمج نٌ من كتابتها بشكل سهل للقرابة
..ول سٌ عدم علمهم ..وهذا ش ءً خاطا ..جم عٌ ما قد
ذكرناه سابقا .. مٌكننا استخدامه ف التعامل مع أوامر ال
SQL داخل ال PHP ... لنرى ذلك بمثال عمل ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
22. سٌتط عٌ الش طٌان أن كٌون ملاكاً والقزم
عملاقاً والخفاش نسراً والظلمات نوراً
. . لكن أمام الحمقى والسذج فقط .
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
24. Coding Style -2-
تحدددثنا فدد المسددتوى الأول عددن الأمددور الرب سٌدد ةٌ
التددد تمثدددل الكدددود بشدددكل عدددام ..فددد أي مكدددان داخدددل
المحرر ..والآن سننطلق الى جزب ةٌ أخرى ...وقد قمدت
بفصلها لغا اٌت التطب قٌ ...أي بعدد تطب قٌدك وتنف دٌذك لمدا
جاء ف Coding Style -1- ... باستطاعتك أن تكمدل
..وهذا ش ءً مهم للتعلم ..عل دٌك بتطب دٌق مدا قدرأت حتدى
لا تدددددددددددددددددددددددددذهب قرابتدددددددددددددددددددددددددك سددددددددددددددددددددددددددى ...
والآن لنبدأ مع الجزء الثان ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
25. Coding Style -2-
الجمل الشر طٌة والدوران ...
جم عٌنا عٌلم ما ه الجمل الشرط ةٌ, وما هو الدوران
..ولكن ك فٌ تٌم تنس قٌ هذه الأجزاء ؟ ...وك فٌ مٌكنن جعلها أسهل بالقرابة والتعد لٌ ...الخ
هذا ما سنج بٌ عنه بإذن الله تعالى ..
ف لغة ال PHP .. مٌكنك كتابة الجملة الشرط ةٌ
بالشكل التال :ً
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
26. Coding Style -2-
إن قمت بتدق قٌ النظر ف الكود السابق ..فستلاحظ أن
الجملة الشرط ةٌ جابت بدون استخدام ..وهذه الص غٌة
..مع أنها متاحة بال PHP ...الى أنها غ رٌ محبذة
..والصح حٌ أن تقوم باستخدام جملة الشرط أو الدوران
مع {} – Braces -- ...وهذا جٌعل العمل ةٌ التنظ مٌ ةٌ
أسهل , وأسرع للفهم والتعد لٌ...
لاحظ طر قٌة الكتابة الصح حٌة ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
27. Coding Style -2-
لكن الآن ..وبعد انتهابنا من النقطة الأولى ...هل
مٌكنن وضع {} ..أ نٌما أشاء ؟؟!! ..
الجواب : هناك ثلاثة تصام مٌ لطر قٌة ترت بٌ ووضع ال
Braces ..
1 ( ال BSD : توضع ال Braces هنا على أسطر
منفصلة تحت كلمة الشرط مباشرة ...مثال:
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
28. Coding Style -2-
2 ) لا GNU : تكون هنا ال Braces أ ضٌا أسفل
الجملة الشر طٌة ..ولكن مع مسافة قل لٌة ..بح ثٌ تأت ال Braces ب نٌ كلمة الشرط و الشرط ..مثال:
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
29. Coding Style -2-
3 ) لا K&R : بهذا التصم مٌ .. كٌون ال Braces ف نفس السطر مع جملة
الشرط ...مثل:
والآن السؤال القوي ^_^ : أي التصام مٌ هو الأفضل ؟؟!!
والجواب بكل بساطة ...رح ندخل بنقاش لن نٌته ..استخدم التصم مٌ ال بعجبك
... لكن شخص اٌ ..أفضل ال K&R ... هو الأروع بالنسبة ل ..
وأستخدم ال BSD عند استخدام ال Function وهذا جٌعل من الكود الخاص ب سهل القرابة ...لنشاهد مثالا ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
30. Coding Style -2-
*( هذا التصم مٌ الذي أحب استخدامه .... وأنت لك الخ اٌر ف أسلوبك ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
31. Coding Style -2-
لا نع ملكتنس نلآاو coding style لجمل الدوران ..
كث رٌ منا وللأسف قد لا جٌد فرقا ف استخدام أي جملة
دوران ..لاتمام المهمة ..ومع أن هذا غ رٌ خاطا قواعد اٌ
...لكنه خاطا منطق اٌ ..وإلا ..فلماذا تم انشاء هذه الجمل
..فكنا اكتف نٌا بجملة دوران واحدة وانته نٌا ؟!
لكل جملة دوران ..مكان فٌضل استخدام ص غٌة ولا فٌضل
استخدام آخرى ..وهذا جٌعل الكود أسهل ف التعد لٌ
واضافة الشروط مثلا ...وأسهل ف القرابة ومعرفة
المحتوى من الدوران ..بشكل أسرع ..والآن لننظر ونقارن
ب نٌ While –For -Foreach ^_^ ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
32. Coding Style -2-
لا While : بالنسبة لجملة الدوران هذه ...فلا تستخدمها اذا أمكن
اسددتخدام ال For أو Foreach ..وهددذا شدد ءً مهددم ... وهنددا لا
أنفدد أن جملددة الدددوران هددذه مهمددة ..ولكددن هندداك أولو دٌدة لترت دٌدب
الكدود بح دٌدث ظٌهددر بشدكل أفضددل... هددذه الجملدة كٌثددر اسددتخدامها
عند عدم المعرفة متى س نٌته الدوران ..بشدكل خداص ..فأحتاجده
أن سٌتمر حتى حدوث أمر مع نٌ ..أو الوصدول الدى Null ...الدخ
..مف دٌة جدا ف التعامل مع ناتج استرجاع جمدل الاسدتعلام لقواعدد
الب اٌندددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددات ...
طبعا لماذا قلنا أنه فٌضل استخدام for & foreach اذا أمكن ذلك
...السددبب فدد درجددة التعق دٌدد ..لأنددك ان احتجددت الددى كتابددة شددرط
داخل جملدة الددوران هدذه ..سد زٌ دٌ بشدكل ملحدوظ مسدتوى التعق دٌد
وصعوبة التتبع ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
33. Coding Style -2-
ال For : جملددة الدددوران هددذه تسددتخدم فدد حالددة معرفددة
البدا ةٌ والنها ةٌ لجملة الدوران ...جملة الدوران هذه أقل
درجدددة مدددن التعق دٌددد فددد حدددال تحقدددق هدددذا الشدددرط ...
ال Foreach : جملددة الدددوران هددذه راااابعددة جدددا ^_^
..لكددن فدد التعامددل مددع المصددفوفات .. اذن هددذه الجملددة
نسدددتخدمها فددد حدددال وجدددود مصدددفوفات ..ولا نسدددتخدم
ح نٌها ال For أو while .. لأن أدابها أفضل ف ذلك ..
والآن لنرى مجموعة من الأكواد كأمثلة .....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
35. Coding Style -2-
مددن الأمددور الج دٌددة أ ضٌددا ..اسددتخدام ال Break & continuoue ... وذلدددك ج دٌددد جددددا بالنسدددبة لدددلأداء ..
فلمدداذا مددثلا أقددوم باكمددال الدددوران اذا وصددلت الددى ق مٌددة
مع نٌددة –وهدد التدد أحتاجهددا – مثددل لمددا احكدد بدددي 3
أعداد زوج ةٌ فٌصدل ب نٌهمدا 4 أرقدام ...مجدرد مدا لق دٌت
ال 3 أعددددداد ..أقددددوم بانهدددداء الدددددوران ..وهددددذا منطق دٌدددا
أفضل..واستغلال للمصادر المتاحة بشكل أكبر..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
36. تجنب الحلقات المتداخلة Coding Style -2-
لتجعل أداء الكود الخاص بك ..أفضل .. حاول قدر
الامكان ..التقل لٌ من استخدام الحلقات المتاخلة –مثل
استخدام InsteadLoop - .... وهنا لا أنف استخدامها ...فه تلعب دورا مهما ف كث رٌ من
الأح اٌن ..لكن هناك مواقف لا داع لاستخدامها
..والعد دٌ منا إما للعجلة أو عدم الانتباه .. لا رٌعى لها
بالا ... لنرى مثالا ..عن أخطاء مٌكن أن نقع بها
^_^...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
39. مددددددددددددددددددددددددددن مكددددددددددددددددددددددددددارم الأخددددددددددددددددددددددددددلاق .... قددددددددددددددددددددددددددال :
لما عفدوت ولدم أحقدد علدى أحدد ..... أرحدت نفسد مدن هدم العدداوات
إنددد أح دٌدد عددددوي عندددد رؤ تٌددده ..... لأدفدددع الشدددر عنددد بالتح دٌددات
وأظهر البشر للإنسان أبغضه ..... كما إن قد حشى قلب مودات
الإمام الشافع رحمه الله ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
41. توض حٌ الأسماء Coding Style -2-
لاحظ ف المثال الصح حٌ ... أنن عندما قرأت اسم الفنكشن ..علمت أنه س رٌجع مصفوفة ..
وس سٌتقبل متغ رٌ مٌثل حجم مع نٌ ...وال retval ..تعن المتغ رٌ الذي س حٌوي النتابج من العمل ةٌ
.... هل لاحظت سهولة التحل لٌ ..ب نٌ الأول والثان ^_^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
42. المتغ رٌات Coding Style -2-
كما نعلم جم عٌا أن هناك Scope .. لكل متغ رٌ ..خارج
هذا ال Scope )نطاق( لن تستط عٌ الوصول ال هٌ .. عٌتبر
متغ رٌ م تٌ %_@... هذا موضوع معروف ..لكن ما
سأرغب ف ذكره ال وٌم هنا هو الآت .. مٌكننا تقس مٌ ح اٌة
المتغ رٌ الذي نقوم بتعر فٌه الى 3 أقسام, وه :
1 ) Truly-Global : وهو المتغ رٌٌ الذي عٌ شٌ لفترة
طو لٌة وف مساحة كب رٌة جدا من الكود الذي قد قمت
بكتابته ...أي مٌكنك استخدامه و نٌ ما تروح –ف الغالب-
ولكن هذا الأمر ل سٌ بج دٌ ...وعل كٌ تجنبه وذلك بسبب...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
43. المتغ رٌات Coding Style -2-
السبب الأول: هذا المتغ رٌ ..بما أنه عٌمل بأغلب
السكربت الذي قمت بكتابته ..فهذا عٌن أنه تٌعرض
لكث رٌ من التعد لٌ والتغ رٌٌ لق مٌته ..وهذا جٌعل أمر تتبع
ق مٌته ..أمرا صعبا .
الثان :ً إذا قمت بتعر فٌ متغ رٌ اسمه $X مثلا
..واستخدمت NameSpaceLib ..وكانت تستخدم
هذه المكتبة نفس اسم المتغ رٌ $X ...فإن هذا س حٌدث
نوعا من التصادم ..وكلما زاد عدد التصادم ..زادت
المشاكل ..والأخطاء الت ستظهر و صٌعب تتبعها ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
44. المتغ رٌات Coding Style -2-
الآن ملاحظددة عنددد كتابتددك اسددم المتغ دٌدر الددذي سدد كٌون
Truly-Global ... جٌدددددب أن كٌدددددون جم دٌددددع أحرفددددده
Capital Letters .. مثدددددل AUTH_PATH ...$
وهددذه مددن قواعددد ال Coding style لهددذا النددوع مددن
المتغ دٌددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددرات ..
الآن قددد سٌددأل أحددد الشددباب ^_^ ...المشدداكل التدد تددم
ذكرهددددا ..هددددل لهددددا حددددل ؟ ..الجددددواب ببسدددداطة نعدددددم
...لنسددتعرض مثددال بسدد طٌ معددا .. بٌدد نٌ ك دٌدف مٌكننددا أن
نتخلص من مثل هذه المشاكل ..مدع الوصدول الدى نفدس
الهدف ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
45. المتغ رٌات Coding Style -2-
لنأخددددذ مددددثلا ..عمل دٌدددة شددددابعة الانتشددددار .. خٌطددددا بهددددا
المبتدب نٌ كث رٌ .. – طبعا أنا كنت أوقع ف ^_^ - المهم
... هددو عمل دٌدة الددربط مددع قاعدددة الب اٌنددات ..لنددرى هددذا
المثال ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
46. المتغ رٌات Coding Style -2-
الحل الأفضل من السابق س كٌون ف استخدام ... Classes
..لاحظ هنا أنن حققت نفس الغرض بأمان أكثر
طبعا بالنسبة ل ...أقوم بكتابة كود الربط مع قواعد الب اٌنات داخل Abstract Class .. رٌثه
الكلاس الأخرى ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
47. المتغ رٌات Coding Style -2-
2 ) Long-Lived Variables : وهذا النوع من المتغ رٌات
دورة ح اٌته طو لٌة ..ولكن لا تصل الى درجة ال Global
... و سٌمى هذا النوع من المتغ رٌات باسم وصف دٌل على
وظ فٌته طوال البرنامج ..
3 ) Temporary Variables : تستخدم هذه المتغ رٌات
داخل ح زٌ أو نطاق برمج صغ رٌ ..بح ثٌ ؤٌدي وظ فٌة
مع نٌة و نٌته بعدها ..وهذا الاسم جٌب أن كٌون..قص رٌ أو
موجز ...مثل جمل الدوران ..غالبا ما نستخدم الرمز
,$j,$k,$i كمثال لمتغ رٌات ف جمل الدوران ..الخ ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
48. المتغ رٌات ذات الكلمات المتعددة Coding Style -2-
من الأمور المهمدة فد تصدم مٌ أي كدود ... هد طر قٌدة
كتابدددة المتغ دٌددرات .. وهدددذا عرفنددداه .. لكدددن مددداذا عدددن
المتغ رٌات الت تتكون من أكثر من مقطدع مثدل تعر دٌف
متغ رٌ مٌثل هذه الجملة Number Elements ... هدذه
الجملة الت رأ نٌاها ... ما ه أفضل طر قٌة لتمثل عل هٌ
كإسدددددددددددددددددددددددددددم متغ دٌددددددددددددددددددددددددددر برمجددددددددددددددددددددددددددد ؟ً ..
للجدواب عدن ذلدك .. هندداك مدرسدتان وضدعت كدل منهددا
حل لهذه المشكلة .......لننظر الى هذه الحلول...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
49. المتغ رٌات ذات الكلمات المتعددة Coding Style -2-
المدرسة الأولى: تكلمت هذه المدرسة عن ال
Methodology التال ةٌ :
camel caps
السؤال الآن ما هو مبدأ عملها ...
بكل بساطة هو ف أن تقوم بوضع فواصل الكلمات أحرف
Capital وهذا مٌثل مقطع جد دٌ ف الاسم ..
اذا ف جملتنا السابقة س كٌون شكل الجملة على التال :
$numElements - تذكر لا وٌجد ش ءً مثال 100 -%
..
أمثلة أخرى .. getData() - buildSomeWidget()
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
50. المتغ رٌات ذات الكلمات المتعددة Coding Style -2-
المدرسة الثان ةٌ: تتكلم هذه المدرسة عن ال
Methodology التال ةٌ :
a.k.a. studly caps (Using underscores ( to break words
هذه المدرسة تقول أنه من الأفضل أن تقوم بالفصل ب نٌ
المتغ رٌات المتعددة المقاطع ب ) _ ( .. وهذا عٌن أن
جملتنا ستصبح بالشكل التال :ً
$num_elements – set_price---get_data
بالنسبة ل أفضل استخدام هذا الأسلوب ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
51. المتغ رٌات ذات الكلمات المتعددة Coding Style -2-
قلت ف نها ةٌ الشر حٌة الثان ةٌ أنن أفضل استخدام
الأسلوب الثان وهو ) _ ( .. والسبب ف ذلك:
1 ( لقد تكمنا ف الدروس السابقة عن المتغ رٌات ال
Global وقلنا أنه من قواعد كتابة هذه المتغ رٌات أن
تكون أحرفها جم عٌا Capital .. اذن فماذا س حٌدث لو
كان اسم المتغ رٌ هذا من أكثر من مقطع ؟ هذه أول
مشكلة .. $NUMELEMENT انظر ك فٌ ستصبح
جملتنا ... لن نستط عٌ تم زٌٌ المقطع الأول عن الثان بسهولة ..إنه أمر مزعج ^_^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
52. المتغ رٌات ذات الكلمات المتعددة Coding Style -2-
2 ( السبب الثان :ً سهولة القرابة عند وجود فواصل
مثل _ ) ( أسهل بالقرابة من الكلمات المتلاصقة
3 ( السبب الثالث: المبرمج نٌ الذ نٌ تٌحدثون اللغات
الأخرى – أي أن اللغة الانجل زٌ ةٌ ل سٌت لغتهم الأم –
س تٌعرفوا على الكلمات بشكل أوضح من استخدام الكلمات
المتلاصقة ...
4 ( لأن أنا بفضل هذا الأسلوب : P ^_^
*( هناك من لا فضل هذا الأسلوب أ ضٌا ..ابحث وانظر
وقارن ب نٌهم ..واختر ما نٌاسبك ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
54. Coding Style -2-Function Name
سنتحدث الآن بإذن الله تعالى عن كتابة ال Function Name ...
لنتذكر ما أخذنا سو اٌ .. سأستخدم BSD ..كنظام لتحد دٌ
بدا ةٌ ونها ةٌ هذا الفانكشن ..وسأقوم بتعر فٌ اسم
الفانكشن ..اذا كان من جزء واحد بأحرف صغ رٌة
..وإذا كان أكثر من جزء باستخدام) _ (.. ل صٌبح
الفانكشن عندنا بهذا الشكل ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
55. مداخلة سر عٌة: هناك ش ءً اسمه جودة الاسم
البرمج ) (Quality Names
وهذا عٌن أن أي كود تقوم بكتابته, وف أي لغة
برمجة كانت, جٌب أن تكون مفهومه من قبل الآخر نٌ,
و جٌب أن تكون المتغ رٌات أو الفانكشن أو او الكلاس
كلها ذات معان ودلابل لما ستقوم به من عمل .
إن الالتزام بهذا المعنى عٌط صاحبه مهن ةٌ ف العمل,
و جٌعل من التعل مٌات الصعبة ش ءً مفهوم قدر
الامكان, وهذا ما مٌ زٌ المبرمج المبتدئ عن المتوسط
عن المحترف ... مدى احترافهم للكود بالاضافه الى
مدى الاحتراف ف تصم مٌه ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
56. Coding Style -2-Class Name
كما للفانكشن ... من قواعد ...فهناك أ ضٌا للكلاس ..
ان قواعد كتابة اسم الكلاس ..لا تختلف عن الجافا ..
)طبعا ل سٌ الزام اٌ( .. ومن هذا عٌن انه لتسم ةٌ كلاس مع نٌ
1 : جٌب ان كٌون الحرف الأول من اسم الكلاس Capital ..
2 : مٌكنك استخدام القواعد الت تم ذكرها مثل استخدام
studlycap, or camel cap
تذكر: لا وٌجد ش ءً مثال 100 % ولا ش ءً ملزم 100 ... %
لكن هناك أمور لو سرت بها ستجعلك أقرب من غ رٌك لأن تكون
مثال اٌ ...ولا عٌن استخدام أسلوب بدلا من آخر أن ذلك خطأ
..وأنك غ رٌ محترف ... لاكن انظر لحسنات وس بٌات كل اسلوب
واختر ما تراه الأفضل...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
57. Coding Style -2-Method Name
الآن سنتلكم عن طر قٌة كتابة الاسم للم ثٌود .. قد نٌظر البعض
و قٌول الم ثٌود ..ه ذاتها الفانكشن... فأقول له أنك أصبت ..
ولكن ل سٌ بشكل مطلق .. لأن هذه التسم ةٌ لم تخرج عبثا ..!!!
..اذاً؟.....
إذا كتب الفانكشن داخل كلاس ...ح نٌها سٌمى م ثٌود ..
ومن هنا أ ضٌا وٌجد امر جم لٌ ف التصم مٌ ... وهو وجود
طر قٌ للتصم مٌ بح ثٌ تم زٌ من خلال النظر الم ثٌود عن الفانكشن
..
استخدم هنا الحرف الأول Capital بعد الكلمة الأولى ف كل
مقطع.. ومن ثم استخدم النظام الذي تحب ... Camel,or Studly cap ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
58. مثال على الكلاس والم ثٌود Coding Style -2-
لاحظ: أن أول حرف بكل كلمة بعد
الاولى ف الم ثٌود ه Capital
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
59. تناسق التسم ةٌ Coding Style -2-
من الأمور المهمة ف تصم مٌ الكود .. مراعاة التناسق
ب نٌ الأسماء... خصوصا التسم ةٌ للأمور الت ستؤدي
وظ فٌة لنفس العنصر ان كانت بالنقصان أو الز اٌدة
كمثال ..
مثال:
شاهد ك فٌ أن المتغ رٌات على نسق واحد ..
فقمت بذكر الغرض من هذا المتغ رٌ , ثم لمن –أو شرح لمن هذه
المهمة-
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
60. أسماء الأعمدة ف قواعد الب اٌنات وأسماء المتغ رٌات Coding Style -2-
إن من الأمور الجم لٌة أثناء كتابة الكود أثناء التعامل
مع قواعد الب اٌنات .. هو كتابة أسماء المتغ رٌات بنفس
أسماء الاعمدة ..وهذا سٌهل عل نٌا كث رٌا عمل ةٌ التعد لٌ
أو التطو رٌ على الكود.. لذلك قم بكتابة أسماء
المتغ رٌات الت تتعامل مع الأعمدة بنفس الص غٌة
حرف اٌ...شاهد هذا المثال: أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
61. نها ةٌ ال Coding style -2-
بفضل من الله تعالى ... انته نٌا الآن مدن ال Coding Style 2 ..
ولقد تكلمنا عن كث رٌ من الأمور المهمدة فد كتابدة الكدود .. والتد تددؤثر عل دٌده بشددكل واضددح... وتظهددر مدددى احتددراف المبددرمج ...
كل ما تم ذكره سابقا .كان تٌحدث عدن المحاولدة قددر الامكدان فد جعل الكود أبسدط ..أسدهل .. أكثدر قددرة علدى القرابدة ..خصوصدا
لمطدددددددددددددددددددددددددددددددور نٌ البرمج دٌددددددددددددددددددددددددددددددات الجددددددددددددددددددددددددددددددددد ..
والآن سددننتقل بددإذن الله تعددالى الددى الجددزء الثالددث والأخ دٌدر مددن ال
Coding Style .. بح ثٌ سنتكلم به ..ك فٌ مٌكننا أن نمنع الخلدط
ب نٌ الرموز المختلفة بالكود ..مثل فتح تداغ معد نٌ وإنهابده ..وضدع
كود Html & PHP معا ...الخ
لنذهب سو اٌ ^_______^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
64. Coding Style -3-Short Tag
أول موضوع سنتكلم عنه ..هو تجنب استخدام ال
Short tag وخصوصا ف موضوعنا عن صفحات
ال PHP ...
نحن نعلم أن ال PHP مٌكنك البدأ بها وإنهابها بعدة
طرق ... مثل <?php?> .. هذا التاغ هو ال
Standard tag ... لكن من الطرق الأخرى مثلا ه <? ?> ... هذه الطر قٌة .. مٌكن استخدامها أ ضٌا ف ال
PHP .. ولكن هذا س ءً ..وإن سألتن لماذا ..سأقول
لك .. انظر الشر حٌة التال ةٌ ^____^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
65. Coding Style -3-Short Tag
لاحظ: هنا قمت باستخدام هذا التاغ لتعر فٌ أن المستند XML Normal
ما الجد دٌ ..؟؟؟ ف حال وجودها مع كود PHP .. سٌتخدم نفس ال الص غٌة للتاغ ...مثل
ف هذه الحالة لن عٌمل ال xml بشكله الطب عٌ ... لأن ال PHP س قٌوم بعمل interrupt لل
header ..وبعاملو كأنو Block ...
دابما قم بكتابة الكود بشكله الصح حٌ .. هنا أن تختصر ..ل سٌ أمرا ج دٌا .. قم بكتابة الكود
كالتال :ً
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
66. Coding Style -3-PHP & html
لا تازٌمم مهأ ىدحا نإ PHP ...هدو امكان دٌة تضدم نٌ
كددددددود ال PHP داخددددددل كددددددود ال html والعكددددددس ...
ولاكددن هددذه قددد تسددبب لنددا مشددكلة فدد Coding Style
..فقد تز دٌ من صعوبة قرابة الكود .. عوضا عن الخلط
ب نٌ النوع نٌ ..قد سٌبب بعض الأخطداء الغ دٌر مقصدودة
..اذن مدددددددددددددددددددددددددددددددددددددددددددددددددددا الحدددددددددددددددددددددددددددددددددددددددددددددددددددل؟
الحدددل باسدددتخدام تصدددم مٌ ج دٌددد لهدددذا الندددوع مدددن الكدددود
..وك دٌدددف كٌددددون ذلددددك ..؟! .. لنددددرى أولا أمثلددددة علددددى
النوع نٌ ...ف الشر حٌة التال ةٌ ^____________^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
67. Coding Style -3-PHP & html
اٌ سلام ... طبعا فرق ... الثان أحلى 100000 مرة ^_^ .. الكود لما كٌون
صح حٌ ..وتنجزه .. أنت أول من فٌرح لذلك ^_^ .
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
68. Coding Style -3-PHP & html
أظدددن ان الفدددرق أصدددبح واضدددحا ..بعدددد المثدددال نٌ السدددابق نٌ
..وباختصار .. حاول قددر الامكدان أن لا تجعدل ال echo or print ه مدن تقدوم بطباعدة ال html ..بدل اجعدل كدل
مدددددددددددددددددددددن اللغتددددددددددددددددددددد نٌ تقدددددددددددددددددددددوم بمهامهدددددددددددددددددددددا ...
قلنددا أن مددن اهددم مزا دٌدا ال PHP امكان دٌدة تضددم نٌها داخددل ال
Html والعكددس .. اذن اسددتغلها بالشددكل الصددح حٌ ..ضددمن
الاثنان ..ودون أن تجعلهما تٌداخلان قدر الامكان ...
ملاحظددة: <?= ?> التدد قمددت باسددتخدامها بالمثددال الأول فدد الشر حٌة السابقة .. تعن <?phpecho “$username” ?>
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
69. Coding Style -3-Parentheses -()-
ان من الأمور الت سٌبب الخلط بها ..مصدابب برمج دٌة
..ال – )( - .. والسدددبب فددد ذلدددك ..أنهدددا تلعدددب دورا
رب سٌدد اٌ فدد تحد دٌدد أولو دٌدات سدد رٌ العمددل .. وهددذا شدد ءً
نعلمدددددددددددددددددددددددددددددددددددددددددددددددددده جم عٌددددددددددددددددددددددددددددددددددددددددددددددددددا ...
لدددذلك فددد تصدددم مٌ الكدددود ..فقدددد روعددد ذلدددك أ ضٌدددا ..
هناك حكمدة تقدول ) اسدتخدم ال )( بحكمدة وتدروي .. (
بحكمدددة ..مفهومدددة ...وتدددروي؟؟ .. تدددروي تعنددد أن لا
تكثر باستخدامها بح ثٌ تصبح بشكل مدزعج ..وان كدان
التسلسل صدح حٌ ...لدنلاحظ الأمثلدة فد الشدر حٌة التال دٌة
^_______^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
70. Coding Style -3-Parentheses -()-
المثال الثالث ..ف الشر حٌة التال ةٌ .....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
71. Coding Style -3-Parentheses -()-
لقد لاحظت بكل تأك دٌ ... الفرق ب نٌ الأمثلة الثلاثة ...وقد لاحظت الفرق ب نٌ تتبع كل منها..
!ن المثال الأول .. صٌعب تتبعه الا بخبرة برمج ةٌ ..وذلك بسبب عدم وجود الأقواس ..وهذا س رٌهق اي
شخص س قٌرأ الكود بعد ذلك ..حتى ولو كنت أنت ..
وف المثال الثالث: صٌعب تتبعه بسبب وضع ال )( بشكل لا طٌاق ...هذا الشكل كب رٌ جدا .. صٌعب تتبعه
وقرائته ...
ف المثال الثان : كان الاستخدام معتدل وبحكمه ... بح ثٌ ل سٌ بقل لٌ ول سٌ بكثر ...
ممكن تقول ..كل هاي الأمور اش مش مهم ... لكل هذا لا قٌل أهم ةٌ عن البرمجة ..خصوصا عندما تتطور
حتى تكتب كود من متوسط الى كب رٌ ...ستلاحظ الفرق ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
77. Coding Style -3-API Documentation
خٌتلف نوع أو الهدف من هذا التوث قٌ عن ال inline .., فالهدف
من هذا التوث قٌ ..ل سٌ شرح التعل مٌات البرمج ةٌ بالتحد دٌ ...وانما
شرح للمبرمج نٌ ..ك فٌ س تٌعامل مع هذا الكود .. ولذلك بالأصل
سم API .. والت ه اختصار ل
Application Programinginterface .. وهذا لا عٌن الواجهات أو التصام مٌ الت تظهر لل وٌزر .. عٌن ه ل سٌت
GUI ...
ال API .. عبارة عن اسلوب مٌكنك من استخدام فانكشن مع نٌة
تم تعر فٌها من قبل –لهذا الغرض- ل سٌتط عٌ المبرمج نٌ الآخر نٌ
من استخدامها – وهذا الكلام تستخدمه نظم التشغ لٌ ..حتى
تستط عٌ التعامل مع البرامج المختلفة ..و سٌمح لك بكتابة الفانكشن
من الصفر
طبعا هذا بشكل موجز.. الآن نعود لموضوعنا وهو توث قٌ هذا
الكلام ......
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
78. وٌجددد 3 أمددور رب سٌدد ةٌ جٌددب أن حٌتو هٌددا هددذا التوث دٌدق
وهددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد :ً
1 ( جٌدب أن قٌددم هدذا التوث دٌق مقدمدة سدر عٌة للمسدتخدم
..حتدددى عٌلدددم أن هدددذه المكتبدددة أو الفانكشدددن ..ستناسدددب
احت اٌجاتددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددده أم لا ...
2 ( جٌدددب أن قٌددددم توث دٌددق كامدددل عدددن جم دٌددع الكدددلاس
والفانكشددن مددن نددوع Public ..و جٌددب أن حٌتددوي علددى
شدرح لجم دٌع Input &output ) . Parameters(
3 ( جٌب أن تحتوي على شرح أو أمثلة لك فٌ دٌة اسدتخدام
هذه الفانكشن.
Coding Style -3-API Documentation
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
79. Coding Style -3-API Documentation
بالإضافة الى ما سبق ..فإنه بامكانك التكلم أ ضٌا عن
1 ) Protected م ثٌود المستخدمة ووضع توث قٌ
مناسب لها ..
2 ( وضع امثلة لطر قٌة الوراثة من هذه الكلاس وك فٌ ةٌ
اضافة وظ فٌة جد دٌة )فانكشن( الى هذا الكلاس ..
وغالبا ما تكون هذه الاضفات مف دٌة ..لك ولمن س تٌخدم
هذا التوث قٌ –انتبه غالبا-
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
80. Coding Style -3-API Documentation
أخ رٌا ..بالإضافة الى المعلومدات التد سدبق ذكرهدا .. جٌدب
أن قٌدم مجموعة من الاضافات عن مطور هذا البرندامج أو
الكود .. ف بٌدأ أو التوث دٌق باسدم المطدور ..وعل دٌك مراعدة مدا
لٌدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد :ً
1 ( جٌدب أن كٌددون التوث دٌدق inline with code ...وهددذا
جٌعل مدن التوث دٌق قابدل للتحدد ثٌ, و ضٌدمن وجدوده دابمدا ..
2 ( جٌددب أن كٌددون التوث دٌدق المكتددوب ..بلغددة سددهلة ..بع دٌددة
عن المزاح قددر الامكدان ..لتجعدل المسداعدة بسد طٌة وسدهلة
وسدددددددددددددددددددددددددددددددددر عٌة قددددددددددددددددددددددددددددددددددر الامكدددددددددددددددددددددددددددددددددان
3 ( جٌدددب أن كٌدددون هدددذا التوث دٌددق مكتدددوب باحتراف دٌددة قددددر
الامكان ..ومع ذلك الحفاظ على سدهولة قرابدة الفرومدات...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
81. Coding Style -3-API Documentation
ىمست ردصملا ةحوتقم ةادأ كانه PHPDocumentor
هذه الأداة تت حٌ لك انشاء توث قٌ من خلال تحل لٌ السورس
كود وال بلوك الموجودة داخل كود ال PHP .. هذا
التوث قٌ الناتج ..س كٌون API ...
شكل ال API س كٌون كالتال :ً
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
82. Coding Style -3-API Documentation
لا ضعب نع حرشأس نلآا tag ..
أولا: انتبه أنه هناك قواعد لكابتها ..كما ترى ..
عل نٌا أولا وضع @ ثم .. اسم التاغ ... ثم الق مٌة ...
مثلا : تاغ ال author .. كٌتب به معلومات عن الناشر .. )المطور( ..الخ
شاهد مثال عمل ف الشر حٌة التال ةٌ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
83. Coding Style -3-API Documentation
عند البدء بالتوث قٌ ..أول بلوك )ال header ( كٌتب
به هذه المعلومات :
اذا لاحظت ...فإنه تم وضع نبذة مختصرة عن الصفحة )أول سطر – Short Description - ( وقد
تكلمت ف هٌ .. أن هذا أول مثال على موضوع ال API ...
ثم وصف مطول ... وهنا مٌكنك وضع معلومات وتفاص لٌ أكثر عن موضوع الصفحة ..
ثم اسم ال Package ..هذا الاسم مهم ..لان س وٌرث الى جم عٌ بلوك ..ف مٌا بعد ..
ثم معلومات المطور ..وهو أن سٌ ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
84. Coding Style -3-API Documentation
الآن لنخصص الأمثلة أكثر قل لٌا ... ولنقم بتوث قٌ فانكشن داخل ال
API .... )بامكانك الاطلاع على المز دٌ من موقع
http://phpdoc.org/
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
85. نها ةٌ الجزء الأول من الدورة ...
أسال بٌ التطو رٌ وتطب قٌ البرمج اٌت ) Coding Style)
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
86. الحمد لله الذي بحمده تتم النعم ...الحمد لله رب العالم نٌ
الحمدددد لله عددددد مدددا كدددان ...وعددددد مدددا كٌدددون ..وعددددد
الحركددددددددددددددددددددددددددددددددددددددددددات والسددددددددددددددددددددددددددددددددددددددددددكون..
اللهددم علمنددا مددا نٌفعنددا ...وانفعنددا بمددا علمتنددا انددك أنددت
العلددددددددددددددددددددددددددددددددددددددددددددددد مٌ الحكددددددددددددددددددددددددددددددددددددددددددددددد مٌ ...
أشهد أن لا اله الا الله ..... وأشدهد أن محمدد رسدول الله
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
88. مقدمة عن Error Handling
أول كلمددة فدد هددذا الموضددوع ..هدد ... سٌددتح لٌ وجددود
برنامج بلا أخطاء ... و سٌتح لٌ أن تجد برندامج أو كدود
مثال 100 % وخال من الثغرات ...عل كٌ تدذكر ذلدك
..ولكن ..كلما ازددت مهارة ف كتابة الكود الخاص بك
..قلددت ثغراتدددك ..وزاد احترافدددك .. وسددتتعلم بكدددل دٌددوم
..شددددددد ءً جد دٌددددددد ..لتغطددددددد بددددددده تلدددددددك الثغدددددددرات ..
فدد عددالم البرمجددة فددإن الأخطدداء تددأت ..مددن أمددر نٌ ..
................^________^....تدددابع فددد الشدددر حٌة
التال ةٌ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
89. مقدمة عن Error Handling
الأمر الأول: وهو الخطأ الناتج عن خلل خارج ..مثل عدم
نجاح عمل ةٌ الاتصال مع قواعد الب اٌنات ..مع أنه مطلوب
لاتمام العمل ...وتسمى هذه External errors
الأمر الثان :ً وهو الخطأ المنطق ..وتسمى بالغالب ب bugs
.. هذه الأخطاء تقوم بتعط لٌ س رٌ عمل البرنامج المنطق ..أو خلل ف نتابجه ... وهذا سٌمى
Code logic errors
إن أغلب الأخطاء ف عالم البرمجة من هذان الصنفان ..
ولا هٌمن الآن Syntax Error ..لأنه تٌم معالجته أثناء
البرمجة ...وإلا فلن عٌمل البرنامج أصلا...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
90. مقدمة عن Error Handling
إن هذان الصنفان.. عٌبران قسمان ف عالم البرمجة
والتحري عن الأخطاء والثغرات) Bugs ...)
إن الخطأ الواقع من جراء External Error ... غالبا
ما حٌدث تدم رٌ ف س رٌ عمل البرنامج ..خصوصا اذا
كان اعتماده عل هٌ شرطا أساس اٌ ... فإن لم كٌن المبرمج
..آخذا لاحت اٌطات برمج ةٌ ..لهذا النوع من الأخطاء
.. عٌن برنامج ضع فٌ أو مرضٌ ... ومثال ذلك قاعدة
الب اٌنات ...فلا جٌب على المبرمج أن فٌترض ..أن
عمل ةٌ الربط مع قواعد الب اٌنات ..دابما صح حٌة !
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
91. مقدمة عن Error Handling
أما الخطدأ المتعلدق ب Code logic errors فهدذا هدو
المصدد بٌة بددذاتها ^_* ... والسددبب فدد ذلددك ..هددو عدددم
معرفددة أ دٌدن وقددع الخطددأ بالتحد دٌدد ..)أي صددعوبة تحد دٌدد
موقددع الخطددأ( ... وهددذا عكددس الخطددأ الندداتج عددن أمددر
خددارج ...هددذا الخطددأ Code logic errors هددو
المسبب لوجود Bugs ..الت مدن خلالهدا ...قدد تسدتط عٌ
اختددراق أي نظددام أو تدددم رٌه ..أو السدد طٌرة عل دٌده ...فدد حددال اسددتطعت الوصددول ال دٌده ... لددذلك انتبدده ..مددن هددذا
النوع من الأخطاء..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
92. مستو اٌت الأخطاء Error Handling
ف لغة ال PHP ... تنقسم الأخطاء الى ثلاثة مستو اٌت
وه :
1 ) E_NOTICE : وه الأخطاء الصغ رٌة والت لا
توقف عمل البرنامج .. وهدف هذا المستوى هو
مساعدتك على التعرف على أماكن وجود الثغرات أو
الأخطاء الممكنة ف الكود الخاص بك ..
NonFatalError,Its Minor
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
93. مستو اٌت الأخطاء Error Handling
2 ) E_WARNING : وه الأخطاء الت لا تؤثر
على مخطط س رٌ عمل الكود .. ولكن تخبرك بأن هنا
خطأ مؤثر قد وقع ..
NonFatalRun time Error ...
من الأمثلة على ذلك ..
fopen(welcome.txt)
ف حال عدم وجود الملف المسمى ب
Welcome.txt ... فإنه س خٌرج لنا Warning ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
94. مستو اٌت الأخطاء Error Handling
3 ) E_ERROR : هذا النوع من الأخطاء وٌقف التنف ذٌ
للكود ...مثل عمل ةٌ استدعاء كلاس ..غ رٌ موجود ...
تقوم ال PHP على تقد مٌ فانكشن سٌمى
trigger_error() ..هذا الفانكشن سٌمح لل وٌزر
بانشاء أخطابه الخاصة داخل السكربت ..وهذا الفانكشن
بامكانه تقد مٌ ثلاثة أنواع من الأخطاء للمستخدم نٌ
.. مٌكنهم من خلالها التحكم أو انشاء أخطابهم الخاصة
وه ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
95. ()
trigger_error Error Handling
أولا: E_USER_ERROR : وهو Fatal Error ..وهذا
عٌن أنه سوف قٌوم با قٌاف تنف ذٌ الكود ..اذا وقع هذا
الخطأ ...
ثان اٌ: E_USER_WARNING : وهذا NonFatal
..أي لن وٌقف تنف ذٌ البرنامج ..ولكن س حٌدث خلل به
..والخطأ س كٌون من نوع WARNING ..
ثالثا: E_USER_NOTICE : وهذا النوع هو الحالة
الافتراض ةٌ للفانكشن trigger_error() ..وهذا الخطأ لا
وٌقف تنف ذٌ البرنامج ..ولا ؤٌثر على مخطط التنف ذٌ ..-الا
ف حالات مع نٌة-
الآن لننطلق الى الأمثلة ^____^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
96. ()
trigger_error Error Handling
مثال 1 - -E_USER_NOTICE :
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
97. ()
trigger_error Error Handling
مثال 2 - -E_USER_WARNING :
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
98. ()
trigger_error Error Handling
مثال 3 - -E_USER_ERROR :
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
99. Error Handling trigger_error() & set_error_handler
مثددددددال 4 : فدددددد هددددددذا المثدددددددال سنسددددددتخدم ان شدددددداء الله دالددددددة اسدددددددمها
set_error_handler هدددذه الدالدددة عٌرفهدددا المسدددتخدم حتدددى سٌدددتط عٌ
التحكم بالأخطاء عن طر قٌ فانكشن قام ببنابه ..أي
Custom Fanction ... هدذه الدالدة تسدتقبل 2 paramters ..الأول هدو
الفانكشن الذي قمت ببنابه ... والثان هو نوع الخطأ الدذي سأسدتخدمه ..
مثدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددال :
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
101. Error Handling trigger_error() & set_error_handler
فددد المثدددال السدددابق ..قمندددا بصدددناعة فانكشدددن خددداص بندددا ..وقدددوم
بطباعة ما نحتداج مدن أخطداء ... وأ ضٌدا اسدتطعنا أن نوقدف تنف دٌذ
الكدددود مدددن وجدددود خطدددأ Warning عدددن طر دٌددق اسدددتخدام الدالدددة
die() ... والآن شددددددددددددددددددددددددددددددددددددددددرح للمتغر دٌدددددددددددددددددددددددددددددددددددددددات:
أول متغ رٌ هو : $errno : وهذا المتغ رٌ حٌتوي على رقم الخطأ
الددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددذي حدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددث ..
ثان متغ رٌ : errstr $ : وهدذا المتغ دٌر حٌتدوي علدى ندص الخطدأ
..وهدددددددددددددددذا أٌخدددددددددددددددذه مدددددددددددددددن الدالدددددددددددددددة trigger_error .
ثالدددث متغ دٌددر: errfile $ : وهدددذا المتغ دٌددر سددد قٌوم بطباعدددة امتدددداد
الملددددف مددددع الاسددددم الخدددداص بددددالملف الددددذي وقددددع بدددده الخطددددأ..
ورابددع متغ دٌدر: $errLine : وهددذا المتغ دٌدر سدد حٌتوي رقددم السددطر
الدددددددددددددددددددددددددددددددددددددذي احتدددددددددددددددددددددددددددددددددددددوى الخطدددددددددددددددددددددددددددددددددددددأ ....
*( ملاحظة: أسماء المتغ دٌرات هدذه مٌكدن تعدد هٌا كمدا تر دٌد, وأن
ترت بٌ الأماكن كٌون حسب التسلسل الذي تم ذكره
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
102. Error Handling trigger_error() & set_error_handler
أمددا الدالددة set_error_handler فقددد احتددوت أولا
على اسم الفانكشن الذي قمندا ببنائده ... ومدن ثدم ندوع
الخطددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددأ ..
ثدددددددددددم أكلمندددددددددددا كمدددددددددددا بالأمثلدددددددددددة السدددددددددددابقة ....
لاحظ ك فٌ أن التسلسل مهم ..والتطب قٌ مهم جدا ..
^_____________________________^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
103. More Info About Error Handling
لمز دٌ من التفاص لٌ حول موضوع الأخطاء وأنواعها :
http://php.net/manual/en/errorfunc.constants.php
ومن ثم ....لنتابع ^_^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
105. Error Handling E_ALL
E_ALL هددد تصدددن فٌ حٌتدددوي علدددى جم دٌددع أندددواع
الاخطاء ..-باستثناء E_STRICT - تقوم باضافتها أندت
بشدددكل دٌدددوي – هدددذا الكدددلام قبدددل PHP 5.4 ... -
قلنا أن E_ALL .. تحتوي جم عٌ الأخطاء ..وهذا عٌند أنده مٌكندك الدتحكم بالأخطدداء التد ترغدب برؤ تٌهددا أم لا
..وهدددددددددددددذا الحركدددددددددددددة لا تشدددددددددددددمل E_ERROR ..
هندداك ملددف اسددمه PHP.ini ..هددذا الملددف حٌتددوي علددى
اعدادات تشدغ لٌ لأي سدكربت PHP .. و دٌتم قرابتده أولا
من جهة الس رٌفر ..قبل التنف ذٌ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
106. Error Handling E_ALL & error_reporting
داخل هذا الملف ...اعداد اسمه error_reporting ..هذا
الاعداد وٌضع به ثابت أو مجموعة من الثوابت الت تقوم بمهمة
تحد دٌ نوع الأخطاء الت ستعرض مثل .. E_ALL ...
E_ALL : تعن جم عٌ الأخطاء
| : اشارة ال OR Bitwise ) | (..أو الاعتماد ةٌ على المنطق
مثل E_ERROR|E_WARNING ...
^ : هذه الاشارة تعن باستثناء .. مثل
E_ALL^E_NOTICE ...
0 : هذا عٌن اخفاء جم عٌ الأخطاء – باستثناء ال Fatal Error .
أمثلة ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
107. Error Handling E_ALL & error_reporting
http://php.net/manual/en/function.error-reporting.php
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
108. التعامل مع الأخطاء Error Handling
تكلمنا ف الشرابح السابقة عن الأخطاء ..والآن سنتلكم عن
طر قٌة معالجة أو التعامل مع هذه الأخطاء ..ف ال PHP ..هناك
أربعة خ اٌرات للتعامل مع الأخطاء ..
1 ( عرض الخطأ ..
2 ( تسج لٌ الخطأ
3 ( تجاهل الخطأ
4 ( العمل بنابا على الخطأ ..ومعالجته ...
طبعا كل منها أهم ةٌ أو وظ فٌة ..وقد تستخدمها ف مواقف مختلفة
أثناء تطو رٌك للمواقع ..فعرض الأخطاء مهم ف تصح حٌ الكود
ومتابعة تطو رٌ العمل ..وتسج لٌه .. فٌ دٌن ف حما ةٌ الموقع من
أي هجوم محتمل ..أو اصلاحه ف أسرع وقت ممكن ,و مٌكننا
أ ضٌا تجاهل بعض الأخطاء , أو لا مٌكنك ذلك ..جم عٌ هذه
الأمور ش ءً مهم لتطو رٌ منتجاتك الرقم ةٌ ^_____^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
109. التعامل مع الأخطاء Error Handling 1 ( عرض الأخطاء
عرض الأخطاء من الأمور المهمة جدا لأي مطور
وذلك ل سٌتط عٌ تتبع الخطأ ومعالجته, ولذلك لنستط عٌ
تفع لٌ هذا الخ اٌر جٌب عل نٌا الذهاب الى
display_errors داخل ال PHP.ini ..ووضع الحالة
on ( ... display_errors= on ( ...وطبعا تٌم
عرض الأخطاء على المتصفح...)طبعا عند تفع لٌ هذه
الخاص ةٌ تٌم عرضها على المتصفح ..والا ستذهب الى
Log file ... )
طبعا ..هذه النقطة مف دٌة جدا للمطور ..ولكنها س بٌة
أ ضٌا ف بعض الأح اٌن ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
110. التعامل مع الأخطاء Error Handling 1 ( عرض الأخطاء
ان عرض الأخطاء على الموقع – لل End user - أمر
س ءً جدا ..والسبب ف ذلك :
1 ( جٌعل من شكل الموقع س ءً ..
2 ( و جٌعل المستخدم شٌعر بالخوف من استخدام هذا
الموقع – قٌلل من الموثوق ةٌ-
3 ( ان عرض الأخطاء .. كٌشف عن تفاص لٌ خاصة بالكود
... وهذا الأمر قد سٌتغل من قبل الأشخاص المخرب نٌ
...مثل الهكرز
*( ملاحظة: هكرز : كان مصلح دٌل على أناس ماهر نٌ
تقن اٌ سٌعون الى اكتشاف الثغرات ..حتى تعالج ..لكن الآن
المفهوم تغ رٌ وأصبح قٌصد به التخر بٌ ف غالب الامر...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
111. التعامل مع الأخطاء Error Handling 1 ( عرض الأخطاء
كث رٌ من المواقع الت تٌم اختراقها ..تكون عن طر قٌ
ثغرات قٌع بها الكث رٌون من المطور نٌ ..
مثل ترك اعداد display_errors= on ..
أو وضع عمل ةٌ الربط مع قواعد الب اٌنات ف نفس
الصفحة ..!
أو السماح بعمل اتصال مع قواعد الب اٌنات بح ثٌ كٌون
NoLocal ...
هذه الأمور كث رٌا ما تعط ثغرات سٌتط عٌ الآخرون
من خلالها اختراق موقعك !...انتبه لذلك ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
112. التعامل مع الأخطاء Error Handling 2 ( تسج لٌ الأخطاء
أي خطأ مٌكن أن حٌدث أو حدث ... مٌكنن تخز نٌه
وعرضه من ملف خارج أو من syslog .. وهذا الأمر
ج دٌ ...و سٌهل عل تتبع الأخطاء الت قد تحدث وبدون
عرضها للمستخدم نٌ .. لأنه س تٌم حفظها داخل file مع نٌ
أو عرضها عن طر قٌ syslog ..
وطر قٌة تفع لٌ هذا الأمر ..أولا الذهاب الى PHP.ini
وعمل ال log_errors= On ... وهكذا تم تفع لٌه
..وقلنا هناك طر قٌت نٌ إما داخل ملف أو داخل ال syslog
... و مٌكن تحد دٌ ذلك عن طر قٌ
error_log= /path/to/filename أو
error_log= syslog
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
113. التعامل مع الأخطاء Error Handling 2 ( تسج لٌ الأخطاء
طبعا ..ك فٌ مٌكننا اضافة Custom Log error
.. مٌكننا ذلك أ ضٌا باستخدام ال trigger_error() كل
ما عل نٌا الق اٌم به هو كتابة اسم الخطأ ل تٌم حفظه داخل
ال Log مثل :
trigger_error(“This First Log Error”)
الآن ..اذا كان عندك الموقع على س رٌفر واحد ..أو
عٌمل على س رٌفر واحد ..فاستخدم ال File ..فهذا
أفضل وأسرع من ال Syslog ..
أما ف حالة وجود أكثر من س رٌفر...فقم باستخدام ال
Syslog .
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
117. Handling External Errors
جم عٌ ما تكلمنا عنه سابقا ...ف الحق قٌة ل سٌ Handling Errors ..بشكل فعل .. !!! والسبب ف ذلك هو أننا فقط
قمنا بقرابة الأخطاء ..أو تعلمنا أنواع الأخطاء ..ولكن هل
قمنا باستغلال هذه المعرفة فعل اٌ ف تغ رٌٌ مخطط س رٌ
الكود مثلا ..حتى نتحاشى هذه الأخطاء ؟ ..الجواب لا ...
لذلك سننتقل الآن الى المرحلة الثان ةٌ وه Handling External Errors ... وبما أننا نعلم
الأخطاء تصن فٌاتها ..ومقدار الضرر أو التأث رٌ على
الكود... عل نٌا الآن ...أن نتعلم ك فٌ مٌكننا تفادي وقوع
مثل هذه الأخطاء ... لنبدأ ^____^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
118. Handling External Errors
لتوض حٌ الفكرة من هذا الموضوع ..س تٌم طرح مثال
..وس تٌم الس رٌ بنابا عل هٌ حتى نصل لمرحلة ..نكون قد
أخذنا جم عٌ الاحتمالات الممكنة ..ه اٌ بنا :؛:,:؛:,:؛
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
122. Handling External Errors
لقد رأ تٌ من تطب قٌ المثال السابق ..ك فٌ أنه اذا لم تقم
بتوقع بعض الأخطاء ماذا مٌكن أن حٌدث ..وك فٌ ه النتابج ..وحتى صعوبة ا جٌاد الخطأ ....لذلك لنقوم
بتطو رٌ هذا الكود قل لٌا ... ^^
للنطلق الى 2 *__________^ ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
123. Handling External Errors
2 ) ًناثلا ءزجلا .. طرش ةلمج ةفاضا دعب دوكلا لكش ...
لنرى معا ..نت جٌة تطب قٌ هذا المثال *_* -- <
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
127. Handling External Errors
من الأمور الجم لٌة ف التعامل مع الأخطاء ..وهو بالغالب
ما تٌم التعامل به ب نٌ المبرمج نٌ المحترف نٌ ..وهو ارجاع
الخطأ على شكل رقم ..ول سٌ على شكل نص ...مثل
هذا الشكل فٌضل استخدامه ..وخصوصا عندما كٌون هناك
تداخل كث رٌ أو امكان ةٌ حدوث أخطاء كث رٌة –طبعا الرقم -
1 مش ثابت هذا رقم متغ رٌ حسب الخطأ انت بتعرفوا –
وهذا الأسلوب مٌكننا التحكم به كمثال ولاحظ ك فٌ
س صٌبح شكل الكود –المثال توض حٌ -ً
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
128. Handling External Errors
س تٌم تقط عٌ الكود الى جزب نٌ ...حتى نستط عٌ اظهاره
بشكل واضح ف الشرابح ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
129. Handling External Errors
بدلا ..من ارجاع الخطأ على شكل نص ..قمنا بوضع
- .. 1 ...وهذه الحركة البس طٌة ..ستسهل عل نٌا عمل ةٌ
التحكم بالأخطاء ..لاحظ طر قٌة الاستدعاء هنا ..وك فٌ ةٌ
التعامل معه ...-شرح المثال ف الشر حٌة التال ةٌ-
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
130. Handling External Errors
ف هذا المثال ...قمنا أولا بالتحقق ..هل المتغ رٌ $result ..
حٌتوي مصفوفة ..والسبب ف ذلك ..أن الب اٌنات الت سترجع ف المثال هذا ان طبق بشكل صح حٌ هو مصفوفة
... اذا نعم اطبع رسالة الترح بٌ مع محتو اٌت هذه
المصفوفة ...واذا كان الناتج 0 عٌن هذا ناتج من ماذا ؟؟؟
عٌن انو انتهى الدوران وما لقى اش ...ول ه بتمثل
return false; ...ط بٌ والحالة الثالثة ؟ وال ه - 1
..هاي الحالة تم وضعها داخل جملة ال else ...لأن كل
هذا المثال لا وٌجد به احتمال ةٌ الى لوقوع 3 أخطاء ...
اذن ستقول لماذا لم أستخدم النص ..؟؟ ..انظر المثال
التال ....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
132. Handling External Errors
لقد قمت بنسخ المثال بشكله الصح حٌ ..داخل مجلد اسمه PHP ..
داخل مجلد سٌمى 1 ... ^____^ ....
بعدما تعرفنا وتكلمنا عن موضوع مهم جدا...وتكلمنا ك فٌ مٌكننا
تدارك الأخطاء ..وطر قٌة ترت بٌها بح ثٌ ظٌهر الكود بأسهل
طر قٌة ممكنة ..وبأقل وقت وأكثر جودة ...
لكن كما لحظت ..بتحس انو ف عجقة كث رٌ بتص رٌ بالكود
...وحتى وانت بتفكر ..ك فٌ ممكن تتحكم بتسلسل الأخطاء !!
..ط بٌ ممكن نقلل من هذا الاش ...؟
الجواب ..طرحته ال PHP 5 ... عن طر قٌ صد قٌنا المعروف
try, catch, finally ...^_^ والت تسمى Exceptions
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
133. بسم الله الرحمن الرح مٌ
) اقرأ باسم ربك الذي خلق، خلق الإنسان من علق، اقرأ
وربك الأكرم الذي علم بالقلم، علم الإنسان ما لم عٌلم(
صدق الله العظ مٌ
قٌول صلى الله عل هٌ وسلم: )من سلك طر قٌاً لٌتمس ف هٌ
علماً ، سهّل الله له به طر قٌاً إلى الجنّة( )مسلم(.
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
134. Exceptions
ال Exceptions عبارة عن آل ةٌ رابعة للتحكم بالأخطاء
وادارتها ..ووس لٌة رابعة لحل المشكلات الت قد تنتج عن
طر قٌ أي خطأ غ رٌ متوقع ...
هناك 3 كلمات مفتاح ةٌ رب سٌ ةٌ لتستخدم ال Exceptions
وه 1 ) Try : أقوم ف هذا البلوك بوضع الكود الذي حٌتمل أن
قٌع به الخطأ )ال بتوقع انو صٌ رٌ ف خطأ(
2 ) Catch : وف هذا البلوك تٌم وضع الحل لمعالجة
الخطأ ..أو ما أر دٌ أن حٌدث ان حصل خطأ ما ...
3 ) Finally : ف هذا البلوك أقوم بوضع الكود الذي أر دٌه
أن نٌفذ بجم عٌ الأحوال ..حصل خطأ أم لا ) PHP 5.5 )
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
136. Data Validation
هناك قاعدة رب سٌ ةٌ عندنا بالبرمجة ..وه لا تثق أبدا
بالمستخدم نٌ ... و عٌن هذا أنك ح نٌ تقوم ببرمجة
موقع مع نٌ مثلا ..وستستقبل منه ب اٌناتت ..ا اٌك أن تثق
به ..وا اٌك أن تثق أن الب اٌنات الت س دٌخلها ..ه بالضرورة صح حٌة أو ل سٌت خب ثٌة ...
لذلك .. وٌجد هناك ش ءً سٌمى Data Validation
أي التحقق من صحة الب اٌنات المدخلة ..أو تجر دٌها
وفحصها لحما ةٌ الموقع من أي ب اٌنات ضارة ...
قٌسم ال Validation الى قسم نٌ ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
137. Data Validation
1 وه عمل اٌت التحقق : Client Side Validation )
الت تتم على صع دٌ المستخدم نٌ – على أجهزتهم –
ول سٌ على الس رٌفر ... و كٌون هذا عن طر قٌ ال JS
ومكاتبها غالبا ...
2 ) Server Side Validation : وهنا تٌم التحقق من
الب اٌنات على صع دٌ الس رٌفر ..وهذا مهم جدا... أي أنها
عمل ةٌ التحقق من الب اٌنات قبل الق اٌم بالعمل اٌت الأساس ةٌ
أو المطلوبة لأي عمل ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
138. Data Validation
ان ال Client Side Validtion ... مف دٌ جددا لتلافد وقدوع
الأخطاء الغ رٌ مقصودة من قبل المستخدم نٌ ..مثل بدلا مدن
أن كٌتددب عمددره بالأرقددام أدخددل حددرف ..الددخ...فهددو سٌدداعد
المسدددخدم علدددى التأكدددد أن المعلومدددات التددد قدددام بادخالهدددا
صددح حٌة ...فدد ذات الوقددت ..-قبددل مددا تددروح المعلومددات
علددددددددددددددددددددددددددددددى السدددددددددددددددددددددددددددددد رٌفر وترجددددددددددددددددددددددددددددددع- ..
ولاكدددن هدددذا الأمدددر لوحدددده لا كٌفددد ... وهدددذه ان اعتمددددت
كأسددلوب للحما دٌدة بدددون السدد رٌفر ..فتأكددد أن موقعددك أسددهل
موقددع للمخددرب نٌ ^^....جددرب أكتددب كددود بعتمددد علددى هددذا
النوع من التحقق ... وبعد ذلك قم بالضغط علدى Disable js الموجودة بأي متصفح ...وانظر ماذا س حٌدث لحما تٌك..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
139. Data Validation
بالنسبة ل ..أقوم بوضع نوع نٌ من الحما ةٌ ...الأول
من جهة المستخدم والثان ةٌ من جهة الس رٌفر ...وبهذا
أكون قد ضمنت تلاف الأخطاء الغ رٌ المقصودة من
المستخدم نٌ أو مساعدتهم على الاخت اٌر
الصح حٌ...وأ ضٌا قمت بحما ةٌ الس رٌفر من الأخطاء
المقصودة قدر الامكان ...
سأتكلم الآن عن بعض الآل اٌت البس طٌة لحما ةٌ المواقع
من أكثر المخرب نٌ ..^_____^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
140. Data Validation
هناك الكث رٌ من الأمور البس طٌة والت قد لا نلق لها بالا
... وتكون من أكثر الأمور الت سٌتخدمها المخرب نٌٌ
..وسنتلكم عن أهم الأمور للحما ةٌ من هذه الأمور
وخصوصا ال injection أو حقن المواقع ...
لنبدأ معا ^____________________^
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
141. Data Validation $_SERVER["PHP_SELF"]
كث رٌا من الأح اٌن ..قد نحتاج استخدام
$_SERVER["PHP_SELF"] هذه عبارة عن
Super Global variable ... وه تع دٌ لنا اسم
الصفحة ال متواجد ف هٌا حال اٌ .. وكث رٌا ما نراها ف ال action ..ولكن ما علاقة هذه بالمخرب نٌ ؟ ...
نحن نستخدم هذا المتغ رٌ كما قلنا ف ال action عٌن لارسال الب اٌنات الت تم تعببتها مثلا بفورم مع اٌ ..الى
نفس الصفحة ال أنا متواجد ف هٌا ... وبهذه الطر قٌة
مٌكنن عرض الأخطاء بنفس الصفحة ال أنا ف هٌا –
هذا كمثال ...- لنشاهد مثال على هذه العمل ةٌ ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
142. Data Validation $_SERVER["PHP_SELF"]
لو قمت بسؤالك ...ما رأ كٌ بهذا الفورم البس طٌ ؟ .. أعد النظر ؟ ...هل هناك أي خطر مع نٌ قد صٌ بٌنا
من هذا الكود ؟ ....
الجواب هو نعم .... هذا الكود عرضة للتخر بٌ بسهولة ...ولا تتعجب من ذلك ...والسبب هو استخدام
$_SERVER["PHP_SELF"] ... هذه ستسمح للمخرب نٌ ..بالتخر بٌ ...ولكن ك فٌ ... ؟؟
هذا المتغ رٌ مٌكن ان سٌتخدمه الهاكر ..أو المخرب نٌ بمعنى أدق ...عن طر قٌ اضفافة / ... ومن ثم
كتابة كود XSS ... لنتابع ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
143. Data Validation $_SERVER["PHP_SELF"]
XSS ل رادصتخا ًده Cross-site scripting .. وهدو أحدد
أنددواع الضددعف التدد تتواجددد وللأسددف عددادة فدد تطب قٌددات
الو دٌب ...وهد تمكدن المخدرب نٌ علدى حقدن Client Side Script ... ومدددن خدددلال ذلدددك دٌددتم عدددرض مدددا حقدددن الدددى
مسدددددددددددددددددددددددددددددددددددددددددددددددددتخدم نٌ آخدددددددددددددددددددددددددددددددددددددددددددددددددر نٌ ...
الآن مددددددددددددددا علاقددددددددددددددة هددددددددددددددذا الموضددددددددددددددوع بددددددددددددددال
$_SERVER["PHP_SELF"] ... ان الأمدددددددددددر بسددددددددددد طٌ
..لنتسلسل الآن قل لٌا ...ف الفورم السابق –الذي تم عرضده
بالشددددر حٌة السددددابقة- لددددو افترضددددنا أن اسددددم الصددددفحة هددددو
test.php فدددددددددددإن فددددددددددد ال Action سددددددددددد كٌون هدددددددددددو
Action=“test.php” ... وبعدددددد هدددددذه العمل دٌددددة ..لنقدددددوم
باضافة XSS ف الرابط...مثل .....
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
144. Data Validation $_SERVER["PHP_SELF"]
لو قمت باضافة هذه ال XSS الى ال URL الخاص بك
%22%3E%3Cscript%3Ealert('AneesHacked You')%3C/script%3E
لتصبح بالشكل التال :
ماذا س حٌدث ؟؟؟!! ...... ان الذي س حٌدث هو اخراج
رسالة مكتوب ف هٌا لقد اخترقت ...لن هذا الذي كتب
..س تٌرجم الى <script>alert(“…”)</script>
وبهذا بمجرد ضغطك على انتر على هذا الرابط ..سترى
ذلك ...لاحظ شاشة المخرجات ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
146. Data Validation $_SERVER["PHP_SELF"]
لا تكمددن خطددورة هددذا النددوع مددن اخددراج هددذه الرسددالة
..ولكن هذا كان لتوضد حٌ المثدال ... ولكدن مداذا مٌكنند أن أصنع .. مٌكن تضدم نٌ أي سدكربت داخلهدا مثدل اندك
تعمددددل redirect ... للمسددددتخدم نٌ علددددى ملددددف آخددددر
موجود خارج الس رٌفر ..وهذا الملدف ممكدن أن حٌتدوي
أكواد خب ثٌة أو انو وٌخذ معلومات المستخدم .. و حٌظها
عندددددددددددددددددددددددددددددددددددددددددددددددددددو ...الددددددددددددددددددددددددددددددددددددددددددددددددددخ ...
اذن فهذا الموضوع ..له أهم ةٌ ف عالمنا كو بٌ ... إذن
ما الحل بعد كل هذا الكلام ؟ ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
147. Data Validation $_SERVER["PHP_SELF"] & using htmlspecialchars
Htmlspecialchars زومرلا لٌوحت ىلع موقت ةلاد هذه
الخاصة بال html أو الجافا سكربت ... الى Html entits , وهذا عٌن عمل ةٌ منع للمخرب نٌ من استخدام
الحقن ..لأنه حتى ولو قام بالحقن ..فستقوم هذه الدالة
بتحو لٌها الى رموز....لاحظ شكل الفورم ك فٌ س صٌبح
النتابج --- <<<<
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
148. Data Validation $_SERVER["PHP_SELF"] & using htmlspecialchars
من الطبع ..أنت تتسابل لماذا لم تظهر ..بعد استخدام هذه الدالة ..الجواب قلنا انه
بالتحو لٌ ..بح ثٌ س صٌبح ال
XSS الذي قام بوضعه على هذا الشكل :
"><script>alert(„Aneeshacked you')</script>
أتمنى من الله تعالى ..أن تكون الفكرة قد وصلت ... ^
_____^ أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
149. Data Validation htmlspecialchars
بعد ان تعرفت على هذه الدالة ..فقم باستخدامها مع هذه
الحالة ...دابما ...وهذا أمر مهم جدا ...وأ ضٌا قم
باستخدام هذه الدالة مع أي عمل ةٌ Input بتص رٌ من
طرف المستخدم ... اجعلها حابط الصد الأول لك ..قبل
ما ما دخل على قاعدة الب اٌنات او تعمل شرط ..قبل ما
تعمل أي عمل ةٌ على الس رٌفر استخدمها لتحم معلومات وتحم موقعك وتحم المستخدم نٌ الذ نٌ
عندك ... والآن لننطلق الى حما ةٌ أخرى ...
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
150. Data Validation Using Trim & stripslashes
Trim وأ تادغارفلا وأ روطدسلا فذدحل مدختدست نأ ندكمٌ ةلادلا هذه
tab الزابددددة ..أو الددد مدددش محتاج نٌهدددا ..وتدددم ادخالهدددا مدددن قبدددل
المسدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددتخدم ..
وال stripslashes تسدددتخدم لحدددذف ال الموجدددودة بدددأي عمل دٌددة
ادخدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددال ...
بهددددددات نٌ العمل تٌدددددد نٌ بالاضددددددافة الددددددى الدالددددددة السددددددابقة ..
Htmlspecialchars مٌكننددددا حما دٌدددة الموقددددع الخدددداص بنددددا مددددن
عمل اٌت التخر بٌ ....المتعمدة من قبل المخرب نٌ
**( طبعددا هددذا لا عٌندد حما دٌدة مطلقددة ...تددذكر أن التقن دٌدات تتطددور
...والعلددم تٌطددور ..والأشددخاص تٌطددورون وأسددال بٌهم تتطددور ...
لكن هناك أمور أساس ةٌ جٌب اتباعها حتى ترتق أنت بالدفاع ...
والآن ... لنقوم بتط بٌق مثال باستخدام هذه الخصابص مجتمعة ..
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com
151. Data Validation Using Trim &
stripslashes& htmlspeialcharsin function test for post data …
أن سٌ حكمت أبو حم دٌ
anees_hikmat@yahoo.com