在linux下面完成了LAMP的配置環境之後,就可以進行php的擴展開發了。
php中的擴展開發都在源碼包的/ext文件夾之下,可以看到這裡已經有了很多開發好的擴展。比如與數據庫相關的mysql以及xml處理的模塊等等。
首先建立一個文件夾:
mkdir hello
在進入這個文件夾之後,先創建並打開一個配置文件:
vim config.m4
這個給出一個配置問題的實例:
1 PHP_ARG_ENABLE(sample, whether to enable SAMPLE support, 2 [ --enable-sample Enable SAMPLE support]) 3 if test "$PHP_SAMPLE" = "yes"; then 4 AC_DEFINE(SAMPLE, 1, [Whether you have SAMPLE]) 5 PHP_NEW_EXTENSION(sample, sample.c, $ext_shared) 6 fi* 這個配置文件創造了一個--enable-hello的配置選項,而PHP_ARG_ENABLE的第二個選項會在配置的時候顯示出來
1 ?#ifndef PHP_SAMPLE_H 2 /* 防止兩次引入 */ 3 #define PHP_SAMPLE_H 4 /* 定義擴展的性質 */ 5 #define PHP_SAMPLE_EXTNAME "sample" 6 #define PHP_SAMPLE_EXTVER "1.0" 7 /* 當在php的源碼樹之外build的時候,引入配置選項, 在使用phpize工具時,一般都是先定義的 */ 8 #ifdef HAVE_CONFIG_H 9 #include "config.h" 10 #endif 11 /* 引入php標准頭文件 */ 12 #include "php.h" 13 PHP_FUNCTION(hello_world);//聲明擴展中的函數 14 /* 定義入口點的符號,zend在加載這個module的時候會用*/ 15 extern zend_module_entry sample_module_entry; 16 #define phpext_sample_ptr &sample_module_entry 17 #endif /* PHP_SAMPLE_H */最後再注意兩點: * php.h則是一定要引入的
#include "php_sample.h" static function_entry php_sample_functions[] = { PHP_FE(sample_hello_world, NULL)//任何擴展中的函數都要在這裡聲明。把函數名輸出到了用戶空間中 { NULL, NULL, NULL } }; zend_module_entry sample_module_entry = { //創建一個入口 #if ZEND_MODULE_API_NO >= 20010901 //這個是一個版本號 STANDARD_MODULE_HEADER, #endif PHP_SAMPLE_EXTNAME, php_sample_functions, /* Functions 這裡是把php_function加入到Zend中去*/ NULL, /* MINIT */ NULL, /* MSHUTDOWN */ NULL, /* RINIT */ NULL, /* RSHUTDOWN */ NULL, /* MINFO */ #if ZEND_MODULE_API_NO >= 20010901 PHP_SAMPLE_EXTVER, #endif STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_SAMPLE ZEND_GET_MODULE(sample) #endif //這塊區域是當擴展被動態加載的時候,為Zend添加一個引用,記得要添加上就行。 /*真正的函數體的部分*/ PHP_FUNCTION(sample_hello_world) { php_printf("Hello World!\n"); }這就是源碼的內容了。