چگونگی توسعه PHP

اکـسـیـژن

جمعه، 1 مهر 1384

چگونگی توسعه PHP

ارسال شده توسط امید در پی‌اچ‌پی در 00:39

در اين مقاله به بررسي چگونگي توسعهء PHP مي پردازيم. اين مقاله کلا توسط اينجانب نوشته شده و هرگونه کپي برداري از اون بدون ذکر نام نويسنده و منبع و کلا انتشار بخشي از مقاله ممنوع مي باشد.

براي فهميدن اين مقاله بايد از سيستم عامل لينوکس اطلاعاتي داشته باشيد و کلا برنامه نويسي (مخصوصا C) بدونيد. در غير اين صورت، خوندن اين مقاله براتون بي فايده خواهد بود.

مي توانيد نسخهء document برنامه رو از لينک زير بگيريد: http://www.oxygenws.com/conf/phpconf/how_to_extend_php.doc

این مقاله با کمی تغییر در کتاب PHP آقای جعفر نژاد قمی، به درخواست ایشون (از طریق ایمیل)، در کتابشون با نام "امید تقی زاده"!! چاپ شده است.



%

چکیده

در این مقاله به بررسی نحوهء توسعهء PHP می پردازیم. یکی از بزرگترین محاسن برنامه های open source از جمله PHP، باز بودن متن برنامهء آنهاست که به توسعه دهندگان این امکان را می دهد تا برنامهء مورد نظر را طبق درخواست ها و نیاز های خودشان تغییر داده و از آن استفاده کنند. پس از خواندن این مقاله شما خواهید توانست توسعه های ساده ای برای PHP نوشته و از آنها در پروژه های خود استفاده کنید.

کلمات کلیدی

PHP، برنامه نویسی، لینوکس، open source


1. مقدمه

در این مقاله به بررسی نحوهء توسعهء PHP می پردازیم. یکی از بزرگترین محاسن برنامه های open source از جمله PHP، باز بودن متن برنامهء آنهاست که به توسعه دهندگان این امکان را می دهد تا برنامهء مورد نظر را طبق درخواست ها و نیاز های خودشان تغییر داده و از آن استفاده کنند. به عنوان مثال از تاریخ شمسی در PHP پشتیبانی نمی شود و شما می توانید با توسعهء این زبان، برای پشتیبانی این تقویم، آن را برای خود مناسب و قابل استفاده کنید.

پس از خواندن این مقاله شما خواهید توانست توسعه های ساده ای برای PHP نوشته و از آنها در پروژه های خود استفاده کنید. در این مقاله با هم توسعه ای ساده برای PHP خواهیم نوشت.

برای درک مطالب این مقاله احتیاج به داشتن اطلاعاتی در مورد زبان برنامه نویسی C و PHP و روش کامپایل کردن در لینوکس دارید. زبان برنامه نویسی این مقاله C بوده و محیط کاری لینوکس می باشد. پیش فرض آن است که شما توانایی نصب برنامه های مختلف تحت لینوکس را دارید. تمامی کار های این مقاله تحت خط فرمان یا command line انجام می شود و شما باید تسلط و درک کافی در این مورد را نیز داشته باشید.


2. برنامه های مورد نیاز

برای توسعهء PHP احتیاج به نرم افزار هایی داریم که مسئولیت عملیات کامپایل کردن در لینوکس را دارند. لیستی از برنامه های مورد نیاز را در زیر می بینید، این نرم افزار ها را می توانید از آدرس www.gnu.org گرفته و روی سیستم لینوکس تان نصب کنید. در صورتی که از توسعه های معروف لینوکس استفاده می کنید اکثر این برنامه ها را نصب شده دارید.

• bison
• flex
• m4
• autoconf
• automake
• libtool
• gcc یا هر نوع کامپایلر دیگر
• make
• cvs از سایت www.cvshome.org

