欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP扩展开发教程,通过实例来展示PHP的扩展开发和底层应用原理(C语言非zephir)

程序员文章站 2022-05-14 20:13:38
...

主要是使用C语言来开发PHP扩展,现在的案例正在一步一步完善中,希望有兴趣的朋友一起来加入和完善,现在已经完成的案例如下:

Dicretory Explain
hello_word php hello word extension
widuu php ini settings and read php ini configure
w_string php returning values

Contributing

  • 登录 https://github.com
  • 仓库地址分布 http://github.com/widuu/php_ext
  • 创建您的特性分支 (git checkout -b my-new-feature)
  • 提交您的改动 (git commit -am 'Added some feature')
  • 将您的改动记录提交到远程 git 仓库 (git push origin my-new-feature)
  • 然后到 github.com 网站的该 git 远程仓库的 my-new-feature 分支下发起 Pull Request
  • 下边是INI的小扩展代码片段

    #ifdef HAVE_CONFIG_H#include "config.h"#endif#include "php.h"#include "php_ini.h"#include "ext/standard/info.h"#include "php_widuu.h"ZEND_DECLARE_MODULE_GLOBALS(widuu)const zend_function_entry widuu_functions[] = {    PHP_FE(read_ini,    NULL)           PHP_FE_END  };zend_module_entry widuu_module_entry = {#if ZEND_MODULE_API_NO >= 20010901    STANDARD_MODULE_HEADER,#endif    "widuu",    widuu_functions,    PHP_MINIT(widuu),    PHP_MSHUTDOWN(widuu),    NULL,           NULL,           PHP_MINFO(widuu),#if ZEND_MODULE_API_NO >= 20010901    PHP_WIDUU_VERSION,#endif    STANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_WIDUUZEND_GET_MODULE(widuu)#endifPHP_INI_BEGIN()    STD_PHP_INI_ENTRY("widuu.enable",      "1", PHP_INI_ALL, OnUpdateBool, enable, zend_widuu_globals, widuu_globals)    STD_PHP_INI_ENTRY("widuu.size",      "42", PHP_INI_ALL, OnUpdateLong, size, zend_widuu_globals, widuu_globals)    STD_PHP_INI_ENTRY("widuu.name", "widuu", PHP_INI_ALL, OnUpdateString, name, zend_widuu_globals, widuu_globals)PHP_INI_END()PHP_MINIT_FUNCTION(widuu){    REGISTER_INI_ENTRIES();    return SUCCESS;}/* }}} *//* {{{ PHP_MSHUTDOWN_FUNCTION */PHP_MSHUTDOWN_FUNCTION(widuu){    UNREGISTER_INI_ENTRIES();    return SUCCESS;}/* }}} *//* {{{ PHP_MINFO_FUNCTION */PHP_MINFO_FUNCTION(widuu){    php_info_print_table_start();    php_info_print_table_header(2, "widuu support", "enabled");    php_info_print_table_row(2 , "author", "widuu " );    php_info_print_table_end();    DISPLAY_INI_ENTRIES();}/* }}} */PHP_FUNCTION(read_ini){    char *str,*varname;    int str_len;    if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s" ,&varname,&str_len) == FAILURE){        php_error_docref(NULL TSRMLS_CC, E_WARNING, "don't exists parameter");        return;    }    str = zend_ini_string(  varname, str_len+1, 0 );    if (!str) {        RETURN_FALSE;    }    RETURN_STRING( str , 1);    // str = zend_ini_string("widuu.name", sizeof("widuu.name"), 0);    //  long maxwait = zend_ini_long("widuu.size",  sizeof("widuu.size"), 0);    // if (str == NULL) {    //  php_error_docref("widuu.size", E_WARNING, "config not exists");    // }    // printf("%s\n",str );    // printf("%d\n", maxwait );    // if (name != NULL){    //  printf("%s\n", name);    // }    // RETURN_FALSE;}

    函数 string read_ini(string parameter);

    echo read_ini('widuu.name');