自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

God's blog

梦只在昨天,今天仍需努力

  • 博客(251)
  • 资源 (7)
  • 收藏
  • 关注

原创 PHP扩展实现的简单MVC框架

公司项目中WEB项目几乎都是使用codeigniter框架,为了降低PHP的单次执行请求时间、减低服务器处理响应时间,同时提高每分钟应答的总数,开发这个扩展的目的是将Router、Template、Config、Controller等框架提高的基础通用功能由底层实现,PHP脚本仅处理业务逻辑,发挥各自的优势。考虑到项目迁移的成本,所以此扩展的MVC也是基于CI原型来设计的,同时

2014-04-10 18:45:26 7781

原创 VS2012开发调试PHP扩展

前言开发中必不可少的环节就是调试,而调试的方式直接影响到开发效率和软件质量。之前开发PHP扩展,一直不会DEBUG调试,每次调试都是重新编译、执行再运行PHP脚本看运行状况再调试。太痛苦、太影响效率了。也百度、谷歌了如何调试PHP扩展的问题,但回答的几乎都是GDB,可惜也不知道如何实际操作。VS用的不多,很多功能也不知道干嘛的,前几天有位同事说可以用VS的“附加到进程”来调试PHP的扩

2013-10-15 00:02:04 19352 5

原创 PHP扩展 - 《config》

《config》扩展是实现将配置选项加载到内存中。 建议使用场景: 1、多个项目中需要调用共用的配置,使用config来管理,避免一式多份的拷贝维护。 2、配置选项很多,使用config加载入内存,可以避免PHP每次加载配置文件进行解释执行。

2013-09-29 11:50:15 6352

原创 分析Redis架构设计

一、前言因为近期项目中开始使用Redis,为了更好的理解Redis并应用在适合的业务场景,需要对Redis设计与实现深入的理解。我分析流程是按照从main进入,逐步深入分析Redis的启动流程。同时根据Redis初始化的流程,理解Redis各个模块的功能及原理。二、redis启动流程1.初始化server变量,设置redis相关的默认

2013-05-18 18:13:31 65457 27

原创 扩展实现PHP Benchmark

一、PHP Benchmark实现思路在看Redis慢查询日志实现的过程中,觉得这个功能很有用,能够帮助快速分析出性能问题出处,所以想到为PHP实现这样的功能。实现思路也是借鉴Redis对于慢查询的处理流程。(此扩展目前仅支持Linux)此扩展的作用是帮助分析执行时间过长的PHP脚本记录的要素有:1、脚本执行时间2、当前请求的REQUEST数据3、当前请求的文件相对

2013-05-11 15:43:47 11058 1

原创 PHP内核中的神器之HashTable

一、哈希表定义哈希表(或散列表),是将键名key按指定的散列函数HASH经过HASH(key)计算后映射到表中一个记录,而这个数组就是哈希表。这里的HASH指任意的函数,例如MD5、CRC32、SHA1或你自定义的函数实现。二、HashTable性能HashTable是一种查找性能极高的数据结构,在很多语言内部都实现了HashTable。理想情况下HashTable的性

2013-04-25 17:23:46 23119 8

原创 C实现PHP的mysql数据库连接池

一、导语连接池在JAVA中应用的很广泛,而在PHP中很少使用。以Mysql为例,JAVA中使用连接池的原因之一是避免重复新建、释放连接资源带来的开销。而在PHP中都是直连,因为这部分开销对于C API而言性能上是没有问题的。那么既然PHP直连已经没有性能问题,那为何还要多次一举开发mysql的数据库连接池扩展呢?因为根本的目的是在于理解PHP的TS(Tthread Safe线程安全)与

2013-04-22 18:22:10 21412 17

原创 队列服务开发

看了HTTPSQS,自己尝试开发了队列服务器。原理是借鉴HTTPSQS,只是通信协议层没有使用HTTP协议,而是自己的定的协议规则。一是为了练手,练习检测内存泄露同时巩固指针的使用。二是为了理解通信协议。目前只支持Windows下的编译,后面会支持Linux。(现已支持Linux)我每次都是先在windows下开发,之后再到调试支持linux下的编译。因为Linux的桌面版真心蛋疼

2013-04-17 01:21:58 14809 9

原创 C实现PHP扩展《Cabinet》

这个扩展是将Tokyo Cabinet的部分API提供给PHP客户端调用。下面是来自百度百科的一段对Tokyo Cabinet的介绍:Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序  列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念

2013-03-28 18:45:56 9116

原创 PHP数据压缩、加解密(pack, unpack)

网络通信、文件存储中经常需要交换数据,为了减少网络通信流量、文件存储大小以及加密通信规则,经常需要对数据进行双向加解密以保证数据的安全。PHP中实现此功能主要需要使用的函数主要是pack及unpack函数pack压缩资料到位字符串之中。语法: string pack(string format, mixed [args]...);返回值: 字符串本函数用来将

