تعلم لغة php...الدرس الثاني

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم لغة php...الدرس الثاني

مُساهمة  mezo man في الخميس أكتوبر 15, 2009 4:35 am

لنكتب سكربتاً بسيطاً (فاتح شهية) :

<html dir = “rtl”>
التحية لدي أهل الإسلام هي
<?
(“السلام عليكم ورحمة الله وبركاته”) Echo
?>
</html>


قم بحفظ الملف باسم echo.php
ستعرض علينا عباره مكتوب فيها

التحية لدي أهل الإسلام هي السلام عليكم ورحمة الله وبركاته

شي بسيط أليس كذلك ؟


يتكون كود الـphp من نصوص و كود و علامات ولغة html وقد لاتحتوي على نصوص html .
لكي يعمل الكود يجب أن يكون إمتداد الملف php أو بأي إمتداد من إمتدادات الـphp
مثلاً php3 و phtml
--
عندما تطلب صفحة في الإنترنت فإنك تجري اتصالاً مباشراً مع السيرفر هذه العملية تدعي request للسيرفر (يعني طلبية للسيرفر) يقوم السيرفر بتفسير طلبك والبحث عن الصفحة المطلوبة ويرسل اليك الصفحة المطلوبة كجزء مما يسمي response (استجابة) لمستعرض الانترنت لديك يقوم بعدها المتصفح لديك بأخذ الكود الذى ارجع إليه ويقوم بتجميعه (compile) لكي يصبح صفحة صالحة للعرض هذه العملية التي حصلت تشبه نظرية العميل للخادم(client to server) بحيث أن المتصفح هو العميل والخادم هو السيرفر .
الخادم يقوم بعملية تخزين وترجمة وتوزيع البيانات بينما يقوم العميل (مستعرض الانترنت لديك) بالعبور الى السيرفر واحضار البيانات


بروتوكولات الانترنت :

لانريد هنا أن نذهب إلى التكلم عن تاريخ انترنت العتيق ، النقطة المهمة هي الشبكة المربوطة بنقاط nodes الانترنت صممت لكي تقوم بالحفاظ على المعلومات لكي يتم نقلها من مكان إلى آخر وهي تستخدم مجموعة من البروتوكولات مثل Tcp/Ip لكي يتم نقل البيانات عبر الشبكة .

بروتوكول Tcp/Ipمن مميزات هذا البروتوكول أنه بإستطاعته إعاده تمهيد طريقه للبيانات إذا تم خلل في نقطة أو مكان أثناء نقلها ويتم ذلك بسرعة شديدة.عندما يطلب المستخدم من المستعرض أن يجلب له صفحة من الانترنت فإن المستعرض يجلب هذه الأوامر باستخدام بروتوكول يدعي بروتوكول التحكم في نقل البيانات TCP هذا البروتوكول هو بروتوكول نقل للبيانات وهو يضمن أن البيانات قد تم إرسالها ووصولها بشكل صحيح .

قبل أن يتم إرسال البيانات عبر الشبكة يجب عنونتها والبروتوكول الذي يقوم بعنونة البيانات يدعي HTTP يقوم هذا البروتوكول بوضع عنونة للبيانات لكي يعرف البروتوكول TCP أين سينقل البيانات (فهو لايستطيع نقل البيانات إذا لم يكن لها هدف أو مكان ) يستخدم البروتوكول HTTP عن طريق الويب في عملية نقل البيانات من كمبيوتر إلى آخرعندما ترى الصفحة متبوعة بـhttp:// فانك تعلم مباشرة أن الانترنت يستخدم البرتوكول HTTP لإحضار هذه الصفحة يمكنك أن تاخذ صورة بأن الـTCP عبارة عن ساعي بريد الذي يقوم بإيصال رسالة ، هذه الرسالة فيها طابع بريد وعنوان وهو مانسميه بالـHTTP .

