PHP7擴充套件開發入門

2021-07-23 23:02:29 字數 2579 閱讀 9467

我們可以在ext目錄下看到所有的php原生擴充套件,其中包括了熟悉的curljson,mbstring,******xmlsockets等擴充套件,還有很多沒有用過甚至沒有聽說過的擴充套件,不用在意這些,我們先開啟我們最熟悉的curl來看看,有config.m4配置檔案,有php_curl.hcurl_file.c等源**,還有一些中間檔案,最後還有乙個tests目錄,裡面放的curl擴充套件的單元測試。重點關注config.m4php_curl.hcurl_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_withphp_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_printfzend 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...