#ifdef HAVE_CONFIG_H #include "config.h" #endif
#include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_icbc.h" #include "icbcapi.h" static int le_icbc; zend_function_entry icbc_functions[] = { PHP_FE(icbc_sign,NULL) PHP_FE(icbc_vsign,NULL) PHP_FE(icbc_getCertID,NULL) {NULL, NULL, NULL} /* Must be the last line in icbc_functions[] */ }; zend_module_entry icbc_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "icbc", icbc_functions, PHP_MINIT(icbc), PHP_MSHUTDOWN(icbc), PHP_RINIT(icbc), /* Replace with NULL if there's nothing to do at request start */ PHP_RSHUTDOWN(icbc), /* Replace with NULL if there's nothing to do at request end */ PHP_MINFO(icbc), #if ZEND_MODULE_API_NO >= 20010901 "0.1", /* Replace with version number for your extension */ #endif STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_ICBC ZEND_GET_MODULE(icbc) #endif PHP_MINIT_FUNCTION(icbc) { return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(icbc) { return SUCCESS; } PHP_RINIT_FUNCTION(icbc) { return SUCCESS; } PHP_RSHUTDOWN_FUNCTION(icbc) { return SUCCESS; } PHP_MINFO_FUNCTION(icbc) { php_info_print_table_start(); php_info_print_table_header(2, "icbc support", "enabled"); php_info_print_table_end(); } PHP_FUNCTION(icbc_sign) { char* src; int srclen; char* pkey; int keylen; char* keypass; int keypasslen; char* signedbuf; int signedbuflen; FILE* fp; char key[2000]; int rcc;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"sss",&src,&srclen,&pkey,&keylen,&keypass,&keypasslen) == FAILURE){ return; }
fp = fopen(pkey,"rb"); if(fp == NULL) { return; } fseek(fp,2,SEEK_SET); fread((void*)key,609,1,fp); fclose(fp);
if(rcc = sign(src,srclen,key,607,keypass,&signedbuf,&signedbuflen) >= 0){ base64enc(signedbuf,signedbuflen,&signedbuf,&signedbuflen); src = estrndup(signedbuf,signedbuflen); if(signedbuf != NULL) infosec_free(signedbuf); RETURN_STRING(src,1); }else{ RETURN_LONG(rcc); } }PHP_FUNCTION(icbc_vsign) { char* src; int srclen; char* cert; int certlen; char* vsignedbuf; int vsignedbuflen; FILE* fp; char vcert[2000]; int rcc;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"sss",&src,&srclen,&cert,&certlen,&vsignedbuf,&vsignedbuflen) == FAILURE){ return; }
fp = fopen(cert,"rb"); if(fp == NULL) { return; } fread((void*)vcert,1525,1,fp); fclose(fp);
base64dec(vsignedbuf,vsignedbuflen,&vsignedbuf,&vsignedbuflen);
if(rcc = verifySign(src,srclen,vcert,1525,vsignedbuf,vsignedbuflen) >= 0){ if(vsignedbuf != NULL) infosec_free(vsignedbuf); RETURN_TRUE; }else{ if(vsignedbuf != NULL) infosec_free(vsignedbuf); RETURN_LONG(rcc); } } PHP_FUNCTION(icbc_getCertID) { char* arg; char* certid; int arg_len,certidlen; FILE* fp; char cert[2000];
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"s", &arg,&arg_len) == FAILURE){ return; }
fp = fopen(arg,"rb"); if(fp == NULL) { return; } fread((void*)cert,1525,1,fp); fclose(fp);
if(!getCertID(cert,1525,&certid,&certidlen)) { arg = estrndup(certid,certidlen); if(certid != NULL) infosec_free(certid); RETURN_STRING(arg,1); }else{ return; } }
|
相关推荐
本篇文章将详细探讨如何编写PHP扩展,包括PHP变量的存储、zval结构、引用计数等基础知识,以及HashTable数据结构和Extensions的编写流程。 ### 基础知识 #### 1. PHP 变量的存储 PHP中的所有变量都是通过一个名为...
理解如何在C代码中操作`HashTable`对于高效地编写PHP扩展至关重要。 ### 结论 通过深入了解`zval`结构、PHP数据处理方式、创建扩展的基本流程以及如何与数组和哈希表交互,你可以更好地掌握PHP扩展的开发。这不仅...
2. **PHP扩展开发基础**:解释PHP扩展的结构,如zend_extension接口,以及如何使用C语言编写PHP扩展。 3. **PHP扩展编译与安装**:介绍如何编译自定义的PHP扩展,并将其添加到PHP的配置中,以便在运行时加载。 4. **...
在PHP扩展中添加自定义对象涉及到创建和管理对象的实例。这通常包括定义对象结构体、初始化对象、析构对象等步骤。 1. **定义对象结构体**: 包含对象的具体属性和方法。 2. **初始化对象**: 设置对象的初始状态。 3...
### PHP Extension Writing之中文版知识点概述 #### 编写扩展 I:PHP 和 Zend 起步 ##### 引言 本文档旨在引导有兴趣为 PHP 开发扩展的开发者入门。假设读者已经熟悉 PHP 语言和 C 语言的基础知识。 ##### 扩展的...
7. **PHP扩展**:探针可能检查已安装的PHP扩展,这涉及到如何使用`phpinfo()`函数和`extension_loaded()`函数。 8. **日志管理**:探针可能会生成日志文件,学习如何正确记录和分析日志数据。 9. **性能优化**:...
【PHP实例开发源码-NNABC (PHP扩展)】是一个以PHP编程语言为基础的源代码集合,主要用于展示和学习PHP扩展的开发。PHP扩展是PHP核心功能的增强,它们允许开发者添加新的函数、数据类型甚至是内建类库,以满足特定的...
EXT在这里可能指的是PHP的Extension(扩展),它可能是指使用了某种特定的PHP扩展库来增强功能或性能。 首先,通讯录系统通常基于Web,因此我们需要了解PHP作为服务器端脚本语言如何与HTML、CSS和JavaScript等前端...
编写php的extension实例的方法 所属类别:JSP 推荐指数:★★☆ 文档人气:161 本周人气:1 发布日期:2008-7-3 一、说明 前端时间因为客户的原因折腾了一下asp的扩展,在ATL的帮助下写一个asp的模块还是很容易的...
文件中,取消对`extension=php_com_dotnet.dll`的注释(对于Windows系统),然后重启PHP服务。 4. **调用COM组件**:在PHP代码中,你可以使用`com_load`函数加载注册的COM组件,然后通过实例化对象来调用其方法。...
最后,测试配置是否成功,可以通过在PHP脚本中编写简单的测试代码,例如: ```php <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->set('test_key', 'Hello, Redis!'); echo $redis->get...
6. **测试**:编写`test.php`,使用Smarty实例化对象,分配变量,并渲染`test.tpl`模板。可以通过访问`aa.html`来查看结果。 标签“linux”,“php”,“smarty”进一步强调了这个示例项目涉及的技术栈。 压缩包内...
本文将通过实例介绍如何开发一个简单的PHP扩展——“Hello World”扩展,并逐步讲解整个过程。 #### 二、准备工作 首先,我们需要准备一个适合开发PHP扩展的环境。本文示例基于如下环境: - **操作系统**:CentOS...
**PHP实例开发源码—Flarum PHP轻论坛网站源码** Flarum是一款基于PHP开发的现代化轻论坛系统,以其简洁、快速和互动性强的特点受到开发者和社区管理员的青睐。这个压缩包文件包含了Flarum论坛的完整源码,为PHP...
在这个“Jquery AjaxUpload实现文件上传实例 PHP版”中,我们将探讨如何使用jQuery的AjaxUpload插件与PHP后端进行配合,实现实时的文件上传功能。 首先,我们需要在HTML页面中创建一个用于选择文件的input元素和一...
配置文件中启用了PDO扩展(例如`extension=php_pdo.dll`)以及针对特定数据库的扩展,如PDO_MYSQL(`extension=php_pdo_mysql.dll`)。 代码示例展示了如何使用PDO进行基本的CRUD(创建Create、读取Read、更新...
总结来说,本文通过实例讲解了如何在Windows环境下通过PHP调用VC编写的COM组件来完成特定功能。这种方法简化了某些复杂功能的实现,但同时也受到平台限制。开发者在实际应用中需要权衡开发便利性与平台兼容性的问题...
PHP C++(phpcpp)是一个强大的库,它使得用C++编写PHP扩展变得相对简单。本文将深入探讨如何使用phpcpp创建一个名为“EmptyExtension”的空扩展包,并通过此过程讲解PHP扩展开发的基础知识。 首先,我们需要理解...
5. 在代码中通过`extension=redis`加载扩展,并通过`new Redis()`创建客户端实例。 总结,PHPRedis是一个强大的工具,使得PHP开发者能够充分利用Redis的高性能特性。通过“phpredis-develop.zip”,我们可以轻松地...