PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش اجمالي زبان php



TAHA
09-23-2009, 08:21 PM
قبل از هر چيز يه نگاه كوتاه و جزئي بر تاريخچه php مي كنيم. نويسنده php اولين بار اين زبان رو براي كار هاي شخصي خودش و اثري براي Resume كاريش كه بايد تحويل مي داده نوشته بوده. اولين بار اين زبان بصورت يك CGI در زبان Perl نوشته شده بود. ولي سروري كه روش php نصب شده بود يكسري مشكل در اجراي صفحات داشت. به همين دليل php رو دوباره بازنويسي كرد و با زبان ‍C نوشت. در همين اثنا بعضي از كاربران سرور مربوطه هم شروع به كار با نسخه نوشته شده و درخواست به افزودن feature هاي بيشتر كردند. اين روال ادامه پيدا كرد تا اولين نسخه جمع و جور شده php رو همراه با راهنما، Mailing-List و FAQ بيرون داد. اولين نام اين زبان Personal Home Page Tools بوده كه در آينده به Personal Home Page Construction Kit تغيير كرد. در همين مدت كه داشت php پامي گرفت نويسنده اون شروع به نوشتن يه CGI ديگه براي كاركردن با بانك هاي اطلاعاتي و ارسال SQL Query كرد. خوب بقيه تارخچه باشه براي بعد حالا به خود php بپردازيم ;-).


قبل از هرچيز پيشنهاد مي كنم اديتور يا بهتر بگم IDE پرقدرت Zend رو دريافت كنيد. واقعا كارتون رو در كد نويسي راحت ميكنه و همون جا هم مي تونيد اجراش كنيد.

خوب تا الان نصب php رو گفتيم و گفتيم كه 2 جور php رو ميشه نصب كرد. يكي بصورت CGI و ديگري بصورت يك Module براي سرورتون. مطلبي كه جاش بود ذكر كنم يه توضيح كوچكي براي فرق اين دو بود.زماني كه php بصورت يك CGI برروي سرور نصب ميشه، هرگاه كه سرور به فايل هاي php بر مي خوره php رو اجرا ميكنه و اين فايل رو بهش ارسال ميكنه. ولي وقتي بصورت Module براي سرور نصب ميشه، php جزئي از خود سرور ميشه و زماني كه سرور شروع به كار ميكنه هميشه هست و منتظر صفحات و اجراشون هست. طبيعتا معلومه كه نصب بصورت Module بهتر از نصب بصورت CGI هست. چون اگر بصورت CGI نصب بشه با هر Request بايد php اجرا بشه و بعد هم بسته بشه! البته وقتي php بصورت Module نصب ميشه به اين معني نيست كه از CGI ديگه نشه استفاده كرد. يه موقع ها ميشه كه ما لازم داريم بصورت CGI از php استفاده كنيم. به عنوان مثال مي خواهيم سرور ما هر هفته توسط يكي از اسكريپت هاي نوشته شده ما از Database ما يك Backup بگيره. براي انجام اين منظور ما اسكريپت رو بصورت جداگانه و CGI اجراش مي كنيم. خيلي حاشيه رفتم، حالا بيايم سر اصل مطلب.
اسكريپت هاي نوشته شده php همگي بايد در فايل هاي متني ساده ويا به عبارتي بهتر بصورت UNIX-Style نوشته شوند. به عنوان مثال يك فايل php هيچ وقت نبايد با Word Pad يا MS-Word ساخته شود! چون موقع اجرا php رو دچار مشكل ميكنه. در محيط Windows ساده ترين اديتور براي انجام اينكار Note-Pad هست. اگر از ويندوز 2000 يا XP استفاده مي كنيد كه چه بهتر چون مي تونيد به راحتي يك فايل php و با كدپيج Unicode ذخيره كنيد. فايل هاي php معمولا از پسوند php. تشكيل مي شوند. زماني كه browser شما يك درخواست به سرور شما ميفرستد براي مشاهده يك فايل php، سرور شما فايل مربوطه رو به php Engine ميفرسته تا فايل اجرا بشه. كار php Engine اجراي فايل php شما و ارسال نتيجه بصورت HTML به browser شما هست. php يك زبان اسكريپت نويسي سمت سرور است. يعني اسكريپت شما در سرور اجرا شده و نتيجه براي شما ارسال مي شود.
دستورات php رو ميشه به طرق مختلف نوشت. در اينجا به چند صورتش اشاره مي كنم.

