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

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

WBOY
WBOYOriginal
2016-06-23 13:29:56823Durchsuche

主要是使用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 <admin@widuu.com>" );    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');
    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn