自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 wxwidgets 3.1.3编译要点

本文主要介绍在windows 下编译wxwidgets3.1.3过程和一些经验:1.下载安装 mingw64并设置好环境变量。最新版的wxwidgets应该用mingw64编译。2.修改wxwidgets/build/msw下的makefile.gcc文件,在文件最开始位置加入下面这一句:SHELL=c:\windows\system32\cmd.exe3.按下面这个步骤进行编译:...

2020-03-31 20:41:18 805

原创 VIM当前行的高亮设置

共有几个指标:set t_Co=256set cursorlineif has("gui_running") colorscheme desert highlight LineNr guibg=black guifg=redelse colorscheme torte highlight LineNr term=NONE cterm=NONE cterm...

2020-03-08 22:49:22 2114

原创 CentOS 6.10 下安装 GCC9.2.0

一、安装环境1.操作系统:CentOS 6.102.GMP:版本 6.2.0,下载链接:https://gmplib.org/download/gmp/gmp-6.2.0.tar.xz3.MPC:版本 1.1.0,下载链接:http://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz4.MPFR:版本 4.0.2,下载链接:https://www.mpfr...

2020-02-25 21:33:25 1072

原创 CSS固定顶底之二(肯定有效)

CSS文件:#navbar{ background-image: url(../img/navbg.png); background-repeat:repeat-x; background-position: left top; height: 100px; width: 100%; position:absolute; posit

2015-06-02 22:44:47 651

转载 CSS固定顶底之一

IE下的纯CSS完美position:fixed实现方案html,body{margin:0px;height:100%;overflow:hidden;font-size:12px;}/* 核心样式定义 */.wrapper{ position:relative; width:100%; height:100%; overflow:auto; }

2015-06-01 23:18:46 722

转载 我的Git笔记

原文出处: 颜海镜的博客(@颜海镜) 转眼间加入git的阵营已经快两年了,结识git,缘起github,2年前在寻找代码托管网站,当时还是用svn,起初使用google code,可是google的服务虽好,在天朝你懂得,后来发现了github,多亏了蒋鑫老师的《GotGitHub》将我带入github的大门,如果你是个github新手,那我强烈建议你阅读这篇文章,里面讲了很多东西。

2014-11-07 08:46:49 583

转载 centos7定制

CentOS 7 是centos的最新版,高度可定制化的系统,用起来非常方便以下是根据需要进行的私人定制一、去除顶部和底部panel隐藏顶部panel1、/usr/share/gnome-shell/modes/classic.json修改panel的左中右都为空"panel":{ "left": [],"center": [],"right": []}2、

2014-10-10 12:33:41 1025

转载 PostgreSQL操作JSON数据

PostgreSQL JSON 数据类型2014-07-26 12:20 浏览: 1702 次我要评论(0 条)字号: 大 中 小 摘要: 从PostgreSQL 9.3版本开始,JSON已经成为内置数据类型,“一等公民”啦。还在羡慕什么文档数据库或者BSON么,赶紧玩玩吧。另外9.4版本,提供JSONB(Binary),提供更多JSON函数和索引支持。刚好手头有一个需求,是涉

2014-10-08 10:13:31 28904 3

转载 用户体验三要素:别让我等别让我想别让我烦

别让我等曾有很多研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒,99%的用户会关闭这个网页。也许这样讲,各位还不会有太多感触,接下来,我列举一组数据:Google网站访问速度每慢400ms就导致用户搜索请求下降0.59%;Amazon每增加100ms网站延迟将导致收入下降1%;雅虎如果有400ms延迟会导致流量下降5-9%。怎么样?现在感受如何?是不是该马上去做测

2014-08-25 17:22:31 726

转载 Centos7安装Virtualbox

CentOS 7 with VirtualBoxPosted onJuly 21, 2014 byirrlabTo install VirtualBox Guest Additions on a CentOS 7 guest run this as root:rpm -Uvh http://dl.fedoraproject.org/pub/epel/beta/7/x