يتم تمرير الطلب من المستعرض إلى ملقم أو سيرفر الويب وهو مايعرف بـ HTTP request ويقوم السيرفر برؤية مستودع البيانات لديه لكي يحصل على البيانات المطلوبة فإذا وجد الصفحة في المستودع قام بإرسالها على شكل حزم الى الجهة التي قامت بالطلب باستخدام بروتوكول TCP ويعنون هذه الحزم لمستعرض الانترنت لديك باستخدام بروتوكول http (ننبه دائما الى أنه يرسلها على شكل حزم لكي تعرف السبب عند عدم ظهور صفحة ويب كاملة أن هناك حزمة لم ترسل بشكل جيد) ولكن إذا لم يجد السيرفر الصفحة المطلوبة فانه يقوم بإرسال صفحة تحتوي على رسالة خطا 404 وهذه الصفحة التي أرسلت من ملقم الويب الى المستعرض لديك تسمي HTTP response .

بروتوكول الـ HTTPرغم ما أخذناه من معلومات كثيرة وقصص كثيرة تشبه قصص ألف ليلة أو حكايات الأطفال إلا أنه رغم ذلك يفوتنا الكثير من التفاصيل في هذا الموصوع لذلك دعنا نغوص قليلاً في التفاصيل عن بروتوكول HTTP بشكل خاص.

عندما تقوم بعملية طلب لصفحة من السيرفر هناك أمور إضافية ترسل مع عملية الطلب http request غير الـURL وهي ترسل كجزء من http request .
نفس الموضوع مع الhttp response هناك أمور أخرى تصل معه كجزء منه .

الكثير من هذه المعلومات تولد تلقائياً في رسالة الـHTTP ولايقوم المستخدم بالتعامل معها مباشرة , إذن لايحتاج أن تقلق نفسك بشأن هذه المعلومات إذا أنت لم تنشأها في الأصل ويجب أن تأخذ أيضا في معلوماتك أن هذه المعلومات ترسل كجزء من الـHTTP request والـHTTP response لأن سكربت الـPHP الذي نصنعه يمنحنا تحكماً إضافيا بهذه المعلومات .

كل رسائل الـHTTP تأخذ تنسيقاً معيناً سواء كانت Request أو Response . نستطيع أن نقوم بتقسيم هذا التنسيق إلى ثلاثة أقسام :
1 - Request/response line
2 - Http header
3 - Http body

المحتوي من هذه الأشياء الثلاثة يعتمد على نوع الرسالة إذا كانت HTTp Request أو HTTP response لذلك سنتكلم عنهم بتعمق أكثر .

Http Request
يجب أن يحتوي الـrequest على الأقل الـrequest line (سطر الطلب) والـHOST .
يرسل مستعرض الانترنت طلبية (HTTP request) إلى ملقم الويب تحتوي على التالي :

1- The Request Line
السطر الأول من كل طلبية (http request) هي Request Line الذي يحتوي على ثلاثة أنواع من المعلومات :
أ - أمر HTTP وهو مايعني بـ method .
ب - المسار من السيرفر إلى المصادر المطلوبة (صفحات الانترنت ) المطلوبة من قبل العميل (المستعرض)
جـ - إصدارة الـHTTP .

إذن كمثال على الـ Request Line أنظر إلى السطر التالى :
GET /testpage.htm HTTP/1.1

الـmethod يخبر السيرفر كيف يتعامل مع الطلب هناك ثلاثة أنواع شائعه من الـmethod




2-http headerالبت الثاني من المعلومات هو الهيدر HTTP Header .الذي يحتوي على تفاصيل أو وثائق عن العميل مثل نوع المتصفح (نتسكيب أو إكسبلور) الذي قام بطلب الصفحة والوقت والتاريخ والإعدادات العامة
الـHTTP Header يحتوي على معلومات نستطيع تقسيمها الى ثلاث فئات وهي :
أ - عامة GENERAL : تحتوي معلومات إما عن العميل أو السيرفر ولاتخصص إلى فرد أو مجموعة .
ب - شخصية Entity : تحتوي على معلومات عن البيانات التي أرسلت بين المتصفح والسيرفر .
جـ - مطلوبة Request : تحتوي على بيانات عن إعدادات العميل والأنواع المختلفة المقبولة من البيانات .