بصورت SGML




< ?
...
? >

بصورت XML


< ? php
...
? >


بصورت اسكريپت هاي نوشته شده در فايل هاي HTML




< script language="php" >
...
< /script >


بصورت تگ هاي ASP، البته در اين حالت بايد در فايل php.ini تعريف كنيد كه اين حالت رو بشناسه. براي اينكار asp_tags =off رو به on تغيير بديد. يادتون نره Apache ياهر سروري كه داريد رو restart كنيد يا تغييرات رو مشاهده كنيد. نحوه نوشتن ASP Style هم اينگونه هست:



< %
...
% >


من توي نوشته هام فقط بصورت XML مي نويسم. مابين اين تگ ها هر چند تا دستور كه بخواهيم مي تونيم بنويسيم. هر دستوري كه تموم ميشه بايد بعدش اين علامت رو بزاريم ";" هرگاه Engine زبان php به اين ويرگول نقطه دار رسيد فرض ميكنه كه دستور شما تموم شده. اگر در آخر هر دستور خود اينو نزاريد برنامتون با مشكل برميخوره. در اينجا يك مثال مي زنم كه نمايانگر پايان يك دستور هست.




< ? php
echo ( 14 * 5);
? >


اين عبارت دقيقا مساوي اين عبارت هست:




< ?php
echo (
14
*
5
);
? >


php تا زماني كه به ";" نرسه دستور رو تموم شده فرض نميكنه. هردوي اين عبارات حاصل ضرب 14 در 5 رو برروي صفحه نشون مي دهند.
گاهي اوقات ميشه كه ما مي خواهيم خطي يا خطوطي رو در فايل php خود غير فعال كنيم تا اجرا نشن. يا گاهي اوقات هست كه ما مي خواهيم در كد هاي خود مطلبي رو بنويسيم. مثلا مي خواهيم بگيم اين كد فلان كار رو انجام ميده. اين كار رو مي توان به 3 صورت انجام داد. راحت ترين راه براي انجام اين كار گذاشتن 2 تا slash " //" در آغاز هر خط است. به عنوان مثال ما مي خواهيم يه نوشته روي صفحه نمايش بديم و در خود كد هم مي خواهيم توضيح بديم كه اين چيه:




< ? php
echo ( 14 * 5); // This will show the result of 14 times 5
? >


اگر // رو در اول خط ميزاشتيم، اين دستور ديگه اجرا نميشد و به اصطلاح Ignore ميشد. به جاي // مي توان از # هم استفاده كرد. ولي گاهي اوقات هست كه شما مي خواهيد چند خط رو غير فعال كنيد. براي انجام اين كار نوشته هارو داخل /* ...*/ قرار مي دهيم. به عنوان مثال هر اسكريپتي كه نوشته ميشه، در آغاز فايل يه توضيح كوتاهي از اسكريپت نوشته شده، مي نويسند.




< ?php
/* This script will encrypt your string
using function md5()*/
? >


به همين روال اگر شما يكسري كد جاي اين نوشته ها قرار بديد، كد هاي شما Igone ميشن و اجرا نميشن.
خوب حالا بپردازيم به نحوه نمايش عبارات برروي صفحه! نوشته هاي متني و عبارات متني رو ميشه به 3 مدل نوشت و نمايش داد. نحوه اول بصورت double quote هست. اگر شما نوشته هاي خود رو درون "..." قرار بدهيد، زمان اجرا، php متن شمارو تا تگ هاي HTML و متغير هاي استفاده شما رو پيدا كنه و نتيجه رو برروي صفحه نشون بده. در زبان php نوشته هاي ما توسط دستور echo نمايش داده مي شوند. به اين مثال براي نمايش متن هايي كه درون double quote هستند دقت كنيد.




