自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (21)
  • 收藏
  • 关注

原创 Ubuntu与windows的双启动设置

在安装好windows后再安装ubuntu,双启动可以自动由grub设置成功。但如果windows重装后,双启动就会消失。这时可以用ubuntu的安装盘启动电脑。然后按下面的步骤设置:1. 放入Ubuntu的LiveCD光盘,并从光驱启动2. 选择 "救已损坏的系统"(注意:有些的是选择“使用Ubuntu而不改变计算机中的任何内容”)3. 一系列键盘以及几项简单的配制,可跳过网络设置4. 设置主机名,可保持默认5. 出现"Device to use as root file system"列表时,选

2010-06-30 22:38:00 864

原创 Ubuntu打印慢的处理

改分辨率低一点即可。

2010-06-29 11:19:00 2001

原创 ubuntu下的fcitx设置

配置文件在~/.fcitx/config下,如果想改变配置,只修改这个文件即可。要指定使用某个输入法,则还要修改这个目录下的tables.conf或/usr/share/fcitx/data/tables.conf这个文件。

2010-06-27 23:55:00 660

原创 金山公司,office成功不了的公司

<br />其实,从开始用电脑时,我就认识金山了,但是,金山的确真的很令人失望。我是指的金山对市场的分析、竞争能力及营销非常差劲。<br />现在微软说得很对:金山公司,你还是不要搞什么Office软件了。因为自始至终,金山都是依靠微软的工具进行开发,都是以微软的平台作为基础,躲在微软的阴影下与微软竞争。这个不用人脑去想,就是一个非高等动物都知道是一场不能胜利的战争。<br />话说回到Office的开发战略上,我为什么说金山必定会失败呢?一些原因前面已经说了,我再说一个吧:现在Linux的世界已经

2010-06-23 17:00:00 719

原创 Ubuntu在解压winrar文档时文件名乱码的处理办法

<br />解压缩时遇到乱码<br />原因:rar文件在win系统创建,字符编码问题。需要转码<br />sudo apt-get install convmv<br /> convmv * -f gb2312 -t utf8 --notest

2010-06-22 12:25:00 2288 1

转载 ubuntu安装输入法----小企鹅输入法

刚才XX人说ubuntu上的输入法太难用了,其实不是这样的,就算系统自带的ibus只要设置好了也挺好用的!        今天说的是安装fcitx(小企鹅输入法),界面漂亮而且也小巧,包含多种输入法---智能拼音/五笔/拼音五笔/电报码/二笔。。。大把输入法!安装方法也很简单。(转贴者注:其中的“五笔拼音”和“极点五笔”的功能差不多,太棒了!)        首先,卸载系统自带的ibus输入法,一定要卸载,因为ubuntu下两个输入法比较麻烦,而且完全没必要!可以这样卸载:打开新

2010-06-18 15:19:00 2833 1

转载 利用VC++实现AVI文件的合成和分解

<br />作者:智慧的鱼<br />    摘要:本文详细的解析了AVI文件的存储结构,介绍了微软提供的用来操作AVI文件的一组API使用方法,并通过例子代码,演示了如何将一组静态Bmp图片合成一个avi视频文件以及如何将一个avi视频文件解析保存为一系列的bmp图像文件。 <br /><br />关键词:avi文件 bmp图像 vc<br /><br />  AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符

2010-06-14 19:53:00 727

原创 AVI视频解码

<br />AVI视频解码<br />好几天没来更新blog了,因为最近几天一直在弄AVI的视频解码,头都大了~~<br />在网上找了一些AVI文件格式的资料,先贴一些上来,免得自己以后用到的时候再去找……<br />?<br />AVI(Audio Video Interleaved的缩写)是一种RIFF(Resource Interchange File Format的缩写)文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一

2010-06-14 19:50:00 2811

转载 提高Ubuntu音质的妙着

For highest sound quality use jackd + xmms + jack-rack. Also install cmt, ladspa and caps plugins: there are hundreds available, for free !As for MP3, consider using a lossless audio compression encoder like FLAC instead...Audio culture:http://ub

2010-06-13 11:29:00 5301 4

转载 征服Python:语言基础与典型应用 --Python扩展和嵌入

