主要是使用C语言来开发PHP扩展,现在的案例正在一步一步完善中,希望有兴趣的朋友一起来加入和完善,现在已经完成的案例如下:
Dicretory
Explain
php hello word extension
php ini settings and read php ini configure
php returning values
Contributing
创建您的特性分支 (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_WIDUU
ZEND_GET_MODULE(widuu)
#endif
PHP_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');