< ?php
echo ("salam");
? >


در اين مثال چون كلمه salam بين تگ هاي [ b ] هست بصورت bold يا توپور نمايش داده ميشه. بنابراين نتيجه salam مي باشد. در ادمه نوشته مي بينيد كه اگر يك متغير هم نامش دورن "..." قرار داده شده باشده، مقدار يا ارزش اون در صفحه نشون داده ميشه.
نحوه بعدي نمايش عبارات، بصورت single quote هست. يعني نوشته هاي ما ميان '...' قرار مي گيرند. وقتي نوشته هاي شما ميان '...' قرار بگيرند، ديگه توسط php مورد بررسي قرار داده نميشه كه آيا متغيري ميانشون هست يا نه:




< ?php
echo ('salam');
? >


حاصل اين دستور عبارت salam درست مانند قبلي برروي صفحه است. ولي اگر ما متغيري در اين نوشته قرار بديم، مقدار و ارزشش نشون داده نميشه و فقط اسمش نشون داده ميشه. آخرين روش براي نمايش عبارات استفاده از Here Document است كه من تا حالا زياد نديدم جايي استفاده داشته باشه. در اين روش هم اگر شما از دستورات html استفاده كنيد، نوشته هاي شما برروي صفحه به همان صورت نشون داده مي شوند. به عنوان مثال:




< ?php
$hereText=<< salam

khoobi?
chetori?
end_delimiter;
echo "
";
echo($hereText);
? >


در متغير hereTex$ ما اين نوشته هارو ذخيره مي كنيم. هنگام نمايش برروي صفحه ما اين نتايج رو ميگيريم:


salam
khoobi?chetori?

كلا زياد از Here Document استفاده نميشه. اعداد رو هم ميشه بصورت عددي كه هستند نمايش بديم و هم بصورت مقادير آن ها در سيستم هاي Octal و Hexa. به عنوان مثال اين عبارات همگي عدد 110 رو نشون مي دهند:




< ? php
echo (110);
echo (0x6e);
echo (0377);
? >


براي نمايش اعداد Hexadecimal بايد در شروع آن 0x و براي نمايش اعداد Octal بايد درشورع آنها يك صفر قرار دهيم.

يه زنگ تفريح ;-). براي تبديل اعداد از عدد معمولي به سيستم Hexa از تابع ()dechex و براي تبديل از عدد معمولي به سيستم Octal از تابع ()decoct استفاده مي كنيم. همين روال رو براي تبديل از hexa به decimal و octal به decimal ميشه انجام داد با توابع ()hexdec و ()octdec.

در برنامه نويسي ما هميشه با مقداري به نام بولين (Boolean) سروكار داريم. متغيري كه از نوع بولين تعريف ميشه يا مقدار True ميگيره يا False. ميشه اينو به يه چراغ تشبيه كرد. يه چراغ يا خاموشه يا روشن. وقتي روشنه True هست وقتي هم كه خاموش هست False.
php هم مانند تمامي زبان هاي برنامه نويسي ديگه از انواع مختلف متغير ها پشتيباني مي كنه. در اين زبان متغير ها با علامت $ نامشون شروع ميشه. به عنوان مثال اگر ما بخواهيم متغيري داشته باشيم كه درونش نامي رو نگهداري كنيم مي تونيم name$ تعر&