2013-03-09 15:21:08 20444

原创 C实现PHP扩展《Image_Tool》图片常用处理工具类

该扩展是基于ImageMagick基础实现的,图片操作调用的是ImageMagick API。一、类文档说明class Image_Tool{ /** * 构造Image_Tool对象 * @param string|array $img_data * $img_data可以为图片的路径 */ function __construct(

2013-03-06 15:48:07 10910

原创 C实现PHP扩展《Fetch_Url》类数据抓取

该扩展是基于libcurl基础实现的网页数据抓取。一、类文档说明class FetchUrl{ function __construct(); //返回网页内容 常用于fetch()方法返回false时 function body(); //将对象的数据重新初始化,用于多次重用一个FetchUrl对象 function clean(); //返回错误信息 functio

2013-02-26 17:28:29 11709 1

原创 使用Sublime开发PHP扩展

一、使用命令行编译VS项目无需再用VS来进行开发PHP扩展。这样可以配合任意你喜欢的开发工具。使用VS_ROOT\Common7\IDE\devenv.exe进行编译具体使用方法可以使用devenv /?,输出帮助查看@VS_ROOT:表示VS安装路径二、在扩展目录中新建build.bat,并输入devenv EXTENSION_NAME.sln

2012-10-25 08:05:40 16050 1

原创 Windows中搭建PHP扩展开发环境

一、提前准备下载并安装VS2008下载PHP5.4.5程序:NTS下载TS下载其中php二进制包分为VC6、VC8、VC9及TS和NTS版本。VC6、VC8、VC9分别对应VC6、VC2005、VC2008TS表示(Thread Safe),当以ISAPI(IIS SERVER)允许时,因为是单进程中执行多线程,为避免内存泄漏和共享变量安全,建议使用TS版本。当

2012-10-25 08:00:49 21101 6

原创 PHP扩展模块结构

所有PHP扩展遵循一个共同的结构1、头文件包含(包括所有需要的宏、API)2、C声明导出函数3、声明Zend函数块一、头文件包含通过ext_seketon新建的扩展,默认都会新建一个php_extname.h的头文件。其中包含了php.h,该文件导入Zend基本的宏和API。二、声明导出函数ZEND_FUNCTION(my_f

2012-09-01 00:03:04 13989 1

原创 GLib介绍与使用

GLib是一种底层库,创建GDK和GTK应用程序时该库提供许多有用的定义和函数。包括基本类型及限制的定义、标准宏、类型转化、字节序、存储分配、警告和断言、消息记录、计时器、字符串工具、hook函数、句法扫描器、动态加载模块和字符串自动补全,同时也提供了许多数据类型及相关操作。包括存储块、双向链表、单向链表、哈希表、动态列表、关系和元组及缓存。最后GLib具有很好的移植性,所以使用GLib作

2012-07-26 00:43:29 24972

原创 GTK XML语法解析器开发

篇一、开发前言学习GTK+,原来的目的是能够锻炼Linux C的开发能力。因为工作中很少能用到C,所以希望借此机会实战中学习C。在使用GTK+设计界面时,需要编写大量重复且有规律可循的代码,让开发工作中的大量时间耗费在界面布局中。加上之前研究过Android界面设计,感觉非常方便,用通俗易懂的XML来描述界面,并解析渲染成最终的界面,所以想到了开发这个工具。反正最终目的,只是为了能

2012-07-19 00:05:47 8702

原创 使用GDB进行调试

使用GDB调试C程序GDB是GNU开源组织发布的一个非图形化的Unix下的程序调试软件。它能使用户在程序运行时观察数据的内部结构和内存使用情况。GDB提供的主要功能:1)监视程序中的变量值2)设置断点,使程序在指定代码行停止。3)单步执行4)动态改变程序的执行环境等一、调试一个简单的程序1、编写主程序test.c#include in

2012-07-19 00:04:20 11150

原创 PHP内核中读取$_GET\$_POST等全局变量

一、内核中获取$_GET\$_POST\$_SERVER\$_FILES\$_COOKIE等全局变量HashTable是PHP很多实现的基础,例如$_GET\$_POST等全局变量实现。那么,在扩展中读取这些全局变量,当然还是操作HashTable。内核中初始化环境变量的通过main/php_variables.c中php_hash_environment(TSRMLS_D)PHP

2012-06-20 00:23:12 14214 2

原创 PHP资源类型

在PHP中,我们经常使用到资源类型变量。例如:mysql连接、文件句柄等。这些变量无法使用标量来表示,那么在Zend内核中是如何将PHP中的资源变量与C语言中的资源衔接的呢?一、资源变量在PHP中的使用$fp = fopen("test.txt", "rw");var_dump($fp);fclose($fp);打印结果:resource(5) of type