پس از نصب برنامه های فوق، احتیاج دارید نسخهء قابل توسعهء PHP یعنی نسخهء CVS یاConcurrent Version System آن را از آدرس http://cvs.php.net بگیرید و آمادهء توسعه شوید. برای این کار باید تحت خط فرمان لینوکس تان دستوری مشابه دستور زیر تایپ کرده و به جای X، Y و Z شمارهء نگارش PHP ای که قصد گرفتن آن را دارید را وارد کنید. با اجرای این دستور متن برنامه های PHP از اینترنت گرفته می شود و با شاخه ای به نام php-src روی دیسک سخت شما ذخیره می شود.

CODE:
cvs -d :pserver:cvsread@cvs.php.net:/repository checkout -r php_X_Y_Z php-src



3. توسعهء PHP

3.1. هدف برنامه و آماده کردن محیط


می خواهیم تابعی به PHP اضافه کنیم به شکل salam() که به عنوان ورودی یک رشته را دریافت کرده و رشته ای به صورت salam STRING را بر گرداند.

به عنوان اولین قدم، به شاخهء PHP رفته و سپس به شاخهء ext آن می رویم و فایلی را در مورد نوع توابعی که قصد توسعه داریم می سازیم. در این فایل که ما نام آن را salam.def می گذاریم به ترتیب نوع خروجی توابع، نام تابع، نام و نوع پارامترهای ورودی، یک " " (فاصله) به عنوان جدا کننده و رشته ای که توضیح مختصری از آن تابع باشد را می نویسیم. در این فایل، هر تابع را باید در یک خط بنویسیم. در زیر به نمونه فایل مورد نیاز برای توسعهء تابع مان توجه می کنیم:

CODE:
string salam(string arg) return "salam ARG"


توجه کنید که تمامی مقادیر بعد از پرانتز بسته تا آخر خط ، توضیحات تابع می باشند.

PHP برنامه ای به نام ext_skel برای آماده سازی مقدمات توسعه دارد، که در شاخهء ext قرار دارد و شما می توانید به عنوان دومین قدم توسعه، از آن استفاده کنید. برای ادامهء توسعه احتیاج داریم از خط زیر استفاده کرده تا مجموعهء فایل های مورد نیاز توسط این برنامه ساخته شود.

CODE:
./ext_skel –extname=salam –proto=salam.def


با اجرای این دستور شاخه ای به نام مقدار جلوی –extname ساخته شده و فایل های مورد نیاز نیز در آن قرار می گیرد. این فایل ها عبارتند از:
• config.m4
• CREDITS
• EXPERIMENTAL
• salam.c
• salam.php
• Makefile.in
• php_salam.h
• شاخهء tests


3.2. توسعهء فایل ها

یکی از مهمترین و اصلی ترین فایل هایی که لازم است تغییر دهیم و تمامی کدهای اصلی برنامهء ما در آن قرار دارد، فایل salam.c می باشد. با باز کردن این فایل، اولین قسمت مهمی که مشاهده می کنید، خطوط زیر می باشد:

CODE:
/<strong> {{{ salam_functions[]<br />  </strong><br />  <strong> every user-visible function must have an entry in salam_functions[]<br />  </strong>/<br /> function_entry salam_functions[] = {<br />     PHP_FE(confirm_salam_compiled,  NULL)  /<strong> for testing; remove later </strong>/<br />     PHP_FE(salam,   NULL)<br />     {NULL, NULL, NULL}  /<strong> must be the last line in salam_functions[] </strong>/<br /> };<br /> /<strong> }}} </strong>/


این مقادیر توسط فایل salam.def که تعریف کرده بودیم ساخته شده و در صورتی که فایل salam.def را بدون نقص نوشته باشیم، احتیاجی به ایجاد تغییر در این قسمت نداریم. توجه کنید که اولین تابع معرفی شده یعنی confirm_salam_compiled یک تابع برای تست کامپایل شدن یا نشدن سری توابع مان بوده که پس از موفقیت در کامپایل، می توانیم خط مربوطه را حذف کنیم.

