自己動手用C擴充PHP(三)

來源:互聯網
上載者:User

在上兩章裡講述了擴充模組的基本用法,相信讀者已經能夠構建自己的擴充模組了,接下來,我們來看看幾個重要的函數:

 

1、PHP_MINIT_FUNCTION(MyModule);

 

當模組被Zend Engine(ZE)載入後,例如Apache啟動,載入了PHP模組,ZE會對每一個擴充模組調用此函數(如果有的話),可以在該函數裡進行一些初始化操作。

 

2、PHP_RINIT_FUNCTION(MyModule);

 

對於每一個“使用”該模組的PHP指令碼請求前,都執行該函數(如果有的話),最好的例子:Session擴充模組,如果在一個PHP指令碼裡執行session.start(),Session模組的PHP_RINIT_FUNCTION()將被調用。詳情可以看看session模組的原始碼。

 

3、PHP_RSHUTDOWN_FUNCTION(MyModule);

 

與PHP_RINIT_FUNCTION()相反,該函數是在一個PHP指令碼執行完畢後執行。

 

4、PHP_MSHUTDOWN_FUNCTION(MyModule);

 

當ZE收到shutdown訊號後,例如apache卸載PHP模組,ZE對每一個模組調用此函數,最後關閉自己的核心子系統。

 

---------------------------------------------

 

如何使用以上的函數?

 

首先,在標頭檔("mymodule.h")裡聲明:

 

PHP_MINIT_FUNCTION(MyModule);
PHP_MSHUTDOWN_FUNCTION(MyModule);
PHP_RINIT_FUNCTION(MyModule);
PHP_RSHUTDOWN_FUNCTION(MyModule);

 

然後在你的“mymodule.c”裡實現zend_module_entry結構:

 

zend_module_entry MyModule_module_entry = {
    #if ZEND_MODULE_API_NO >= 20010901
        STANDARD_MODULE_HEADER,
    #endif

 

    "MyModule",
    MyModule_functions,
    PHP_MINIT(MyModule),
    PHP_MSHUTDOWN(MyModule),
    PHP_RINIT(MyModule),
    PHP_RSHUTDOWN(MyModule),
    NULL,

 

    #if ZEND_MODULE_API_NO >= 20010901
        "0.1",
    #endif

 

    STANDARD_MODULE_PROPERTIES
};

 

// 實現 PHP_MINIT_FUNCTION() 等等 ...
PHP_MINIT_FUNCTION(MyModule)
{
    // 你的實現代碼 ...
    return SUCCESS;
}


其實ext目錄下的ext_skel程式建立擴充模組代碼架構的時候都自動化幫你實現了這些結構,依照說明填充需要的代碼即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.