استارت‌آپ و کارآفرینی

با ++C توسعه دهنده PHP شوید (قسمت دوم)

در مقاله قبل با چراییِ استفاده از ++C برای نوشتن اکستنشن PHP آشنا شدید. حتما کتابخانه PHP-CPP را در لینوکس یا MacOS خود نصب کردید، اگر تا حالا انجام ندادید به مقاله اول مراجعه کنید.

بعد از نصب PHP-CPP برای شروع نوشتن اکستنشن، باید با ساختار فایل‌های ضروری آشنا بشویم. در پوشه پروژه سه فایل با توضیحات زیر خواهیم داشت:

  1. فایل main.cpp که حاوی توابع اصلی اکستنشن ماست.
  2. فایل Makefile حاوی اطلاعاتی برای کامپایلر.
  3. فایل کانفیگ ini

در فایل Makefile اطلاعات مختلفی وجود دارد که ما فقط چند پارامتر را عوض می‌کنیم:

نام extension را به نام مورد نظر خود تغییر می‌دهیم.

NAME = hivehelloworld

مسیر قرارگیری فایل های کانفیگ PHP در سیستم خود را بیابید و در پارامتر زیر جایگزاری کنید.

INI_DIR = /etc/php5/cli/conf.d

 توضیح: در لینوکس توزیع دبیان ویزی (debian wheezy) این آدرس به شکل فوق بود.

فایل کانفیگ ini

این فایل محتوای یک خطی دارد. این خط نام اکستنشن ما را به فایل کانفیگ PHP معرفی خواهد کرد.

extension=hivehelloworld

خب حالا می رویم سرِ اصل مطلب 🙂

فایل main.cpp حاوی یک تابع بنام ()get_module است. این تابع پس از بارگزاری هر کتابخانه در PHP فراخوانی می‌شود. کار آن بازگرداندن آدرسی از رم می‌باشد که اطلاعات مورد نظر درباره اکستنشن در آن آدرس بارگزاری شده است.

#include <phpcpp.h>
#include <iostream>

void hivehello()
{
    Php::out << "Hello World... I'm HIVE" << std::endl;
}

/**
 *  tell the compiler that the get_module is a pure C function
 */
extern "C" {
    
    /**
     *  Function that is called by PHP right after the PHP process
     *  has started, and that returns an address of an internal PHP
     *  strucure with all the details and features of your extension
     *
     *  @return void*   a pointer to an address that is understood by PHP
     */
    PHPCPP_EXPORT void *get_module() 
    {
        // static(!) Php::Extension object that should stay in memory
        // for the entire duration of the process (that's why it's static)
        static Php::Extension extension("hivehelloworld", "1.0");
        extension.add("hivehello", hivehello);
        // @todo    add your own functions, classes, namespaces to the extension
        
        // return the extension
        return extension;
    }
}

همانطور که در بالا مشاهده میکنید، ما یک تابع تعریف کردیم و در تابع ()get_module آن را به اکستنشن خود افزودیم.

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

make

خروجی دستور فوق باید مشابه توضیحات زیر باشد:

g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp
g++ -shared -o hivehelloworld.so main.o -lphpcpp

حالا باید اکستنشن خود را به PHP معرفی کنیم. اگر قبلا اکستنشنی نصب کرده باشید این قسمت برای شما تکراری است:

cp -f hivehelloworld.so /usr/lib/php5/20100525/
cp -f hivehelloworld.ini /etc/php5/cli/conf.d

حال وب سرور خود را ریست کنید. سپس یک فایل با محتوای زیر بسازید و اجرا کنید:

<?php
   echo  hivehello();
?>

من هایو هستم.

موفق باشید…

 

منابع: + +

4 نظرات
  1. بهنام وثوق می گوید

    با تشکر از مهندس ذوقی
    مطالبتان فوق العاده کامل و کاربردی است

    1. علی ذوقی می گوید

      خواهش میکنم مهندس
      خداروشکر

  2. سپهر می گوید

    بسیار عالی بود . لطفا در مورد فریمورک Yii هم مطلب قرار بدید.

    1. علی ذوقی می گوید

      خداروشکر
      مطلبی درباره قابلیتهای Yii2 در تاریخ ۱۱ بهمن ماه در هایو منتشر شده.
      لینک مطلب
      https://startups.ir/Aj7Wr
      ان شاءالله سعی میشه با صلاح دید سردبیر، مقاله های بیشتری در زمینه فریمورک Yii نوشته و منتشر بشه.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.