کدهای مهم بعدی، مشابه بخش زیر خواهد بود که شامل توابع پیش فرض زمان فراخوانی و اتمام کار توابع مورد نظر می باشد. این بخش، اطلاعاتی در مورد نوع، نگارش و نام توسعهء ما را نیز داراست.

CODE:
zend_module_entry salam_module_entry = {<br />   STANDARD_MODULE_HEADER,<br />   "salam",<br />   salam_functions,<br />   PHP_MINIT(salam),<br />   PHP_MSHUTDOWN(salam),<br />   PHP_RINIT(salam), /<strong> replace with NULL if no request init code </strong>/<br />   PHP_RSHUTDOWN(salam), /<strong> replace with NULL if no request shutdown code </strong>/<br />   PHP_MINFO(salam),<br />   "0.1", /<strong> replace with version number for your extension </strong>/<br />   STANDARD_MODULE_PROPERTIES<br /> };


برای تابعی که ما می خواهیم توسعه دهیم باید مقادیر PHP_RINIT(salam) و PHP_RSHUTDOWN(salam) را با NULL جایگزین کنیم، پس کد شما چیزی شبیه مقادیر زیر خواهد شد:

CODE:
zend_module_entry salam_module_entry = {<br />   STANDARD_MODULE_HEADER,<br />   "salam",<br />   salam_functions,<br />   PHP_MINIT(salam),<br />   PHP_MSHUTDOWN(salam),<br />   NULL,<br />   NULL,<br />   PHP_MINFO(salam),<br />   "0.1", /<strong> replace with version number for your extension </strong>/<br />   STANDARD_MODULE_PROPERTIES<br /> };


سپس توابع PHP_MINIT(salam)و PHP_MSHUTDOWN(salam) را پیدا کرده و تعیین می کنیم که مقدار SUCCESS را برگردانند. پس کد این بخش برنامهء ما شبیه کد زیر می شود:

CODE:
PHP_MINIT_FUNCTION(salam) {<br />     return SUCCESS;<br /> }<br /> PHP_MSHUTDOWN_FUNCTION(salam) {<br />     return SUCCESS;<br /> }


سپس به اصلی ترین تابع می رسیم که باید تمام وظایف مورد نظر برای تابع salam را در آن توسط زبان C نوشته تا خروجی مناسب را برای ما تولید کند. کدهای شما باید بعد از خط return بیاید و خط های بالای آن بدون تغییر بماند (این بدون تغییر ماندن به دلیل آگاهی نداشتن ما برای تغییر آنهاست. صحبت کامل در مورد این خطوط از حوصلهء این مقاله خارج بوده و فقط کافیست بدانید که این کدها شامل مراحل پردازش مقادیر ورودی تابع است).

