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

WBOY
Release: 2016-06-23 13:29:56
Original
822 people have browsed it

主要是使用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;}
    Copy after login

    函数 string read_ini(string parameter);

    echo read_ini('widuu.name');
    Copy after login
    source:php.cn
    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template