2012-05-14 22:45:00 17037 2

原创 PHP中define常量的实现

在应用中经常使用define来定义一些常用的参数信息,来增加程序的可读性和可靠性。在PHP中,常量的名字是一个简单的标识符,执行周期中不能改变,并且默认情况下是大小写敏感的。通常常量总是大写的。注:define中的第三个参数可以设置是否常量名大小写敏感一、常量的内部结构typedef struct _zend_constant { zval value;

2012-05-06 23:20:50 8437

原创 通过VLD扩展分析PHP opcode

机器只能理解机器语言,而PHP作为解释型脚本到底是如何被机器执行的呢?实际上PHP在执行过程中,分为 词法分析、语法分析、编译PHP脚本为opcode,最后Zend引擎会执行这些opcode。在上述执行过程中,经常被人提起的解释型语言性能问题也就是因为每次执行脚本,上述过程都会重复执行。因此,也就出现了APC, xcache, eAccelerator等缓存opchode。一、

2012-05-04 23:13:56 8789

原创 Android主题与样式

一、样式样式是属性的集合,例如定义属性fontColor、fontSize、layout_width、layout_height等,以独立的资源文件存放在XML文件中,并设置样式的名称。Android Style类似网页设计中的级联样式CSS设计思路,可以让设计与内容分离,并且可以方便的继承、覆盖、重用。1.未使用Style<LinearLayout xmlns:andr

2012-04-10 10:56:34 12726 1

原创 jquery插件

下面是对Jquery几个经常用到的地方进行的增强。功能是参考百度七巧板JS框架来完成的。一、页面属性$.page.getHeight():获取页面高度$.page.getWidth():获取页面宽度$.page.createStyleSheet(options):在页面中创建样式表对象$.page.getScrollTop():获取纵向滚动量$.page.getScro

2012-04-07 17:22:01 2426 1

原创 Android Notifications通知

Android提供了三种通知类型方式:Toast Notifications、Status Bar Notification、Dialog Notification现在分别来看看它们适用的场景与使用方法。一、Toast Notifications以背景改变方式,提示一些简短的消息,消息窗口自动淡入淡出,不接受交互事件。例如:当下载某个文件完成时,可以提示简短的“保存成功”。显示

2012-04-02 16:38:32 9402 1

原创 Android Menu菜单

一、Android提供了一些简单的方法来为应用添加Menu菜单。提供了三种类型应用菜单:1、Options Menu:通过Menu按钮调用菜单2、Context Menu:通过长按屏幕,调用注册了的上下文菜单3、Submenu:通过触摸Menu Item,调用子菜单选项二、下面通过案例,来介绍如何定义Menu菜单、处理选项事件。1、在/res/目录下新建menu文件

2012-04-01 10:29:38 8952

原创 Android数据存储

Android提供的数据持久化存储方式有以下几种。1.Shared Preferences:以Key-Value形式存储数据2.Internal Storage:数据文件存储在内存卡3.External Storage:数据存储在外部设备,如SD卡等4.SQLite Databases:SQLite存储方式5.Network Connection:通过WebSe

2012-03-31 11:04:55 6671 1

原创 Activty界面切换动画

在介绍切换动画效果前,先介绍下将使用到的Android SDK提供的工具类。AlphaAnimation:控制动画对象的透明度,淡入淡出效果实现。TranslateAnimation:控制动画对象的位置,实现对象位置的移动动画。Animation:动画抽象类。AnimationUtils:提供了动画的一些常用方法。通过XML方式定义动画的形式。更多的动画说明文档

2012-03-30 11:07:45 7473 7

原创 Android SDK for windows开发环境搭建

一、所需软件1、JDK 下载这里提供JDK6 for Windows x86 (32-bit)版本下载地址(点击下载)更多版本可以进入:http://www.oracle.com/technetwork/java/javase/downloads/index.html2、Eclipse集成ADT版本下载(点击下载)Eclipse使用的版本是eclipse-SDK-3.7.2-w

2012-03-30 10:16:54 4470

原创 Java自定义注解

Java注解目前广泛被应用。spring中的基于注解的依赖注入、Spring Web MVC中的Route、PlayFramework中的基于注解的Validation等。使用注解,可以在适当地方替代XML的繁琐。现在来看看,如何自定义注解。目标:通过注解方式,定义属性的默认值。例如:public class DefaultUse { @Default(value =

2012-03-03 02:04:39 4587 2

转载 编程学习导图

转载一张图片,对照一下,看看自己还需要学习哪些东西吧。

2012-01-30 17:38:56 1831

原创 Linux GCC编译使用动态、静态链接库

在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件。动态链接库的好处就是节省内存空间。1、Linux下创建动态链接库在使用GCC编译程序时,只需加上-shared选项即可,这样生成的执行程序即为动态链接库。例如有文件:hello.c x.h main.c编译:gcc hello.c -fPIC -o libhello.so

2012-01-16 23:01:31 73346 8

原创 Redis C客户端API

Redis安装步骤:1.redis server安装wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz #下载文件tar xzf redis-2.4.6.tar.gzcd redis-2.4.6makecp src/redis-server src/redis-cli /usr/bin/ #方便在终端在任何地方

2012-01-15 23:01:56 19587 2

原创 PHP源码分析-面向对象(一)

在PHP中,面向对象与Class是密切相关的,来看看在内核中如何实现Class的接口、继承、私有、受保护、公开等特性。一、创建类zend_class_entry是内核中定义的一个结构体,是PHP中类与对象的基础结构类型。如何在扩展中定义myclass类,并能够在PHP中能够实例化?PHP中看起来像这样:<?php $obj = new myclass();?>内

2012-01-02 21:31:32 6452

原创 PHP源码分析-HashTable API

一、创建HashTableint zend_hash_init( HashTable *ht,//指向一个HashTable uint nSize,//nSize是指这个HashTable可以拥有的元素的最大数量。在我们添加新的元素时,这个值会根据情况决定是否自动增长,这个值永远都是2的次方,如果你给它的值不是一个2的次方 //的形式,那它将自动调整成大于它的最小的2的次方值。它

2011-12-17 17:43:17 5037

原创 PHP源码分析-数组

PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一个符

2011-12-15 13:53:15 7903

原创 PHP源码分析-变量的存储方式

PHP中的变量类型和值是通过C语言实现的,内核具体是如何组织用户在PHP中定义的变量呢?HashTable在ZE内核中被广泛使用,PHP变量也正是存储在一个HashTable实现的符号表里。当在PHP中调用一个函数或者类时,内核会创建一个新的符号表,这也是为什么在函数中无法使用函数外部定义的变量的原因。(因为他们分属两个符号表,一个当前作用域,一个全局作用域)现在来看内核中是如

2011-12-09 17:16:39 4179

原创 PHP源码分析-变量的引用计数、写时复制(Reference counting & Copy-on-Write)

PHP语法中有两种赋值方式:引用赋值、非引用赋值。<?php $a = 1; $b = $a; // 非引用赋值 $c = &$b; // 引用赋值从表面看,通常会这样认为:“引用赋值就是两个变量对应同一个变量(在C中其实就是一个zval),非引用赋值则是直接产生的一个新的变量(zval),同时将值copy过来”。这种认为在大部分情况下都是可以想通的。(#1)但有

2011-12-01 14:08:10 3006

原创 PHP源码分析-PHP的生命周期

PHP的最多的两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。1、当我们在终端敲入php这个命令的时候,它使用的是CLI。它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。2、当使用Apache作为宿主时,当一个请求到来时,PHP会来支持完成这个请求。main/php.h中定义了以下

2011-11-30 22:03:32 5784

原创 PHP源码分析-弱类型变量实现

PHP是弱类型,动态的语言脚本。在申明一个变量的时候,并不需要指明它保存的数据类型。例如:<?php$var = 1;$var = "variable";$var = 1.00;$var = array();$var = new Object();动态变量,在运行期间是可以改变的,并且在使用前无需声明变量类型。那么,问题一、Zend引擎是如何用C实现这种弱类型

2011-11-27 22:50:17 5686

PHP tokyo cabinet扩展

尝试开发PHP的扩展,仅用于学习。目前仅能够在windows下编译通过。 Linux下的tokyo cabinet API与Windows与差别,写的时候是在windows下,准备在linux下编译时才发现tokyo cabinet API在Unix下与Windows下是不一样的

2013-03-28

航班查询系统源码

航班查询系统源码。使用Apache Mina Server框架开发

2011-09-29

航班查询系统

航班查询系统,抓去携程网的单程、往返、联程数据并返回给客户端。

2011-09-29

phpBatis组件

模仿java中mybatis而开发的一套php版batis

2011-09-29

swing 模仿QQ登录界面

swing 模仿QQ登录界面 自定义窗体结构

2011-09-04

swing 模仿QQ登录界面

swing 模仿QQ登录界面 自定义窗体结构

2011-09-04

jakarta-taglibs-standard-1.1.2

首先,将压缩包中的lib目录和tld目录解压缩。 在工程目录下,新建名字为tld文件夹,将*.tld拷贝进tld文件夹中。 在web.xml文件中进行配置 JSTL1.1.2及配置说明

2011-07-14

空空如也

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

TA关注的人

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