CODE:
/<strong> {{{ proto string salam(string arg)<br />    return "salam ARG" </strong>/<br /> PHP_FUNCTION(salam)<br /> {<br />     char <strong>arg = NULL;<br />     int argc = ZEND_NUM_ARGS(  );<br />     int arg_len;<br />     <br />     if (zend_parse_parameters(argc TSRMLS_CC, "s", &amp;amp;arg, &amp;amp;arg_len)<br />         == FAILURE)<br />         return;<br />         <br />     // YOUR CODES SHOULD COME HERE<br /> }   <br /> /</strong> }}} */


تابع PHP_FUNCTION برای PHP نام یک تابع را مشخص می کند و مقادیر داخل این تابع، اعمالی را که تابع PHP در هنگام فراخوانی آن در برنامه های PHP باید انجام دهد را نشان می دهد. همانطور که گفته شد، بعد از چند خط اول، کدهای ما قرار خواهد گرفت و برنامهء ما به صورت زیر در خواهد آمد:

CODE:
PHP_FUNCTION(salam) {<br />     char *arg = NULL, *sout;<br />     int argc = ZEND_NUM_ARGS(  );<br />     int arg_len, len; <br />   <br />     if (zend_parse_parameters(argc TSRMLS_CC, "s/", &amp;amp;arg, &amp;amp;arg_len)<br />         == FAILURE)<br />         return;<br /> <br />     strcpy(sout, "salam ");<br />     strcat(sout, arg);<br />     len = strlen(sout);<br />     RETURN_STRINGL(sout, len, 1);<br /> }


ابتدا متغیر هایی به نام sout از نوع کاراکتر و len از نوع عددی تعریف کرده ایم. در خط بعد از return مقدار "salam " را در متغیر sout کپی کرده و سپس مقادیر sout و arg که رشتهء ورودی ما می باشد را به هم متصل می کنیم و به sout انتساب می دهیم. سپس طول sout را به دست آورده و از طریق تابع RETURN_STRINGL (این تابع جزو توابع ZEND API بوده و برای برگرداندن مقادیر استفاده می شوند، این توابع محدود و تعیین شده می باشند) مقدار رشته و طول آنرا بر می گردانیم. سومین متغیر در تابع RETURN_STRINGL مشخص کنندهء صحت خروجی یا وجود اشکال در خروجی می باشد.

هم اکنون توسعه تابع ما به پایان رسیده، اما برای امکان کامپایل تابع توسعه داده شده لازم است مقادیر لازم برای درست کامپایل شدن تابع را تصحیح و کامل کنیم. پس فایل salam.c را ذخیره کرده و می بندیم و فایل config.m4 را برای اِعمال تغییرات باز می کنیم. در این فایل، از قبل، خطوط لازم وجود دارند ولی به صورت توضیح یا comment در آمده اند که شما باید این خطوط را از این حالت خارج کنید. پس از این کار خطوطی دقیقاً مشابه خطوط زیر خواهید داشت (توجه کنید که هیچ علامتی در ابتدای این خطوط نباشند):

CODE:
PHP_ARG_ENABLE(salam, whether to enable salam support,<br /> [  --enable-salam           Enable salam support])


توسعهء تابع ما به پایان رسید، حال نوبت کامپایل کردن PHP است تا بتوانید از تابعی که نوشتیم در آن استفاده کنیم. در بخش بعد به این مسئله می پردازیم.


4. کامپایل PHP

قبل از اجرای دستورات کامپایل، برای اینکه PHP، توسعهء جدید ما را بشناسد، لازم است دستور buildconf را که در شاخهء اصلی PHP قرار دارد، اجرا کنیم. این دستور را باید به شکل زیر وارد کنیم:
CODE:
./buildconf


سپس باید برنامه را با توسعه ای که نوشتیم کامپایل کنیم. این کار در PHP شبیه خیلی از برنامه های دیگر تحت لینوکس انجام می شود. به این صورت که شما باید مقداری مشابه مقدار --enable-salam را در هنگام configure کردن PHP اِعمال کنید. سپس سری دستورات make را برای نصب PHP اجرا می کنیم. دستوراتی که اجرا می کنیم به ترتیب، شبیه دستورات زیر خواهد بود، توجه کنید که تمامی این دستورات باید در شاخهء اصلی PHP اجرا شوند:

CODE:
./configure --enable-salam<br /> make<br /> make install


اکنون PHP شما با تابع شما توسعه پیدا کرده است. حال نوبت آزمایش تابع است تا مشاهده کنیم که درست کار می کند. برای این منظور فایلی با توسعهء php و نام test ساخته و مقادیر زیر را در آن می نویسیم:
CODE:
&amp;lt;?php<br />     echo salam('donya');<br /> ?>


سپس، در خط فرمان دستور زیر را اجرا کنید. می بینید که مقدار "salam donya" در خروجی چاپ خواهد شد.

CODE:
/usr/bin/php –q test.php




5. جمع بندی

در این مقاله یاد گرفتیم که چطور از برتری های برنامه های open source استفاده کرده و از آنها برای رسیدن به اهداف مان استفاده کنیم و چطور آنها را توسعه دهیم.
تابعی برای PHP ساختیم، که قبلا در آن وجود نداشت و از آن در برنامه ای که با PHP نوشتیم استفاده نمودیم.
به یاد داشته باشید که این مقاله، فقط توضیحات مختصری در مورد توسعهء PHP ارایه کرده و قصد آشنا کردن شما با این مقوله را داشته است.
نظر ها (7) | دنبالک ها (0)
Vote for articles fresher than 365 days!
Current karma: none, 0 vote(s)
4244 hits

دنبالک ها
یک آدرس دنبالک برای ارسال

هیچ دنبالکی وجود ندارد

نظر ها
نمایش نظرات به صورت (خطی | بند کشی شده)

salam agha omid.man mansour to gazzagam.site bahali dari.albate elmie hamash va bishtar be darde ahle bakhiash mikhore.vali az inja malome ke kheyli be barname haye open source alaghe dari.be nazare manam php zabane kheyli ghaviee.vali az chand jahat fekr konam ye kam moshkel peyda kone ba ma farsi zabanha.albate in moshkelatesh ghabele hale.va ya inke serverhash amniatesh ziad bala nist.albate inam shayad be khatere in bashe ke barnamehaye mese mt va phpnuke ke zod gaf midan ziad shode va vase hamin esme php ro bad kardan.vali az nazare sortane serverash(be dalile arzontar bodanesh)behtare.(akhe serveraye windows ke az bas gerone sithaye dolati ham az pasesh bar nemian va ye mosht servere ashghal ba sorate mozakhraf migiran!).harchie khoshhal shodam az didane sitedon
#1 منصور (سایت) در 1384-07-01 14:42 (پاسخ)
ممنون از نظری که نوشتی.
در مورد فارسی زبان ها و امنیت و اینا که مشکلی نیست. مشکلات phpNuke هم به خودش مربوطه، نه PHP. ضمن اینکه MT رو هم با پرل نوشتند.
امیدوارم موفق و بازمتن باشی :-)
#1.1 امید (سایت) در 1384-07-01 15:13 (پاسخ)
آقا دمت گرم. عالی بود
#1.1.1 iman_ebru (سایت) در 1384-07-07 09:21 (پاسخ)
:-O
#1.2 ناشناس در 1386-01-24 09:30 (پاسخ)
کیلی خوب بود واقعن عالیه
#2 yasna در 1386-01-20 14:50 (پاسخ)
مخ من یکی که سوت کشید!!!
#3 نبی (سایت) در 1386-02-01 09:42 (پاسخ)
از مقاله بسیار مفید شما متشکرم.
#4 محمد در 1386-03-24 02:59 (پاسخ)

ارسال نظر

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
BBCode format allowed
:'( :-) :-| :-O :-( 8-) :-D :-P ;-) 
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

 
نظرات ارسال شده قبل از نمایش داده شدن، باید مدیریت شوند.
 
 
این سایت توسط امید متقی راد با ایدهء اصلی از طرح ولادیمیر سیمو ویچ طراحی شده است و هرگونه کپی برداری از آن با ذکر منبع آزاد است.

خوراک‌ها

  • XML RSS 2.0 feed
  • XML RSS 2.0 نظر ها

ایمیل من

omi...@gmail.com

Google the Site

موضوعات

  • XML فایرفاکس (1)
  • XML لینوکس (10)
  • XML متفرقه (24)
  • XML چیستان (2)
  • XML پی‌اچ‌پی (18)
  • XML زنگ تفریح (2)
  • XML طراحی وب (4)

تمامی موضوعات

محبوب ترین مطالب

  • تقویم فارسی برای Google Personalized Homepage (113)
  • روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری (46)
  • کارت عروسی الکترونیکی (44)
  • تکامل چیست؟ (42)
  • روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD (41)
  • زمین و گربه (40)
  • کاراکتر های فارسی در عکس توسط PHP (40)
  • بزرگ ترین عدد (36)
  • چگونگی فارسی سازی phpMyAdmin (32)
  • پی.اچ.پی ۵.۳ و تقویم فارسی (30)

آمار

آخرین نوشته: 1389-01-26 06:48
تعداد مطالب: 63
تعداد نظر ها: 896

لینک

  • Friends
    • Iman Raad
    • Ali Sattari
    • Armin Boroumand
    • Reza Behrouz
    • Abbas Esmaeeli
    • Ashkan Ghassemi
    • Emil Sedgh
    • Opatan
    • Sajad Kioumarsi
    • Amir Khatibzadeh
    • Milad Rastian
    • Morteza Zafari
    • Masoud Gheibi
    • Hadi Rezaee
    • Houtan Alghaspour
    • Mahdi Keramati
    • shaniaki
    • Hamid Hashemi
    • Behrouz Rad
    • Masoud
    • Ramin Farmani
    • Ali Farhadi
    • Nabi
    • Nima Shayafar
  • Other sites
    • Scientific Articles
    • Orisinal
  • OXYGEN Web Solutions
  • this blog
  • DynamicGrids
  • Serendipity

لینک های روزانه

مقایسه‌ی کرنل ویندوز و لینوکس
عضویت در تیم اهدای عضو
Who uses Linux?
ده تغییر مهم مهاجران به لینوکس!
بهینه سازی فایرفاکس
امنیت شبکه (باگ تراک)
طریقه توسعه افزونه، برای فایرفاکس
اینترنت اکسپلورر 7 را بمباران کنید
رفع مشکل حافظه فایرفاکس
نمایش محتویات cache شده در فایرفاکس

قبل | بعد

PageRank Counter

کپی برداری از مطالب سایت طبق لایسنس CC مجاز می باشد

Creative Commons License - Some Rights Reserved
Original content in this work is licensed under a Creative Commons License

نظر ها

علیرضا about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 20:55
ممنون از راهنماییتون مشکل از ورژن جدی د PHP هست که این bug رو داره
امید about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 11:51
من هم دلیل این اتفاق رو نمی‌دونم! اما مطمئنن مشکل از این تابع نیست، چون کار ا ین تابع چیز مت [...]
علیرضا about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 09:27
من نسخه های gd و mbs tring رو روی سرور و لوکال تست گرفتم. با هم مطابقت داشتن. هم ینطور از نسخه [...]
علیرضا about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 09:13
ممنونم از جوابتون من این کد رو با فون ت های مختلفی تست کرد م این دو تا عکس رو براتون آپلود ک [...]
امید about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 01:16
سلام، ممکنه مشکل از نسخه‌ی GD باشه که توی سرور نصب شده. یک phpinfo در لوکال و سرور بگیر و [...]
علیرضا about کاراکتر های فارسی در عکس توسط PHP
ی، 07.06.1389 18:33
سلام من از این کده ا استفاده کردم روی local درست جواب میده ولی وقتی آپلودش می کنم برخی از حر [...]
امید about کاراکتر های فارسی در عکس توسط PHP
ی، 07.06.1389 12:15
شرمنده دیر پاسخ می‌د م... محتوای فایل مشکل داره یا فقط نام خود فایل؟ کتاب‌خ انه‌ی GD به نظ [...]
محمد يوسفي about کاراکتر های فارسی در عکس توسط PHP
پ، 04.06.1389 06:31
آقا من يک پورتال LMS دارم . ولي در قسمت ريپورت ها وقتي از گز ارشات با فرمت اکسل ذ خيره سازي رو ا [...]
امید about روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری
ج، 29.05.1389 14:44
با این روشی که من گف تم (هر چند قدیمی است ) تست کن. اگر اروری داد، بهم بگو. پ. ن: چون من فایل [...]
babak about روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری
ج، 29.05.1389 11:04
من از نرم افزار allo k 3gp psp mp4 ipod v ideo converter استفا ده می کنم بدین صورت که ابتدا فایل [...]

مدیریت وبلاگ

باز کردن صفحه ورود