وهذا مثال :
Accept: * / *

Accept language: Arabic-KSA.
Connection: Keep –Alive.
Host : [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
Referer: [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
User –Agent :Iexploer (win98;.........)

مثلما ترى الـ HTTP Header عبارة عن إعداد يتكون من عدة سطور كل سطر يحتوي على قيم معينة .

هناك عدة سطور تشكل الـ HTTP header وأكثرها إختياري , يقوم الـHTTP بالإخبار عن إنتهاء معلومات الـ header بترك سطر فارغ (وهذا يكون في الـHTTP1.1 ) .

3- The HTTP Body :
إذا تم استخدام الأمر POST في الـHTTP Request Line عندها يقوم الـ HTTP بطلب المعلومات التي ارسلت في الـbody الى السيرفر .

Http Response
يرسل من السيرفر إلى المستعرض ويحتوي على ثلاثة أشياء :
1- the Response Line
2 - http header
3 - Http Body

1 - The Response Line
الـ response line يحتوي فقط على نوعين من المعلومات :
1 - رقم إصدارة الـHTTP .
2 - شفره أو كود الـhttp request التي تقوم بتحديد إذا كان الـrequest ناجحاً أم فاشل .

مثال :
HTTP/1.1 200 OK

في هذا المثال يقوم الـresponse line بإرجاع القيمه 200 متبوعة بالكلمة OK هذه تشكل وتشير إلى نجاح الـ request ويكون الـresponse يحتوي على الصفحة المطلوبة والبيانات من السيرفر . ومثال آخر هو الشفرة 404 عندما تقوم بطلب صفحة ويفشل السيرفر في الحصول عليها .

2 - HTTP Header
الـ response header يعتبر مشابه request hader الذي ناقشناه في الأعلى .وتنقسم المعلومات التي فيه أيضا إلى ثلاثة أنواع :
أ - عامة GENERAL : معلومات عن الـ client أو السيرفر ولاتخصص إلى واحد منهما .
ب - شخصية Entity : يحتوي على معلومات عن البيانات التي يتم ارسالها بين السيرفر والعميل .
جـ - الإجابة Response : يحتوي معلومات عن السيرفر الذي قام بإرسال الرد وكيفية تعامله ومعاجلته للرد (Response ) .

كما قلنا سابقاً ، يتكون من عده سطور ويتم وضع سطر فارغ للإعلام عن إنتهاء الهيدر .

مثال :
HTTP/1.1 200 OK -the satus line
Date: Mon; 1st Nov 1999, 16:12:23 GMT -general header
Server : Apache/1.3.12 (Unix) (SUSE/Linux) PHP/4.0.2 -the response
Last-modified: Fri, 29 Oct 1999, 12:08:03 GMT -Entity Header

السطر الأول ناقشناه والسطر الثاني مفهوم من غير شرح ، السطر الثالث يقوم بتحديد البرنامج تبع السيرفر ونوعه ونظام التشغيل القائم عليه والسطر الأخير يقوم بتعريف آخر وقت تم فيه تعديل أو تجديد الصفحة .

ملاحظة : قد يحتوي الهيدر على أكثر من هذه المعلومات أو معلومات مختلفة وهذا يعتمد على نوع الشي المطلوب من السيرفر .

3 - Http Bodyإذا تم معالجة الطلب بنجاح ، فإن الـHTTP response Body يحتوي على كود الـHTML ويقوم مستعرض الانترنت بتفسيرها وتحويلها إلى الصفحة النهائية التي تراها .

أين سكربت الـPHP من ذلك كله ؟
أصبح الآن لدينا مفهومية جيدة عن طريقة إرسال المستعرض طلب صفحة من السيرفر وكيفية استجابة السيرفر لهذا الطلب .

تكلمنا عن أن سكربت الـphp يتكون من ثلاثة أشياء : نص وكود php وكود html ، لانسطيع وصف الـhtml بأنها لغة برمجة بشكل جيد ونستطيع أن نقول أن الـphp لغة سكربتات Scripting Language لأنها تضيف قدرات html عليها مثل الجداول والفريمات بكود html بداخل كود الـphp هناك لغات تسمي لغات سكربتات قد تكون متآلفاً معها مثل الجافا سكربت والفجول بيسك سكربت بإستثناء أن الفرق بينها وبين الـphp هو أن الـphp لغة تعتمد على جهة المزود أي السيرفر ويمكنك تخصيص المتصفح الذي يستعرضها .
تجعلنا الـhtml نضمن سكربتات الـphp فيها ضمن قواعد لذلك لكي نستطيع تشغيلها ولكننا لاننسي أن إمتداد الملفات يظل كما هو php أو php3 بدون تغير فيه لكي يتم إرسال السكربت الى مكتبة الترجمة (scripting engine) التي تقوم بترجمة السكربت إلى html (كأنك تترجم من عربي لإنجليزي أو العكس )

مفهوم الـparsing و الـExecution :
ممكن أن نقسم عملية الترجمة الذي يقوم بها سيرفر php إلى قسمين أو عمليتين :
العملية الأولى : هي أن السيرفر يقوم أولا بفحص قواعد اللغة وهذا لايضمن أن السكربت صحيح مائة بالمائة ولكنه تدقيق في الأوامر وقواعد اللغة وهذا مايسمونه بالـParsing
العملية الثانية : هي تنفيذ السكربت بعدها وإخراجه على شكل كود html وهذا مايسمي بالـ Execution .

بقي أن نقول أمراً معروفاً وهو أن السكربتات نوعين :

1 - وهو ماينفذ من جهة المزود
Server –Side scripting
2 - ماينفذ من جهة المستعرض (صفحة انترنت) .
التعليقات
ما رأيك إذا كنت في شركة وكان معك أكثر من مبرمج وأردتم تصميم برنامج ، اإذن قد تحتاجون لتنظيم العمل وتعديله لذا من اللازم أن تقوم بعمل توضيح لفائدة الكود الذي كتبته كي يسهل فهمه عليهم وإضافة تعديلات مناسبة ، إذن التعليقات تستخدم في الإفاده عن شرح الأكواد أو إضافة معلومات لاتستعمل إلا كتوضيح أو أي شي آخر .

يمكنك عمل تعليق من سطر واحد كالتالى :
<?
//هذا تعليق لافائدة له له اي معني
?>
مثال آخر :
<?
//هذه الداله تقوم بطباعه الكلمه تعليق
Echo “تعليق”;
?>

وأيضا يمكنك استخدام تعليق من أكثر من سطر كالتالي :

<?
/*تعليق يتكون من
اكثر من سطر بعلامة السلاش والنجمه
*/
?>


المتغيرات
ماهي المتغيرات ؟
أبسط تعريف يمكن أن نقوله عن المتغير هو أنه مساحة من الذاكرة تستخدم لتخزين المعلومات ويتم التحكم فيها عن طريق المبرمج في الـPHP ، المتغيرات تبدأ بعلامة الـ$ ولكي تقوم بإدخال قيمة في المتغير فإنك تستخدم المعامل (=) إذن لكي تقوم بإنشاء متغير يحتوي على قيمة يمكنك القيام بذلك كالتالى :

$alfares = “How Are You Every Body?”;
$اسم_المتغير = قيمه ;

لاحظ أن السطر السابق يتكون من خمسة أشياء :

1 / المتغير وهو alfares
2 / وقبله علامة الـ$ لكي يعرف مترجم الـPHP أنه متغير
3 / المعامل ( = )
4 / الفاصلة المنقوطة ( ; )
5 / القيمة وهي How Are You Every Body? وهي القيمة الموجودة في المتغير أو التي اقترحناها للمتغير أو التي وضعناها فيه ( لأن الذي اقترح القيمه هو أنت (مبرمج الphp ) )








ملاحظات :
اسماء المتغيرات حساسة لحالة الأحرف إذا كانت كبيرة وصغيرة
<?
$Ahmed = “salem”;
$ahmed = “slmoon”;
echo $ahmed;
echo $Ahmed;
?>

المتغيرين الذين بالأعلي مختلفين بسبب حالة الأحرف.

2 - يمكنك استخدام المعامل (_)
$First_name
3 - يمكنك استخدام ألف حرف في تسميه المتغيرات (وفي الواقع هي غير محدده) .

علامات التنصيص
وهذه نقطة مهمة وهي لماذا وضعنا علامات التنصيص هذه ؟ فالإجابه تكون هي أن القيمة التي وضعناها حرفية أي تتكون من نصوص وهناك أنواع للمتغيرات وعلى ذلك سنفصل ونقول

هناك انواع للبيانات وهي :
1 - strings (حروف)
$Exa = “Just An Example”;
$Exa2 = “2.5”;
$Exa3 = “2”;
2 - Integer (ارقام)
$Exam = 5;
3 - Double (ارقام ذات فواصل )
$num= 5.4
4 - array
ياتي تفصيلها فيما بعد
5 - objects
تفصيلها في دروس اخري
6 - Unknown .
ياتي تفصيلها في درس اخر .

المتغيرات لايتم تعريف نوعها من قبل المبرمج إنما مترجم الـPHP يقوم بالتعرف عليها لكي يتم إتمام العمليات المختلفه عليها .


البيانات الحرفيه /
في الـPHP أي قيمة تكون بين علامتي تنصيص عادية أو علامة تنصيص مفردة يعتبرها الـPHP قيمة حرفية
أمثلة :
“هذا النص بين علامتي تنصيص عاديه اومزدوجه”
‘هذا النص بين علامتي تنصيص مفرده او وحيده’

يجب أن يبدأ النص وينتهي بنفس علامة التنصيص ، وإلا فلن يتعرف الـPHP على القيمة الحرفية أو على النص .
<?
$d=”غلط ‘
echo “خطا ‘
?>
لايمكنك أيضاً أن تقوم بوضع علامة تنصيص من نفس النوع التي تستخدمه القيمة الحرفية في وسط العبارة الحرفية أو النص


<?
$variable = “هذا النص "خطابسبب وجود علامة في النص من نفس النوع"”;
?>

وتصحيحه
<?
$variable = “’ صحيح’هذا النص”;
?>
وأيضا مثال آخر
<?
$r = “This is”BAD”; // خطأ
$t = “This is ‘good”; // صحيح
?>
أما إذا كنت مصراً على ذلك أو تحتاج إليها في عمليات ضرورية (كما سوف نري فيما بعد حاجتنا إليها في صناعة النماذج ) فيمكنك وضع معامل (\) قبل علامة التنصيص .
لكي تعمل معك بكل سهولة .

مثال :
<?
$u = “This Only An \” Example\” To Make You Understand Nothing”;
?>

طيب ما رأيك لو أردنا أن نطبع المعامل (\) بنفسه ؟
الحل هو أن نتبعه بمثله ، وبالمثال يتضح المقال :

$file = "c:\windows\system.ini";
echo $file;   // النتيجه c:windowssystem.ini

$file = "c:\\windows\\system.ini";
echo $file;   // النتيجه c:\windows\system.ini


يمكنك الجمع بين أكثر قيم المتغيرات في متغير واحد عن طريقة الـ(.)

<?
$first = “منتدي” ;
$last = “المطور العربي”;
$fullname = $first. $last
Echo $fullname ;
//ولكننا نريد وضع فراغ بين الكلمتين
$fullname= $first . ’ ’ . $last ;
Echo $fullname ;
?>





وأيضا يمكننا أن ضيف إلى متغير قيمة متغير آخر :
<?
$f="I Love M" ;
$k= "y Country" ;
//إضافه القيمة الى المتغير
$f = $f . $k;
echo $f;
?>

<?
//تقريباً نفس العملية
$f="I Love M" ;
$k= "y Country" ;
$f.=$k;
echo $f;
?>

الارقام
العدد الفردي والمزدوج
الاختلاف المعروف لدي أنا حتى الآن هو أن الفرق بينهما هو الفاصلة العائمة (والله حتي اعطاءها هذا الاسم يجعل الواحد يشعر بالاحباط والخوف )
لاحظ أننا لا نستخدم علامات التنصيص وذلك ليعرف الـPHP أنها بيانات رقمية قد نستخدمها في عمليات حسابية معقدة ويمكننا تطبيق عمليات حسابية بسيطة عليها إذا كانت حرفية .

//هذا عدد فردي
$j=2
//هذا عدد مزدوج
$h=4.5

العمليات الحسابيه
هي مثل الجمع والطرح والضرب والقسمة وهي مرتبة كالتالي :
أولاً /الأقواس
ثانياً /الضرب ثم القسمه .
ثالثاً / الطرح ثم الجمع
<?
Echo 5*2/5;
Echo 5*(2/5) ;
?>

مثال آخر :
<?
Echo 5-6+9 ;
?>

مثال لعملية حسابية نستخدم فيها متغير حرفي
<?
$W="2L";
$E= 2;
$F = $W * $E;
echo $W .' ' .$E .' ' .$F;
?>
مثال لعملية أخري لكنها لم تعمل وعليك استنباط السبب بنفسك (هاه طل زين ) :
<?
$W=”L10”;
$E= 2;
$F = $W * $E;
echo $W .’ ‘ .$E .’ ‘ .$F;
?>
يمكننا إضافة رقم واحد الى متغير بثلاث طرق متنوعة :
مثال
$j++
أو
$j = $j+1
أو
$j += 1
ويمكننا على ذلك إضافه المتغير إلى نفسه كالتالي :
$j += $j
أو كالتالي :
$j = $j + $j

متغيرات النظام

هناك متغيرات يستخدمها النظام يمكنك أن تستعملها ومنها
$HTTP_USER_AGENT
التي تظهر لديك نوع المستعرض الذي يستخدمه العميل

مثال :
<?
Echo $HTTP_USER_AGENT ;
?>

الثوابت

يمكننا تعريف الثوابت بقول أنها قيم ثابتة لاتتغير ونعرفها عن طريق الدالة define
الثوابت حساسة أيضا لحالة الآحرف
<?
Define (“author”, “alfarees”);
Echo “author is “ . author ;
?>

هناك ثوابت يستخدمها النظام مثل
PHP_OS
التي تقوم بعرض نظام التشغيل الذي يستخدمه السيرفر

مثال :
<?
Echo PHP_OS;
?>




معرفه وتحويل انواع البيانات
إذا أردت أن تعرف نوع متغير ما يمكنك استخدام الدالة gettype

مثال :
<?
$n=5;
$l ="hi";
echo "The n Is " . gettype ($n) . "<br>";
echo "The l is " . gettype ($l);
?>

إذا أردت تحويل نوع متغير ما يمكنك ذلك باستخدام الدالة settype :

مثال :
<?
$n = 10 ;
echo "Before is " . gettype ($n) ."<br>";
settype ($n,"string");
echo "After That is go " . gettype ($n);
?>

الدالة isset
لمعرفة إذا كان المتغير منشأ مسبقاً أم لم يتم انشاؤه وهي لا تتطلب غير اسم المتغير الذي تريد فحص وجوده
وتقوم بارجاع القيمة (1) إذا كان المتغير تم انشاؤه ولاترجع أي قيمة إذا كان المتغير غير منشأ أو موجود .

مثال :

<?
$n = “n”;
Echo isset ($n);
?>

الدالة unset
تقوم بحذف المتغير إذا كان موجوداً وتحرير الذاكرة منه ( لذلك تأكد جيداً قبل استخدام هذه الدالة من اعطاء دمعة الوداع للمتغير المسكين )

<?
$n = “n”;
unset ($n);
Echo isset ($n);
?>

الداله empty
تقوم بإرجاع القيمة ( 1 ) إذا كان المتغير غير منشأ أو أن القيمة التي فيه صفر (0) أو نص فارغ ("") ولاتقوم بإرجاع أي شي اذا كان المتغير منشأ وفيه قيم غير المذكورة .

mezo man

عدد المساهمات : 147
تاريخ التسجيل : 05/10/2009

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى