久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP7擴展開發教程之Hello World實現方法示例

這篇文章主要介紹了PHP7擴展開發教程之Hello World實現方法,結合實例形式較為詳細的分析了針對php7擴展的源碼下載、設置、代碼編輯及測試運行相關操作技巧,需要的朋友可以參考下

本文實例講述了PHP7擴展開發教程之Hello World實現方法。分享給大家供大家參考,具體如下:

一、下載PHP源代碼

要開發PHP擴展,需要先下載PHP的源代碼,一方面是因為我們的擴展一般會用到PHP自身定義的函數和宏,另一方面我們可以利用官方提供的工具減少工作量。

我下載了PHP-7.0.2,地址是:http://cn2.php.net/get/php-7.0.2.tar.gz。

解壓源碼壓縮包, tar xzf php-7.0.2.tar.gz,我們現在只需要關注Zend和ext這兩個目錄。

Zend目錄里面包含了PHP的Zend Engine源代碼,有些函數和宏的定義我們需要在這里面簡單地看一下。

ext目錄里面包含了PHP原生的擴展,以及我們開發自己的擴展時可以利用的工具,Linux下使用ext_skel,Windows下使用ext_skel_win32.php

二、使用ext_skel工具

我們可以在ext目錄下看到所有的PHP原生擴展,其中包括了熟悉的curl,json,mbstring,simplexml,sockets等擴展,還有很多沒有用過甚至沒有聽說過的擴展,不用在意這些,我們先打開我們最熟悉的curl來看看,有config.m4配置文件,有php_curl.h,curl_file.c等源代碼,還有一些中間文件,最后還有一個tests目錄,里面放的curl擴展的單元測試。重點關注config.m4,php_curl.h,curl_file.c即可,最簡單的場景下這三個文件就是一個擴展的全部組成部分了。

打開隨便看一下,不算太復雜,但是自己寫一個類似的還是挺頭疼的,這時就需要用到我前面提到的ext_skel工具了。這個工具也在ext目錄下,我們執行一下,./ext_skel --help,可以看到若干參數,我們用到的只有--extname=module,這里填上自己開發的擴展名稱。想深入了解各個參數的作用可以看這里:http://php.net/manual/en/internals2.buildsys.skeleton.php

./ext_skel --extname=hello

ext目錄下多了一個hello目錄,我們后續的工作都在這個目錄下面,工具已經為我們自動生成了一些文件。

config.m4配置文件

開發PHP擴展,在寫C代碼之前,要先配置一下這里。我們打開可以看到詳細的注釋說明,dnl是注釋語法。

如果你的擴展用到了外部依賴,就配置--with-hello選項,否則配置--enable-hello選項,刪除這下面3行的del注釋

PHP_ARG_ENABLE(hello, whether to enable hello support,
Make sure that the comment is aligned:
[ --enable-hello      Enable hello support])

PHP_ARG_WITH和PHP_ARG_ENABLE這兩個宏用來配置configure選項,一個配置需要外部依賴的,另一個配置不需要外部依賴的

配置好的內容,在后面執行configure --help時可以看到。

php_hello.h頭文件

類似于C語音的頭文件,包含了一些自定義的結構和函數聲明,在這個demo中暫時不需要改動

hello.c代碼文件

真正的邏輯代碼都在這個文件中,后面會詳細介紹。

三、編寫代碼

好了,到這一步我們終于要開始寫代碼了,打開hello.c文件。

整個擴展的入口是zend_module_entry這個結構,具體的定義可以在Zend目錄下的zend_modules.h文件中看到,一共有十幾個屬性,快速跳過,我們暫時只需要"hello world"。

zend_module_entry hello_module_entry = {
  STANDARD_MODULE_HEADER,
  "hello",
  hello_functions,
  PHP_MINIT(hello),
  PHP_MSHUTDOWN(hello),
  PHP_RINIT(hello),    /* Replace with NULL if there's nothing to do at request start */
  PHP_RSHUTDOWN(hello),  /* Replace with NULL if there's nothing to do at request end */
  PHP_MINFO(hello),
  PHP_HELLO_VERSION,
  STANDARD_MODULE_PROPERTIES
};

STANDARD_MODULE_HEADER幫我們實現了前面6個屬性

"hello"是擴展的名字

hello_functions是擴展包含的全部方法的集合

后面5個宏分別代表5個擴展特定方法

PHP_HELLO_VERSION是擴展的版本號,定義在頭文件中

STANDARD_MODULE_PROPERTIES幫我們實現了剩下的屬性

暫時都不需要修改,知道這是一個入口就行。順著這個入口,我們繼續看怎么給擴展添加方法,在hello_functions[]方法數組中已經有了一個示例方法confirm_hello_compiled,我們參考它寫我們的方法hello_world

const zend_function_entry hello_functions[] = {
  PHP_FE(confirm_hello_compiled, NULL)    /* For testing, remove later. */
  PHP_FE(hello_world, NULL)
  PHP_FE_END /* Must be the last line in hello_functions[] */
};

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
下面小編就為大家分享一篇Ubuntu上安裝yaf擴展的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇php通過pecl方式安裝擴展的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
本篇文章是小編為大家整理的關于PHP開發規范的相關內容,適合PHP初學者,一起參考下吧。
微信公眾好的開發很火,小程序更火。小編給大家分享一個PHP開發之用微信遠程遙控服務器的實例代碼,需要的朋友參考下
這篇文章主要為大家詳細介紹了PHP微信開發之微信錄音臨時轉永久存儲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 九色在线观看 | 色爱区综合 | 一区二区视频 | 国产三级电影网站 | 中文字幕一区二区三区乱码在线 | 91精品国产99久久 | 青青久在线视频 | 日本一区二区三区在线观看 | 一区二区三区电影在线观看 | 日韩精品 电影一区 亚洲 | 日韩成人在线一区 | 一区精品国产欧美在线 | 国产成人综合av | 成人国产在线视频 | 亚洲综合天堂 | 欧美日韩在线视频一区 | 黄在线| 黑人巨大精品欧美一区二区免费 | 狠狠的干 | 亚洲一区二区三区视频 | 久久国产精品免费视频 | 99久久久无码国产精品 | 午夜影院黄 | 精品视频一区二区 | 亚洲综合色站 | 国产精品久久久久久av公交车 | 国产日韩欧美在线 | 成年人在线视频 | 99久久精品免费视频 | 日日夜夜天天 | 日韩高清国产一区在线 | 热99精品视频 | 久久久久亚洲精品 | 午夜看片网站 | 91av在线视频观看 | 欧美日韩在线综合 | 黑人性hd| 欧美亚洲另类丝袜综合网动图 | 亚洲国产成人精品女人久久久 | 精品国产欧美日韩不卡在线观看 | 国产精品免费一区二区三区 |