2014-08-18 16:07:02 2085

转载 CentOS下源码安装PostgreSQL

CentOS下源码安装PostgreSQL时间:2014-06-05 01:04来源:blog.csdn.net 作者:lzq0101 举报 点击:252次1. 创建postgres用户,设置其HOME目录为/usr/local/pgsqlgroupadd -g 88 postgresuseradd -u 88 -g 88 -d /usr/local/pgsql postgres

2014-07-20 14:34:53 639

转载 133 行代码实现质感地形

程序员们都喜欢创造一些东西,但是,还有什么会比创建一个世界更让人感到惊喜?想想Minecraft, Terragen, Skyrim,以及以前的每一个都会使用一些生成分形地形的飞行模拟器。今天,我们要来探索如何使用漂亮而又简单的QPSO算法 (diamond-square algorithm),到时,你也可以扮演上帝![Demo] [Source]程序员往往是懒惰的(从经验来说的话),

2014-05-22 22:29:26 1028

转载 mog使用指南

mog使用指南

2014-04-15 17:03:43 897

转载 MongoDB的真正性能-实战百万用户一-一亿的道具

上一篇为求振聋发聩的效果,有些口号主义,现在开始实战,归于实用主义。使用情景开始之前,我们先设定这样一个情景:1.一百万注册用户的页游或者手游,这是不温不火的一个状态,刚好是数据量不上不下的一个情况。也刚好是传统MySql数据库性能开始吃紧的时候。2.数据库就用一台很普通的服务器,只有一台。读写分离、水平扩展、内存缓存都不谈。一百万注册用户如果贡献度和活跃度都不高,恐怕公司的日子还

2014-04-08 12:41:14 734

转载 MySQL与MongoDB设计实例对比

【IT168 技术】MySQL是关系型数据库中的明星,MongoDB是文档型数据库中的翘楚。下面通过一个设计实例对比一下二者:假设我们正在维护一个手机产品库,里面除了包含手机的名称,品牌等基本信息,还包含了待机时间,外观设计等参数信息,应该如何存取数据呢?  如果使用MySQL的话,应该如何存取数据呢?  如果使用MySQL话,手机的基本信息单独是一个表,另外由于不同手机的参数

2014-04-08 12:37:30 620

转载 数据库课程设计报告(仓库管理系统)