征服Python:语言基础与典型应用 --Python扩展和嵌入2008-01-29 16:38<br /> 由于Python是解释性的脚本语言,执行速度较慢。在某些需要提高脚本执行效率的情况下,可以考虑扩展Python,用C/C++来完成对效率要求高的部分。另外,由于Python功能强大,完全可以将其嵌入到C/C++中,以简化程序,减少代码。8.1 扩展Python<br />Python提供了支持C/C++接口,可以方便地使用C/C++来扩展Python。用C/C++编写的Pytho

2010-06-12 23:30:00 1620

转载 用C语言扩展Python的功能

用C语言扩展Python的功能Pyton和C分别有着各自的优缺点,用Python开发程序速度快,可靠性高,并且有许多现成模块可供使用,但执行速度相对较慢;C语言则正好相反,其执行速度快,但开发效率低。为了充分利用两种语言各自的优点,比较好的做法是用Python开发整个软件框架,而用C语言实现其关键模块。本文介绍如何利用C语言来扩展Python的功能,并辅以具体的实例讲述如何编写Python的扩展模块。<br />一、简介<br />Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自

2010-06-12 23:29:00 608

转载 Ubuntu安装FlashPlayer的一些启示

安装 Adobe FLash Player 10 于 Ubuntu 9.10 x86_64之前就知道 Flash Player 安装在 64bit Linux 上面不是很好解决,包括我在内,我想应该很多人都会被这个问题搞得半死。明明看起来好像装好了,但是在 Firefox 就是怎样都不能看见 Flash 影片。网路上有不少 deb 档下载下来,不是冲突就是不能安装。因此这边纪录一下解决方法。首先把所有 Flash 相关的 Plugin 都移除掉:sudo apt-get remove -y --purge

2010-06-10 15:37:00 5578

原创 Ubuntu安装的常见问题

<br />(1)安装成功了,但为什么其它磁盘分区都可以在ubuntu系统的文件管理器中看到,唯独ubuntu系统所在的分区不知道哪里去了?<br />wubi安装的ubuntu系统所在分区在启动时已经自动挂载到ubuntu系统的/host目录。<br /><br />(2)安装使用一切正常,但为什么每次升级linux内核时总是显示“无法为……创建一个符号链接”而失败?<br />请确认您选择的wubi安装分区是否为fat分区。fat分区不支持创建符号链接,故使得内核升级过程失败。一劳永逸的

2010-06-04 10:08:00 1469 1

原创 QT皮肤编程(QT style sheet)总结

QT style sheet的基本原理就是利用QSS语言对软件的外观进行定制。QSS可以直接在代码中输入,也可以保存在一个文本文件中,利用文件读取函数在软件运行时读入到一个文本串中,再利用QApplication类的函数setStyleSheet(&QString)使其生效。

2010-06-03 23:16:00 2535

原创 新装Netbeans字体无法看清的解决办法

<br />在新装Netbeans后,字体无法看清,解决办法如下:<br />打开/usr/share/netbeans/6.8/etc/下的netbeans.conf 文件,使用“sudo gedit netbeans.conf”命令打开它,<br />在netbeans_default_options=后面增加 "-J-Dawt.useSystemAAFontSettings=on" 这个内容。<br />保存,重启Netbeans,字体就开启了抗锯齿了,边缘很平滑。

2010-06-03 00:28:00 715

转载 Qt解决方案中添加动态链接库项目