عملگرهاي string:
اولين چيزي كه بايد بگم اين هست كه دستور echo از ادامه نوشته شما، نوشته اي رو نشون ميده. دقيقا همانند كد هاي HTML. تا شما از
استفاده نكنيد، خط شما عوض نميشه و به خط بعدي نميره. echo هم كارش نمايش تمامي نوشته هاي شما همراه با تگ هاي html شما هست. مهمترين عملگري كه براي رشته هاي متني (string ها) به كار ميره، كاراكتر نقطه (.) هست. اين كاراكتر رشته هاي متني رو به هم وصل ميكنه. به اين عملگر Dot Operator ميگن. به عنوان مثال شما مي خواهيد هركس كه وارد سيستم كاربري سايت شما ميشه بهش يه خوش آمد گويي همراه نامش گفته بشه. فرض مي كنيم در متغير UserName$ نام كاربر قرار مي گيره و در مقدار ثابت WELCOME هم عبارت " ,Welcome to our site" قرار ميگيره. بنابر اين ما بايد عبارت خوش آمد رو به نام كاربر وصل كنيم. به مثال زير براي انجام اين كار دقت كنيد:




< ?php
define("WELCOME","Welcome to our site, ");
$UserName = "Milad";
echo WELCOME . $UserName;
? >



وقتي برنامه ما اجرا ميشه عبارت Welcome to our site, Milad برروي صفحه نمايش داده ميشه. بخاطر داشته باشيد كه مقدار هاي ثابت رو اگر در "..." قرار دهيد، php مانند متغير ها به آنها رجوع نميكنه. مثال بالا رو براي متغير ها هم صدق ميكنه، به اين معنا كه ما چند متغير داشته باشيم و همه رو بصورت رشته اي به يكديگر وصل كنيم. به عنوان مثال در برنامه ما اسم مردم در 3 تا متغير ثبت ميشه، بصورت FirstName$ و MiddleName$ و LastName$. حالا مي مي خواهيم متغيري درست كنيم به نام Compeltename$ و توش هر 3 اين متغير ها رو به يكديگر وصل كنيم:




< ?php
$FirstName = "Milad";
$MiddleName = "farid";
$LastName = "Sina";
/*---------------------*/
$CompleteName = $FirstName." ".$MiddleName." ".$LastName;
echo $CompleteName;
? >


در اينجا توسط نقطه، همون عملگر Dot Operator اين 3 متغير رو به يكديگر وصل مي كنم. همچنين چون مي خوام بين كلمات فاصله باشه، فاصله هم به اين صورت" " بينشون مي دهم. خروجي برنامه Milad farid Sina خواهد بود. اگر اون فاصله هارو نمي دادم و دستور رو مانند زير مي نوشتم در اين صورت خروجي برنامه عبارت MiladfaridSina بود.



$CompleteName = $FirstName . $MiddleName . $LastName;


حالا جاش هست بعضي از توابعي كه براي كاربا String ها خيلي به كارمون مياد رو بگيم. در اين نوشته به Reqular Expression ها نمي پردازم چون جاش نيست، ولي در آينده بهشون مي رسيم.

تابع ()substr:



string substr ( string string, int start [, int length])


كار اين تابع جداكردن قسمتي از متن ما مي باشد. به اين صورت كه اين تابع رشته متني را مي گيرد و مي تواند قسمتي از متن رو براي ما جدا كنه. اين تابع 3 تا پارامتر ميگيره. پارامتر اول رشته متن اوليه مي باشد، پارامتر دوم Position حرفي هست كه مي خواهيم از اون به بعد جدا كنيم و پارامتر سوم هم طول رشته متني هست كه مي خواهيم جدا بشه. اگر پارامتر سوم رو مشخص نكنيم اين تابع ادامه متن رو برامون جدا مي كنه. شايد يكم بد توضيح داده باشم ولي توي مثال خوب جا مي افته:

نتيجه دستور

m4s.net (از حرف 4 به بعد در متغير result$ ذخيره مي شود) $result =

m4s (از حرف 4 به بعد 3 حرف در متغير result$ دخيره مي شود) $result =

