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

WBOY
풀어 주다: 2016-06-23 13:29:56
원래의
822명이 탐색했습니다.

主要是使用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');
    로그인 후 복사
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