三 概要设计3.1   E—R图和相关说明 类别(类别编号,类别名称,上级类别)仓库(仓库编号,隶属单位,备注)用户(用户名,密码,权限类型);客户(客户编号,联系人,单位,联系电话,传真,通信地址,邮政编码) 产品(编号,名称,规格,计算单位,参考价格,数量下限,数量下限,有效期,警告 出库(出库类型,产品类型,单价,数量,总价

2014-04-08 10:57:45 35252

转载 golang编程之时间编程

本文转载于:http://blog.chinaunix.net/uid-24774106-id-4006530.html   编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。    golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学

2014-04-02 10:38:50 1517

转载 js实现滚动时层智能浮动定位

原文:http://www.javascript100.com/?p=389智能浮动定位一般用做工具条啥的,你可以看看在淘宝上的应用我们今天也来做一个,js实现智能浮动定位实例实现原理其实很简单,主要用到几个知识点:什么是scrollTop?CSS position定位判断是否为IE6浏览器元素相对于窗口的距离原理:1,浏览器向下滚动时,当document的

2014-03-13 12:33:18 4055

原创 centos 6.3 安装GCC 4.8.1

cd contrib./download_prerequisitescd gmp./configuremake & make installupdatedbldconfigcd ..cd mpfr./configuremake & make installupdatedbldconfigcd ..cd mpc./configuremake & make instal

2013-09-28 11:12:56 970

原创 golang进程后台运行的方法

参见这里:http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/

2013-09-22 22:43:39 5695

原创 Golang开发web应用(v0.02)

经过几天实践,现将go语言开发web应用的一点经验教训纪要如下:1、项目管理可以按go的规范设置,但我更总是喜欢自己弄一套。主要为:其中:hw是项目根目录,是执行文件所在目录;template是模板及静态文件目录,其中有模板文件目录html、css文件目录css、javascript文件目录等,其它如image等根据需要设置。2、如何设定模板及静态文件目录?如下代码,利

2013-07-19 14:40:10 2712 1

原创 Golang 开发web应用时的静态文件处理方法(v0.01)

一、首先,我的应用目录结构如下图:二、需要用到如下的包:"net/http"    涉及到的函数:http.Fileserver,http.StripPrefix,http.Handle。    1、http.FileServer     func FileServer(root FileSystem) Handler    FileServer returns a h

2013-07-18 22:51:09 6446

转载 Google搜索原理

2013-05-08 15:41:26 611

转载 用户接口(UI)设计的 20 条原则

世界级图形设计大师Paul Rand(保罗.兰德)曾经说过:“设计绝不是简单的排列组合与简单地再编辑,它应当充满着价值和意义,去说明道理,去删繁就简,去阐明演绎,去修饰美 化,去赞美褒扬,使其有戏剧意味,让人们信服你所言……”,由此可见,设计绝非轻而易举之事,优秀的设计更是难上加难,今日小编偶然发现一篇界面设计师 Joshua Porter博客当中的一篇文章——《Principles of Use

2013-05-08 15:19:45 905

原创 CSS颜色渐变(兼容IE、Firefox、Chrome、Safari)

HTML代码: 试试 首页 文化 知识 商业 论坛 登录信息

2012-11-29 20:27:24 3058

原创 word2003设置编号间距的方法

1、光标定位于自动编号行或项目符号行2、打开“格式”菜单3、选择“制表位”4、点击“全部清除”5、在对话框上面右边的“默认制表位”,点击向下的箭头,变为 0.18字符(或0.5字符),或直接输入数值。6、确定

2012-10-24 15:55:13 959

原创 Centos下安装设置PPTP

到此下载:ftp://mirror.switch.ch/pool/1/mirror/epel/6/i386/NetworkManager-pptp-0.8.0-1.git20100411.el6.i686.rpm安装即可。

2012-10-04 10:40:03 682

原创 python相关资源

生成PDF: reportlab生成dwg: pythonCAD生成excel:

2012-07-18 14:29:07 776

转载 把U盘制作成pe+linux启动盘

基本思路:把U盘处理一下,让它可启动,然后安装GRUB4DOS,接下来就是把各种启动盘整合进来,让grub4dos启动他们。材料:软碟通(见北方星空)、grubinst、GRUB4DOS、TangoPE修改.7z(谷歌文件名+快盘)、linux内核和初始化文件(vmlinuz、initrd.gz)、linux镜像。制作过程:一、可启动处理插入U盘,运行UltraISO在主菜单选

2012-04-25 21:11:16 3664

转载 CentOS网络设置

CentOS 网络设置修改 一、CentOS 修改IP地址修改对应网卡的IP地址的配置文件# vi /etc/sysconfig/network-scripts/ifcfg-eth0修改以下内容DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为st

2012-03-08 14:30:34 1004

转载 U盘安装Fedora 16

原文:http://www.linuxidc.com/Linux/2011-11/47296.htm使用工具,先将U盘作成启动盘,再把Fedora相关文件放到合适地方。使用第二种方法,屡试不爽,以下给出详细步骤:需要用到的工具:1.grubinst-1.1-bin-w32-2008-01-01  下载地址:免费下载地址在 http://linux.linuxidc.co

2012-02-25 17:10:27 2942

转载 浅析Ruby on Rails部署方案

原文:http://www.kuqin.com/web/20080708/10752.html前言2006初,我接到了公司分配的一个遗留项目,让我负责一个基于C/S的系统的服务器端。其实是系统是基于HTTP协议的,因为负责客户端的同事对于服务器端编程不甚了解,虽然使用PHP对熟悉C++的他来说是驾轻就熟,但是在进一步实现更多的功能和更高的性能上就捉襟见肘了。项目是在非常突然的情况下交给

2012-02-14 12:35:20 885

转载 base64编码解码

对于迅雷专用链接不用我去解释相信大家都明白(别告诉我你不懂~汗),现在就链接的编码原理及转换详细说明一下,明白以后就可以用迅雷下载快车、旋风专用地址的软件啦。首先要明白Base64编码是怎么一回事,不懂的先去百度一下再回来。Base64编码是一种加密算法,Email的原始信息就是由Base64编码构成的。而这些专用链接都是通过Base64编码加工转换而成的。迅雷专用地址例子:thund

2011-12-29 12:54:06 1054

转载 defy找不到WIFI信号的解决办法

戴妃有时用着用着会突然搜不到wifi信号,经过我研究后发现,只需把手机内存里的一个文件 删掉就可以,路径是/data/misc/wifi/wap_supplicantf删了后重启手机就行了。

2011-12-23 10:02:56 1837

转载 小公司如何部署实施Linux集群网站

其实在许多小公司和小企业里,尤其是牵涉到电子商务和电子广告类的网站,他们的网站也要求作负载均衡高可用的Linux集群,但由于成本的制约,老板都会要求系统架构师设计的方案能够用最少的钱实现这个要求,作为系统架构师的我们,应该如何实现这个要求呢?  首先是机房的选择,如果公司有自己的机房那是最好不过的了;如果没有自己的机房,我建议大家放在BGP机房内托管,如果有选择的话,最好是选择带有硬件防火

2011-12-14 17:21:50 612

转载 Linux启动和关闭时自动执行的所有脚本文件

来源:http://blog.csdn.net/shendl/article/details/5803330         Linux使用的是基于运行级(run-levels) 概念的称为SysVinit的专用启动工具。它在不同的系统上可能是完全不一样的, 所以不能认为一个脚本在某个Linux发行版上工作正常。         SysVinit(从现在开始我们称之为"

2011-12-10 15:27:51 740

原创 Windows下以fastCGI方式部署nginx+django+flup

文中的RunHiddenConsole.exe为隐藏运行命令行命令的一个应用。本文是采用FastCGI方式运行django应用的快速部署,更详细的应在nginx.conf文件分别配置。一、安装下载nginx并解压至某一目录,如:d:\nginx-1.1.10下载python 2.6.6版并安装至: c:\python26下载flup-1.0.2解压并用命令  setup.py in

2011-12-02 16:11:18 1410

原创 OpenBSD 5.0安装手记

OpenBSD 5.0最快的镜像站点是日本的jaist站点(我的是佛山的中国电信):jaist的OpenBSD镜像站点1、下载install50.iso。2、刻录ISO到光盘中,然后启动安装3、安装好后,设置packages的镜像站点,在/etc/rc.local最后添加下面一行:export PKG_PATH=http://ftp.jaist.ac.jp/pub/OpenBS

2011-11-09 16:21:12 3792 2

转载 centos fluxbox 安装,个性化配置

centos fluxbox 安装,个性化配置张映 发表于 2010-12-01分类目录: linux我用的第一个linux系统是archlinux,当时装的桌面是fluxbox,界面简单,但是很实用,中间用过一段时间的riplinux,根archlinux差不多,都是比较小的linux系统,在后来我装了centos,我装了gnome,这个桌面功能很强大,但是我不喜欢,

2011-11-02 18:42:50 3320

转载 gnome下设置窗口真正透明的方法

由于Xserver需要可以支持混成的窗口管理器才能处理真透明效果,因此需要对窗口管理器本身进行设置。相应的开启混成之后会消耗更多的CPU和GPU性能,因此是否开启这个效果请自己权衡。分为以下情况:Meacity可以支持混成,但由于不是所有的显卡和驱动程序都能很好地支持混成,因此混成在gnome中默认是未开启的。如果你的显卡和驱动程序支持3D加速,则可以开启之。使用gconf-edito

2011-11-01 22:20:58 4659 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关注的人

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