با سلام به همگی
اگه تو منوال پی اچ پی دیده باشید واسه نوشتن یه ماژول خیلی ساده بایستی
کلی کدهای اضافی هم بنویسیم امروز می خوام یه ابزاری رو معرفی کنم بنام 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);
اکنون دستور زیر را در ترمینال وارد کنید :
ین دستور دو فایل بنامهای 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 است . البته در منوال خود ابزار مثالهایی یرای نوشتن کلاس وجود داره.
امیدوارم که مفید بوده باشه.