تبليغاتX
برنامه نویس کوچولو - extension نویسی برای php

برنامه نویس کوچولو

یادداشتهای یه برنامه نویس خیلی ^ 100 کوچولو

extension نویسی برای php

با سلام به همگی

اگه تو منوال پی اچ پی دیده باشید واسه نوشتن یه ماژول خیلی ساده بایستی کلی کدهای اضافی هم بنویسیم امروز می خوام یه ابزاری رو معرفی کنم بنام swig که توسط آقای David Beazley طراحی شده و می توانید از آدرس http://www.swig.org/ دانلود کنید به ما این امکان رو میده که فقط قسمت اصلی تابع مورد نظر را بنویسید و شما رو از نوشتن کدهای اضافی دیگر راحت می کنه.
البته من این مطلب رو چند وقت پیش تو سایت Iranphp.net توضیح داده بودم ولی چون تو وبلاگ نبود گفتم شاید بدرد کسی بخوره بهر حال اگه دوستان قبلاً دیدن نگن آقا مطلب مطلب تکراریه.

این ابزار کار خود را از طریق خواندن یک فایل رابط که شامل تعاریف متد ها و توابع می باشد انجام می دهد ، سپس بصورت خودکار تبدیل نوع داده ها ، چک کردن ایرادات کد ، ایجاد فایل C ، کامپایل فایل و ایجاد فایل ماژول را انجام می دهد .
این ابزار بسیار مفید و کاری بوده چون از طریق آن می توان کد های مختلف نوشته شده را به راحتی به ماژولهایی نه تنها برای PHP بلکه برای زبانهایی مثل C# , Java , modula3 , perl , php , pike , python , ruby , tcl و ... تبدیل کرد .

خب برای شروع ابتدا فایلی بنام hellomodule.c را ایجاد و برنامه زیر را در اون می نویسیم

#include
void say_hello(const char* name) {
printf("Hello %s!\n", name);
}

یه نکته مهم این که این برنامه ها چون تبدیل به یک library میشن نیاز به تابع main ندارند سپس یک فایل دیگه به اسم hello.I ایجاد کرده و کد زیر را توی اون می نویسیم :

%module hello
extern void say_hello(const char* name);
اکنون دستور زیر را در ترمینال وارد کنید :

swig -php hello.I
ین دستور دو فایل بنامهای hello.php و hello_warp.c به ما میده که حالا نوبت کامپایل این ماژوله ابتدا باید php-devel رو نصب کرده باشید تا بتونیم اونو کامپایل کنیم البته اگه اگه از روی سورس کامپایل کرده باشید نیازی به نصب این بسته نیست
شما باید مسیر قرار گرفتن فایلهای include مرتبط با phpرو بدونید که میتونید از دستور زیر برای بدست آوردن این اطلاعات استفاده کنید

php-config --includes
خروجی این دستور را که مشابه کد زیر است به جای $PHPINCLUDE در دستور کامپایل که در زیر آمده جایگذاری کنید

-I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib

دستور کامپایل :

gcc -fpic -c hellomodule.c hello_wrap.c $PHPINCLUDES

gcc -shared hellomodule.o hello_wrap.o -o php_hello.so

حالا ماژول بدست اومده رو می بایست تو مسیر extension_dir کپی کنید و بعد از restart کردن PHP کد زیر را درون یک فایل PHP قرار داده و اجرا کنید :

	if(!extension_loaded('hellomodule'))
dl("hellomodule.so");
say_hello("Alireza meskin malek");
?>

حال باید این فایل رو اجرا کرد من که از طریق کنسول اجرا می کنم :

php -f hello.php

خروجی به صورت زیر خواهد بود که نشان دهنده اینست که ماژول به درستی نصب شده و کار می کند

Alireza meskin malek

این مثالی کوچک از ابزاری بزرگ بنام swig است . البته در منوال خود ابزار مثالهایی یرای نوشتن کلاس وجود داره.
امیدوارم که مفید بوده باشه.
+ نوشته شده در  سه شنبه هفتم اسفند 1386ساعت 18:19  توسط علیرضا مسکین ملک  |