动态链接的好处: 生成执行文件小,修改程序后重新编译部分少。如何添加动态链接库项目:解决方案->添加新建项目->qt projects -> qt library (输入项目名为abc),然后生成一个新项目,包含abc.h abc.cpp abc_global.h三个文件,打开abc.h可以看到class ABC_EXPORT abc 的定义(在abc_global.h中有#define ABC_EXPORT Q_DECL_EXPORT,再次跟踪,有define Q_DECL_EXPO

2010-06-02 23:00:00 2697

转载 QT的打印基础

qt中简单的打印过程1、新建一个qprintviewdialog对象p。2、connect对象p的printrequisition 信号到自己的一个函数如doprint(*printer)3、实现doprint函数,就是在里面使用qpainter(print)新建一个painter后直接在里面画就好了。4、p.exec()这种方式是显示qt提供的打印预览对话框,该对话框需要你提供printrequisition信号的实际实现。当p需要预览或打印时就会发出该信号,你只要实现好d

2010-06-02 22:53:00 7347

原创 Ubuntu面板设置的一次经历

<br />不小心将系统桌面上的两个面板删除了,在网上浏览一番后,发现原来面板可以很容易就按自己的意图设置好的。<br />只要新建一个面板,然后在这个面板右击,在弹出的菜单中选择“添加到面板”,就可以按自己的意图添加相应的东西了。<br />在添加完成后,可以对图标进行移动调整,以达到自己的要求为主。我的面板设置如下:<br /><br /> 

2010-06-02 22:43:00 1659

原创 QT应用中增加软件图标

1、在QTCreator中打开qrc文件。2、单击Add按钮,选择Add files项,将软件图标添加进资源文件中。3、在main.cpp文件中添加如下代码: w.setWindowIcon(QIcon(":images/sale.png"));4、重新编译,运行。

2010-06-02 16:14:00 830

转载 小学英语句型总汇

<br />小学英语句型总汇<br /> 发表时间:2009-11-4 16:18:22 作者:李蔚华<br /> <br /> I询问姓名、年龄。1. ----What’s your name? ----你叫什么名字? ----My name is ________. ----我叫……。 2. ----How old are you? ----你几岁了? ----I’m 12. ----我十二岁。 II询问颜色。1. ----What colour is it? ----它是什么颜色的?

2010-06-02 10:59:00 1072

原创 Qt Style Sheets Reference

<br />Qt Style Sheets Reference <br />Qt Style Sheets Examples<br />Style Sheet Usage<br />Customizing the Foreground and Background Colors<br />Customizing Using Dynamic Properties<br />Customizing a QPushButton Using the Box Model<br />Customizing the QP

2010-06-01 23:12:00 2448 2

转载 QT皮肤(QSS)编程

<br />借用css 的灵感, Qt也支持Qt自己的css, 简称qss。同css 相似,qss的主要功能与最目的都是能使界面的表现与界面的元素分离,即质与形的分离,就如同一个人可以在不同的时候穿上不同的衣服一样,css机制的引入,使得设计一种皮肤与界面控件分离的软件成为可能,应用程序也能像web界面那样随意地改变外观。<br /><br />1, QSS语法<br /><br />同css一样,他也有由一个selector与一个declaration组成,selector指定了是对哪一个控件产生效果,而

2010-06-01 22:37:00 5363

原创 小学英语单词分类集

<br />小学英语单词分类集<br /><br />(四会单词:342个;三会单词:188个) <br /><br />1、颜色(color):<br />四会:red blue yellow orange green pink black white<br /> 红色 蓝色 黄色 橙色 绿色 粉红色 黑色 白色 <br />三会:brown grey purple<br /> 棕色 灰色 紫色

2010-06-01 21:56:00 3565

转载 英语介词的的用法

<br />I. 介词的概念<br /><br />  介词是一种用来表示词与词, 词与句之间的关系的词。在句中不能单独作句子成分。介词后面一般有名词代词或相当于名词的其他词类,短语或从句作它的宾语。介词和它的宾语构成介词词组,在句中作状语,表语,补语或介词宾语。<br /><br />  II. 牢记口诀<br /><br />  介词口诀:自从以当为按照,由于对于为了到;和跟把比在关于,除了同对向往朝;用在名词代词前,修饰动形要记牢。<br /><br />  III. 介词归类大全<br /><br

2010-06-01 21:52:00 1388

转载 小学英语单词分类汇总

<br />小学英语单词分类汇总 <br /><br /> 1学习用品(school things): <br /><br /> pen钢笔 pencil铅笔 pencil case铅笔盒 rule尺子 book书 bag包 comic book漫画书post card 明信片newspaper报纸 schoolbag书包 eraser橡皮 crayon蜡笔 sharpener卷笔刀 story book故事书 notebook笔记本 Chinese book语文书 English bo

2010-06-01 21:51:00 3627

原创 QT编程:菜单及工具条的建立

两者的建立过程是一致的。1、头文件应包含 QAction、QMenu、QMenuBar、QToolBar等相关文件。如下:#include #include #include #include 2、应在MainWindow中增加1步骤中提到的相关变量,如:action、menubar、toolbar等。如下: QMenu *fileMenu, *editMenu, *helpMenu; QToolBar *fileToolBar, *editToolBar; QActi

2010-06-01 16:41:00 2692 1

原创 自我总结:QT的国际化编程

1、用QT Creator自动生成 QT GUI Application。例如项目名为:sale.pro2、修改sale.pro文件,在其中加入TRANSLATIONS=sale.ls。3、运行lupdate sale.pro命令,这一步生成sale.ls文件。4、运行linguist sale.ls命令,对字符串进行编译。5、编译完成后,点"File-release(文件-发布)"命令生成sale.qm文件。6、如果有多种语言,例如有英语及汉语,则可以将sale.ls改名为sale_en.ls及sale_

2010-06-01 11:24:00 1232 1

mpfr-4.0.2.tar.xz

这个包是安装GCC 9.2.0的依赖包,我直接上传至我的资源中供大家下载,不用到国外服务器下载,那个龟速可以让到白头。 这个包是其中的mpfr包,版本为4.0.2。直接下载然后按我的博客中的说明安装即可安装完成最新版的GCC。

2020-02-25

gmp-6.2.0.tar.xz

安装GCC所需的依赖包,这个是第一个:gmp 6.2.0。可以在我的资源中下载。 安装过程可以参考我的博客里面的相关内容。我已经建立了一个安装脚本文件,按博客提示就可以完成所有的安装任务。

2020-02-25

golang开发web应用示例(v0.03)

利用go语言开发web应用的示例。相关说明见我的博客: http://blog.csdn.net/yavobo/article/details/9380011

2013-07-20

golang开发web应用示例

利用go语言开发web应用的示例。详细说明见我的博客: http://blog.csdn.net/yavobo/article/details/9380011

2013-07-19

Linux命令大全

Linux最常用的命令汇集,按系统管理等分类分标签,非常实用。 文档大小为1M左右,按功能划分为12个章节。文档格式为PDF,标签非常详细!

2012-04-09

windows下的nginx+php

网上很多的,请看清了再下,纯粹自用!!! 使用方法: 直接解压到D:\下,并且已经安装好postgresql。 然后运行start_nginx_php.bat即可。 在windows 2003下,应该将nginx.conf中的端口改为8080或其它端口,相应的 start_nginx_php.bat中的端口也应改为相同的端口。否则不能启动php-cgi

2010-12-02

Windows 7 硬盘安装Ubuntu10.10的相关grub4dos文件

如果原来C:盘下有boot.ini文件,请务必先备份 Windows 7 硬盘安装Ubuntu10.10的相关grub4dos文件: 1、将所有文件解压到C:\根目录下,然后将Ubuntu的ISO文件拷贝到C:\根目录下,并改名为ubuntu.iso再重启选择Ubuntu,然后再选择Install Ubuntu即可进入Ubuntu Live界面。在里面点击“安装Ubuntu ”按提示执行即可。 2、修复 Windows 7 启动项 重新启动ubuntu之后,你会发现丢失了windows 7的启动项。下面来说明如何修复。 进人Ubuntu系统,打开终端,命令如下: sudo gedit /etc/default/grub 修改GRUB_TIMEOUT="10" ,然后在终端中输入: sudo update-grub update 命令会自动找到 windows 7 启动项。并且自动更新 /boot/grub/grub.cfg 文件。 3、重启系统 进人Win7系统,删除安装Ubuntu系统时复制到C盘的那些文件(vmlinuz,initrd.lz,grldr,grldr.mbr,grub.exe,menu.lst,boot.ini,ubuntu.iso)。 再将原先的boot.ini恢复。一切OK!

2010-10-11

MinGW完全包-01

在windows下的GNU编译系统,包含gcc、g++等编译软件及autoconf、automake等自动生成makefile文件的应用。

2010-05-20

MinGW完全包-02

在windows下的GNU编译系统,包含gcc、g++等编译软件及autoconf、automake等自动生成makefile文件的应用。

2010-05-20

PHP扩展编程巨献:Extending And Embedding PHP

PHP扩展编程巨献:Extending And Embedding PHP。 有了本书,你就不会再为PHP扩展编程头疼了。这个是英文版。

2010-04-24

MinGW 4.4.3

MinGW 4.4.3包含了GCC 4.4.3的gnu在win32中的编译系统。 解压到C:\MinGW即可使用。

2010-03-11

关于AUI、wxPropertyGrid及wxGrid的用法示例

关于AUI、wxPropertyGrid及wxGrid的用法示例

2010-02-20

用wxWidgets编写的访问PostgreSQL的例子

用wxWidgets编写的访问PostgreSQL的例子,其中要注意字符编码的转换。

2010-02-12

wxWidgets编程全套手册

包含了《wxWidgets跨平台GUI编程》的中、英文两个版本。另外还有wxWidgets的类库参考指南。

2010-02-08

开发PHP扩展详细教程

如果用PHP不能再满足你的需求,最好的办法就是开发PHP扩展。这有一些好处: 1、增加自己的特殊功能。 2、保护自己的专利代码。 这是几年前的一篇英文文章,现在已被翻译成中文版的。 作者应该是hshq_cn。 链接是:http://bbs3.chinaunix.net/thread-1028798-1-1.html。 现我将此转变为PDF文件,仅有兴趣者参阅。同时非常感谢 原作者及hshq_cn,给我们带来的这么好的资料。里面还有一个幻灯片的,也是很有帮助的文档。另外,再提供一篇相关的文章(http://www.programbbs.com/doc/4083.htm): 编写php的extension实例的方法 所属类别:JSP 推荐指数:★★☆ 文档人气:161 本周人气:1 发布日期:2008-7-3 一、说明 前端时间因为客户的原因折腾了一下asp的扩展,在ATL的帮助下写一个asp的模块还是很容易的。不巧的时刚刚折腾完asp的COM就碰到另一个客户的问题。客户想给系统集成ICBC的接口,但是用ICBC的接口需要用他们的提供的库函数去 1. sign对发送的数据进行签名 2. getcertid获取用户证书的版本 3. verifySign对签名后的数据进行验证 问题是ICBC只给了现成的COM组件,意味在只能在Win的主机上使用。俺们公司只有linux的主机,在*nix上就要自己想办法调用ICBC给的静态库了。对此我们有两个想法 1.用ICBC的静态库做一个独立的执行文件,用PHP的系统调用函数来执行这个独立的执行文件 2.将ICBC的静态库做出一个PHP的扩展 方法一应该比较简单,但是远不如方法二的灵活。搞成PHP的扩展,只要服务器编译一次,服务器上的所有客户都可以用的。 有ASP的前科,俺觉得搞个PHP的也不是什么难事。操起google搜了一通,结果发现Zend已经写了一个如何编写php extension的教程: http://devzone.zend.com/article/1021-Extension-Writing-Part-I-Introduction-to-PHP-and-Zend 浏览完牛人的大作,更是信心十足,php的扩展其实很简单,分七步走: 1. 制作编译配置文件:config.m4 2. 执行phpize生成扩展的框架 3. 在生成的php_xxx.h中声明自己写的函数 4. 在xxx.c中实现自己的函数 5. 编译自己的扩展 6. 将生成的xxx.so拷贝到php.ini中指定的extensions_dir 7. 在php.ini中打开xxx.so的调用 此问题问题唯一搞的地方就是在config.m4中折腾出正确的Makefile,因为Zend的教程中没有提到,俺自己也折腾了好久,才搞出来。 二、实际操作 1.建立工作环境 将php源码包解开,我的版本的php-4.4.4,转到源码包中的ext目录建立一个新的目录叫icbc,然后在icbc目录下touch三个文件config.m4、php_icbc.h、icbc.c 2.建立config.m4 内容如下: PHP_ARG_ENABLE(icbc, whether to enable ICBC support, [ --enable-icbc Enable ICBC support]) if test \"$PHP_ICBC\" = \"yes\"; then AC_DEFINE(HAVE_ICBC, 1, [Whether you have ICBC]) if test -f ./libicbcapi.a; then PHP_ADD_LIBRARY_WITH_PATH(icbcapi, ./, ICBCAPI_SHARED_LIBADD) PHP_SUBST(ICBCAPI_SHARED_LIBADD) AC_MSG_RESULT(checking for libicbcapi.a is OK) else AC_MSG_RESULT(libicbcapi.a not found) AC_MSG_ERROR(Please make sure the libicbcapi.a is in current directory) [Page] fi PHP_NEW_EXTENSION(icbc, icbc.c, $ext_shared) fi 第三行判断是否要启用icbc扩展, 第五行判断ICBC的静态库是否在当前目录(phpdir/ext/icbc)下 第六、七行将ICBC的静态库加入到编译环境中 3.在php_icbc.h中声明我们要导出的函数icbc_sign、icbc_vsign、icbc_getCertID #ifndef PHP_ICBC_H #define PHP_ICBC_H extern zend_module_entry icbc_module_entry; #define phpext_icbc_ptr &icbc_module_entry #ifdef PHP_WIN32 #define PHP_ICBC_API __declspec(dllexport) #else #define PHP_ICBC_API #endif #ifdef ZTS #include \"TSRM.h\" #endif PHP_MINIT_FUNCTION(icbc); PHP_MSHUTDOWN_FUNCTION(icbc); PHP_RINIT_FUNCTION(icbc); PHP_RSHUTDOWN_FUNCTION(icbc); PHP_MINFO_FUNCTION(icbc); /*Modify youself here*/ PHP_FUNCTION(icbc_sign); PHP_FUNCTION(icbc_vsign); PHP_FUNCTION(icbc_getCertID); /****End of Self control section***/ #ifdef ZTS #define ICBC_G(v) TSRMG(icbc_globals_id, zend_icbc_globals *, v) #else #define ICBC_G(v) (icbc_globals.v) #endif #endif /* PHP_ICBC_H */ 涉及到我们也就 PHP_FUNCTION(icbc_sign); PHP_FUNCTION(icbc_vsign); PHP_FUNCTION(icbc_getCertID); 其他的都是PHP各个状态的入口函数声明 4.编写这三个函数的实现: #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 */ [Page] 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); [Page] }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); [Page] if(!getCertID(cert,1525,&certid,&certidlen)) { arg = estrndup(certid,certidlen); if(certid != NULL) infosec_free(certid); RETURN_STRING(arg,1); }else{ return; } } 先在zend_function_entry icbc_functions[]数组中放入我们的要实现的函数名,然后是一堆php各个状态入口函数,详情请看Zend的教程。最后是在PHP_FUNCTION宏定义中放我们声明函数的具体实现。具体实现时难点也就是参数的传入和结果传出,还好PHP已经为我们做了很好的抽象。在Zend的教程中也有详尽的说明,俺就不啰嗦了。关键代码照搬icbc的test.c就行了。 5.编译安装我们的库 先将ICBC的头文件考到当前目录,重命名为icbcapi.php,将静态库也cp过来,重命名为*nix的标准形式libicbcapi.a,然后运行 phpize 生成configure,运行 ./configure --enable-icbc 生成Makefile,这里有一个很搞的地方,在生成的Makefile中最后一句中指定ICBC静态库的地方错了,正确的应该是(红色标记地方): $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_icbc) $(ICBCAPI_SHARED_LIBADD) 改好Makefile后就可以执行 make 如果一切顺利的话会在modules中得到我们的icbc.so,将我们的icbc.so拷贝到/usr/local/lib/php/extensions目录下,然后在php.ini中确认extensions_dir的值是/usr/local/lib/php/extensions,然后加入这句话 extension=icbc.so 重启apache后,就可以在php中直接调用这三个函数了 6.测试程序,要将测试的证书和key文件放到php测试文件的当前目录 <?php $realpath = dirname(__FILE__); $key = $realpath.\"/user.key\"; $cert = $realpath.\"/user.crt\"; $src = \"zzz\"; $passwd = \"12345678\"; echo \"The Cert file information is \"; echo icbc_getCertID($cert); echo \"<br>\"; $b64sdata = icbc_sign($src,$key,$passwd); echo \"The string \".$src.\" encrypt by icbc api is \".$b64sdata.\"(base64 encoded)<br>\"; echo \"Now we check it weather is correct....<br>\"; if(icbc_vsign(\"zzz\",$cert,$b64sdata)){ echo \"The signtrue to \".$src.\" is right!!<br>\"; [Page] }else{ echo \"The signtrue to \".$src.\" is wrong!!<br>\"; exit(); } ?>

2009-10-29

PostgreSQL开发手册

PostgreSQL开发手册(英文版) 原名:SamsPostgreSQLDevelopersHandbook.chm

2009-07-31

CentOS Step by Step

CentOS 操作指南。 红帽公司出品!其实是RHEL人指南。但CentOS同样适用。

2009-07-31

黑客札记:Linux与unix安全手册

书名:黑客札记:Linux与unix安全手册 简介:介绍Linux中的攻与防!

2009-07-30

PHP环境下动态生成表格

当你在显示二维表时,试试这个“PHP环境下动态生成表格”,很简单的。

2009-05-17

PHP_PostgreSQL_访问类

PHP_PostgreSQL_访问类:一个简单而实用的在PHP中访问PostgreSQL的类,有使用实例。

2009-05-17

Beginning PHP and PostgreSQL 8 从入门到精通

Beginning PHP and PostgreSQL 8 从入门到精通: 《Beginning PHP and PostgreSQL 8 From Novice to Professional》(英文版)

2009-05-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除