تابع ()strpos



int strpos ( string haystack, string needle [, int offset])


كار اين تابع دقيقا برعكس تابع ()substr مي باشد. يعني شما يك عبارتي رو در متني جستجو مي كنيد و تابع به شما Position اولين حرف رو ميده. اين تابع اولين نتيجه اي كه پيدا ميكنه رو نشون ميده بنابر اين اگر عين همون عبارت رو بازم داشته باشيد نشون نخواهد داد. اين تابع 3 تا پارامتر ميگيره. پارامتر اول رشته متن اوليه ما مي باشد. پارامتر دوم عبارتي هست كه در رشته متن پيدا ميشه. به خاطر داشته باشيد كه اگر عبارت پيدا نشد تابع مقدار False به ما برميگردونه! و اما پارامتر سوم براي شروع جستجو مي باشد. اگر عددي را مشخص نكنيد از اول رشته متني عبارتي جستجو ميشه و اگر عددي رو مشخص كنيد، از اون Position به بعد جستجو انجام ميشه. به مثال هاي زير دقت كنيد

نتيجه دستور

عدد 4 در متغير result$ ذخيره مي شود. از حرف 4 به بعد عبارت m4s شروع مي شود $result

عدد 3 در متغير result$ ذخيره مي شود. چون بعد از حرف 4، عبارت ما يافت شده $result =

عدد 7 در متغير result$ ذخيره مي شود. از حرف 5 به بعد شروع ميشه به جستجوي براي پيدا كردن ".". Position نقطه بعد از حرف 7 مي باشد. $result = strpos("www.m4s.net",".",5);

تابع ()trim
كار اين تابع حذف تمامي فواصل آغاز و پايان رشته متني مي باشد. به عنوان مثال اگر ما چنين رشته متني داشته باشيم " Milad "، اين تابع تمامي فاصله هاي آغاز و پايان رشته رو حذف ميكنه. به عنوان مثال:



< ?php
$name = " Milad ";
$name =trim($name);
? >


در اين مثال اول در متغير name$ عبارت " Milad " رو ذخيره كرديم، سپس توسط تابع ()trim تمامي فاصله هاي اضافه حذف كرديم و دوباره در متغير name$ ذخيرش كرديم.

توابع ()char و ()ord
تابع ()char كد ASCII حرفي را ميگرد و حرف مربوطه رو بر ميگردونه. و تابع ()ord هم دقيقا بر عكس همين كار رو انجام ميده. يعني كه حرف رو ميگره و كد اسكي اون رو براي ما بر مي گردونه:




< ?php
echo ord("©");
echo chr(169);
? >


عبارت اول كد اسكي © كه همون 169 هست رو نشون ميده، و عبارت دوم هم حرف مربوطه به كد 169 كه همون علامت© رو نشون ميده.

تابع ()strlen
كار اين تابع برگردوندن طول يك رشته متني مي باشد. به عنوان مثال اگر عبارت "M4S.Net" رو به اين تابع بدهيم، تابع به ما عدد 7 رو بر مي گردونه. يه مثال ديگه هم نوشتم:



< ?php
echo strlen("www.m4s.net");
? >


وقتي اين اسكريپت اجرا ميشه، عدد 11 خروجي برنامه مي باشد.

چند تا تابع ديگه هم هست كه جا داشت بگم ولي يكم مبحث رو پيچيده مي كرد، به ياري خدا در بخش ديگه اي از سات كه در نظر دارم، بهشون مي پردازم. خوب تا اينجاي كار يكسري از مسايل بسيار پايه اي php رو گفتيم. در نوشته هاي آينده بيشتر با اين زبان آشنا خواهيد شد. اگر هرگونه سوال يا مشكلي داشتيد در قسمت گفتگوي سايت در انجمن php مطرح كنيد. لطفا به عنوان پيغام شخصي نپرسيد، چون شايد سوال شما، سوال فرد ديگه هم باشه.