我們可以在ext
目錄下看到所有的php原生擴充套件,其中包括了熟悉的curl
,json
,mbstring,******xml
,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
,這裡填上自己開發的擴充套件名稱。想深入了解各個引數的作用可以看這裡:
./ext_skel --extname=hello
ext目錄下多了乙個hello目錄,我們後續的工作都在這個目錄下面,工具已經為我們自動生成了一些檔案。
config.m4
配置檔案
開發php擴充套件,在寫c**之前,要先配置一下這裡。我們開啟可以看到詳細的注釋說明,dnl是注釋語法。
如果你的擴充套件用到了外部依賴,就配置–with-hello選項,否則配置--enable-hello
選項,刪除這下面3行的dnl
注釋
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 = ;
暫時都不需要修改,知道這是乙個入口就行。順著這個入口,我們繼續看怎麼給擴充套件新增方法,在hello_functions
方法陣列中已經有了乙個示例方法confirm_hello_compiled
,我們參考它寫我們的方法hello_world
const zend_function_entry hello_functions = ;
先在擴充套件的方法陣列中新增上hello_world
,然後再定義hello_world
。找到confirm_hello_compiled方法定義的地方,在它下面依葫蘆畫瓢,php_printf
是zend engine
中的printf
方法。
php_function(hello_world)
最後就是編譯安裝我們的擴充套件了,安裝過php擴充套件的同學不用看,沒有經驗的可以參考一下。
/usr/local/php/bin/phpize
./configure --
with
-php
-config
=/usr/local/php/bin/php-config
make
make test
make install
現在php的擴充套件目錄中已經有了hello.so
這個檔案,在php.ini
中新增上擴充套件的配置
extension =hello.so
寫乙個test.php方法,執行指令碼就可以看到"hello world!"
<?php
hello_world();
PHP7擴充套件開發之hello word
原文出處 本文是以php7作為基礎,講解如何從零開始建立乙個php擴充套件。本文主要講解建立乙個擴充套件的基本步驟都有哪些。示例中,我們將實現如下功能 echo say 輸出內容 php test.php hello word 在擴充套件中實現乙個say方法,呼叫say方法後,輸出 hello wo...
PHP7擴充套件開發之hello word
echo say 輸出內容 php test.php hello word在擴充套件中實現乙個say方法,呼叫say方法後,輸出 hello word。php為我們提供了生成基本 的工具 ext skel。這個工具在php源 的.ext目錄下。cd php src ext ext skel extn...
PHP7擴充套件開發之hello word
本文是以php7作為基礎,講解如何從零開始建立乙個php擴充套件。本文主要講解建立乙個擴充套件的基本步驟都有哪些。示例中,我們將實現如下功能 echo say 輸出內容 php test.php hello word在擴充套件中實現乙個say方法,呼叫say方法後,輸出 hello word。php...