قبل از هر چیز یه نگاه کوتاه و جزئی بر تاریخچه 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 < language=""php"" > ... < / > بصورت تگ های 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 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 = substr(""www.m4s.net"",4); m4s (از حرف 4 به بعد 3 حرف در متغیر result$ دخیره می شود) $result = substr(""www.m4s.net"",4,3); تابع ()strpos int strpos ( string haystack, string needle [, int offset]) کار این تابع دقیقا برعکس تابع ()substr می باشد. یعنی شما یک عبارتی رو در متنی جستجو می کنید و تابع به شما Position اولین حرف رو میده. این تابع اولین نتیجه ای که پیدا میکنه رو نشون میده بنابر این اگر عین همون عبارت رو بازم داشته باشید نشون نخواهد داد. این تابع 3 تا پارامتر میگیره. پارامتر اول رشته متن اولیه ما می باشد. پارامتر دوم عبارتی هست که در رشته متن پیدا میشه. به خاطر داشته باشید که اگر عبارت پیدا نشد تابع مقدار False به ما برمیگردونه! و اما پارامتر سوم برای شروع جستجو می باشد. اگر عددی را مشخص نکنید از اول رشته متنی عبارتی جستجو میشه و اگر عددی رو مشخص کنید، از اون Position به بعد جستجو انجام میشه. به مثال های زیر دقت کنید نتیجه دستور عدد 4 در متغیر result$ ذخیره می شود. از حرف 4 به بعد عبارت m4s شروع می شود $result = strpos(""www.m4s.net"",""m4s""); عدد 3 در متغیر result$ ذخیره می شود. چون بعد از حرف 4، عبارت ما یافت شده $result = strpos(""www.m4s.net"","".""); عدد 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 خروجی برنامه می باشد.