God's blog

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

PHP扩展实现的简单MVC框架

公司项目中WEB项目几乎都是使用codeigniter框架,为了降低PHP的单次执行请求时间、减低服务器处理响应时间, 同时提高每分钟应答的总数,开发这个扩展的目的是将Router、Template、Config、Controller等框架提高的基础通用功能由底层实现, PHP脚本仅处理业务逻辑,...

2014-04-10 18:45:26

阅读数:6752

评论数:0

VS2012开发调试PHP扩展

前言 开发中必不可少的环节就是调试,而调试的方式直接影响到开发效率和软件质量。 之前开发PHP扩展,一直不会DEBUG调试,每次调试都是重新编译、执行再运行PHP脚本看运行状况再调试。太痛苦、太影响效率了。也百度、谷歌了如何调试PHP扩展的问题,但回答的几乎都是GDB,可惜也不知道如何实际操作。 ...

2013-10-15 00:02:04

阅读数:17514

评论数:5

PHP扩展 - 《config》

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

2013-09-29 11:50:15

阅读数:5529

评论数:0

扩展实现PHP Benchmark

一、PHP Benchmark实现思路 在看Redis慢查询日志实现的过程中,觉得这个功能很有用,能够帮助快速分析出性能问题出处,所以想到为PHP实现这样的功能。 实现思路也是借鉴Redis对于慢查询的处理流程。(此扩展目前仅支持Linux) 此扩展的作用是帮助分析执行时间过长的PH...

2013-05-11 15:43:47

阅读数:10100

评论数:1

PHP内核中的神器之HashTable

一、哈希表定义 哈希表(或散列表),是将键名key按指定的散列函数HASH经过HASH(key)计算后映射到表中一个记录,而这个数组就是哈希表。 这里的HASH指任意的函数,例如MD5、CRC32、SHA1或你自定义的函数实现。 二、HashTable性能 HashTable是一种...

2013-04-25 17:23:46

阅读数:20522

评论数:8

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

一、导语 连接池在JAVA中应用的很广泛,而在PHP中很少使用。 以Mysql为例,JAVA中使用连接池的原因之一是避免重复新建、释放连接资源带来的开销。而在PHP中都是直连,因为这部分开销对于C API而言性能上是没有问题的。 那么既然PHP直连已经没有性能问题,那为何还要多次一举开发my...

2013-04-22 18:22:10

阅读数:19543

评论数:17

C实现PHP扩展《Cabinet》

这个扩展是将Tokyo Cabinet的部分API提供给PHP客户端调用。 下面是来自百度百科的一段对Tokyo Cabinet的介绍: Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序 ...

2013-03-28 18:45:56

阅读数:8348

评论数:0

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

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

2013-03-09 15:21:08

阅读数:18229

评论数:0

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

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

2013-03-06 15:48:07

阅读数:9697

评论数:0

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

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

2013-02-26 17:28:29

阅读数:10791

评论数:1

使用Sublime开发PHP扩展

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

2012-10-25 08:05:40

阅读数:14836

评论数:1

Windows中搭建PHP扩展开发环境

一、提前准备 下载并安装VS2008 下载PHP5.4.5程序: NTS下载 TS下载 其中php二进制包分为VC6、VC8、VC9及TS和NTS版本。 VC6、VC8、VC9分别对应VC6、VC2005、VC2008 TS表示(Thread Safe),当以ISAPI(IIS ...

2012-10-25 08:00:49

阅读数:19729

评论数:7

PHP扩展模块结构

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

2012-09-01 00:03:04

阅读数:12658

评论数:1

PHP资源类型

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

2012-05-14 22:45:00

阅读数:15308

评论数:2

PHP中define常量的实现

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

2012-05-06 23:20:50

阅读数:7668

评论数:0

通过VLD扩展分析PHP opcode

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

2012-05-04 23:13:56

阅读数:8397

评论数:0

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

在PHP中,面向对象与Class是密切相关的,来看看在内核中如何实现Class的接口、继承、私有、受保护、公开等特性。 一、创建类 zend_class_entry是内核中定义的一个结构体,是PHP中类与对象的基础结构类型。 如何在扩展中定义myclass类,并能够在PHP中能够实例...

2012-01-02 21:31:32

阅读数:5982

评论数:0

PHP源码分析-HashTable API

一、创建HashTable int zend_hash_init( HashTable *ht,//指向一个HashTable uint nSize,//nSize是指这个HashTable可以拥有的元素的最大数量。在我们添加新的元素时,这个值会根据情况决定是否自动增长,这个值永远都是2...

2011-12-17 17:43:17

阅读数:4824

评论数:0

PHP源码分析-数组

PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢? PHP大部分功能,都是通过HashTable来实现,其中就包括数组。 Has...

2011-12-15 13:53:15

阅读数:7357

评论数:0

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

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

2011-12-09 17:16:39

阅读数:3835

评论数:0

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