PHP
文章平均质量分 74
上帝禁区
学习能力强,解决实际问题能力突出
展开
-
PHP扩展实现的简单MVC框架
公司项目中WEB项目几乎都是使用codeigniter框架,为了降低PHP的单次执行请求时间、减低服务器处理响应时间,同时提高每分钟应答的总数,开发这个扩展的目的是将Router、Template、Config、Controller等框架提高的基础通用功能由底层实现,PHP脚本仅处理业务逻辑,发挥各自的优势。考虑到项目迁移的成本,所以此扩展的MVC也是基于CI原型来设计的,同时原创 2014-04-10 18:45:26 · 7813 阅读 · 0 评论 -
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 · 14012 阅读 · 1 评论 -
netbeans养眼的配色方案,建议大家一起使用netbeans
介绍三种好看、养眼的netbeans主题一、Dreamweaver 主题效果如下:下载地址:http://115.com/file/dpjo6keh#Dreamweaver.zip 二、Twilight主题效果如下:下载地址:http://115.com/file/c2c0gemy#Netbeans-Twi...ght-Theme.zip原创 2010-12-07 23:25:00 · 19258 阅读 · 0 评论 -
PHP中define常量的实现
在应用中经常使用define来定义一些常用的参数信息,来增加程序的可读性和可靠性。在PHP中,常量的名字是一个简单的标识符,执行周期中不能改变,并且默认情况下是大小写敏感的。通常常量总是大写的。注:define中的第三个参数可以设置是否常量名大小写敏感一、常量的内部结构typedef struct _zend_constant { zval value;原创 2012-05-06 23:20:50 · 8474 阅读 · 0 评论 -
通过VLD扩展分析PHP opcode
机器只能理解机器语言,而PHP作为解释型脚本到底是如何被机器执行的呢?实际上PHP在执行过程中,分为 词法分析、语法分析、编译PHP脚本为opcode,最后Zend引擎会执行这些opcode。在上述执行过程中,经常被人提起的解释型语言性能问题也就是因为每次执行脚本,上述过程都会重复执行。因此,也就出现了APC, xcache, eAccelerator等缓存opchode。一、原创 2012-05-04 23:13:56 · 8826 阅读 · 0 评论 -
PHP源码分析-面向对象(一)
在PHP中,面向对象与Class是密切相关的,来看看在内核中如何实现Class的接口、继承、私有、受保护、公开等特性。一、创建类zend_class_entry是内核中定义的一个结构体,是PHP中类与对象的基础结构类型。如何在扩展中定义myclass类,并能够在PHP中能够实例化?PHP中看起来像这样:<?php $obj = new myclass();?>内原创 2012-01-02 21:31:32 · 6511 阅读 · 0 评论 -
PHP源码分析-数组
PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一个符原创 2011-12-15 13:53:15 · 7950 阅读 · 0 评论 -
PHP源码分析-变量的存储方式
PHP中的变量类型和值是通过C语言实现的,内核具体是如何组织用户在PHP中定义的变量呢?HashTable在ZE内核中被广泛使用,PHP变量也正是存储在一个HashTable实现的符号表里。当在PHP中调用一个函数或者类时,内核会创建一个新的符号表,这也是为什么在函数中无法使用函数外部定义的变量的原因。(因为他们分属两个符号表,一个当前作用域,一个全局作用域)现在来看内核中是如原创 2011-12-09 17:16:39 · 4232 阅读 · 0 评论 -
PHP源码分析-HashTable API
一、创建HashTableint zend_hash_init( HashTable *ht,//指向一个HashTable uint nSize,//nSize是指这个HashTable可以拥有的元素的最大数量。在我们添加新的元素时,这个值会根据情况决定是否自动增长,这个值永远都是2的次方,如果你给它的值不是一个2的次方 //的形式,那它将自动调整成大于它的最小的2的次方值。它原创 2011-12-17 17:43:17 · 5059 阅读 · 0 评论 -
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 · 3042 阅读 · 0 评论 -
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 · 17095 阅读 · 2 评论 -
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 · 21154 阅读 · 6 评论 -
VS2012开发调试PHP扩展
前言开发中必不可少的环节就是调试,而调试的方式直接影响到开发效率和软件质量。之前开发PHP扩展,一直不会DEBUG调试,每次调试都是重新编译、执行再运行PHP脚本看运行状况再调试。太痛苦、太影响效率了。也百度、谷歌了如何调试PHP扩展的问题,但回答的几乎都是GDB,可惜也不知道如何实际操作。VS用的不多,很多功能也不知道干嘛的,前几天有位同事说可以用VS的“附加到进程”来调试PHP的扩原创 2013-10-15 00:02:04 · 19426 阅读 · 5 评论 -
PHP扩展 - 《config》
《config》扩展是实现将配置选项加载到内存中。 建议使用场景: 1、多个项目中需要调用共用的配置,使用config来管理,避免一式多份的拷贝维护。 2、配置选项很多,使用config加载入内存,可以避免PHP每次加载配置文件进行解释执行。原创 2013-09-29 11:50:15 · 6386 阅读 · 0 评论 -
PHP内核中的神器之HashTable
一、哈希表定义哈希表(或散列表),是将键名key按指定的散列函数HASH经过HASH(key)计算后映射到表中一个记录,而这个数组就是哈希表。这里的HASH指任意的函数,例如MD5、CRC32、SHA1或你自定义的函数实现。二、HashTable性能HashTable是一种查找性能极高的数据结构,在很多语言内部都实现了HashTable。理想情况下HashTable的性原创 2013-04-25 17:23:46 · 23243 阅读 · 8 评论 -
扩展实现PHP Benchmark
一、PHP Benchmark实现思路在看Redis慢查询日志实现的过程中,觉得这个功能很有用,能够帮助快速分析出性能问题出处,所以想到为PHP实现这样的功能。实现思路也是借鉴Redis对于慢查询的处理流程。(此扩展目前仅支持Linux)此扩展的作用是帮助分析执行时间过长的PHP脚本记录的要素有:1、脚本执行时间2、当前请求的REQUEST数据3、当前请求的文件相对原创 2013-05-11 15:43:47 · 11073 阅读 · 1 评论 -
C实现PHP扩展《Fetch_Url》类数据抓取
该扩展是基于libcurl基础实现的网页数据抓取。一、类文档说明class FetchUrl{ function __construct(); //返回网页内容 常用于fetch()方法返回false时 function body(); //将对象的数据重新初始化,用于多次重用一个FetchUrl对象 function clean(); //返回错误信息 functio原创 2013-02-26 17:28:29 · 11762 阅读 · 1 评论 -
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 · 10985 阅读 · 0 评论 -
C实现PHP扩展《Cabinet》
这个扩展是将Tokyo Cabinet的部分API提供给PHP客户端调用。下面是来自百度百科的一段对Tokyo Cabinet的介绍:Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序 列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念原创 2013-03-28 18:45:56 · 9157 阅读 · 0 评论 -
使用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 · 16061 阅读 · 1 评论 -
C实现PHP的mysql数据库连接池
一、导语连接池在JAVA中应用的很广泛,而在PHP中很少使用。以Mysql为例,JAVA中使用连接池的原因之一是避免重复新建、释放连接资源带来的开销。而在PHP中都是直连,因为这部分开销对于C API而言性能上是没有问题的。那么既然PHP直连已经没有性能问题,那为何还要多次一举开发mysql的数据库连接池扩展呢?因为根本的目的是在于理解PHP的TS(Tthread Safe线程安全)与原创 2013-04-22 18:22:10 · 21449 阅读 · 17 评论 -
PHP数据压缩、加解密(pack, unpack)
网络通信、文件存储中经常需要交换数据,为了减少网络通信流量、文件存储大小以及加密通信规则,经常需要对数据进行双向加解密以保证数据的安全。PHP中实现此功能主要需要使用的函数主要是pack及unpack函数pack压缩资料到位字符串之中。语法: string pack(string format, mixed [args]...);返回值: 字符串本函数用来将原创 2013-03-09 15:21:08 · 20497 阅读 · 0 评论 -
PHP源码分析-PHP的生命周期
PHP的最多的两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。1、当我们在终端敲入php这个命令的时候,它使用的是CLI。它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。2、当使用Apache作为宿主时,当一个请求到来时,PHP会来支持完成这个请求。main/php.h中定义了以下原创 2011-11-30 22:03:32 · 5827 阅读 · 0 评论 -
PHP源码分析-弱类型变量实现
PHP是弱类型,动态的语言脚本。在申明一个变量的时候,并不需要指明它保存的数据类型。例如:<?php$var = 1;$var = "variable";$var = 1.00;$var = array();$var = new Object();动态变量,在运行期间是可以改变的,并且在使用前无需声明变量类型。那么,问题一、Zend引擎是如何用C实现这种弱类型原创 2011-11-27 22:50:17 · 5725 阅读 · 0 评论 -
Linux做PHP守护进程
Linux做PHP守护进程原创 2010-11-30 17:12:00 · 3278 阅读 · 0 评论 -
Xdebug基本配置参数
以下是我在http://xdebug.org/docs/basic Xdebug官方documention里阅读并翻译的。本人英语水平有限,如果有错误还望指望。原创 2010-10-02 13:59:00 · 4921 阅读 · 0 评论 -
Xdebug的var_dump重载
原文来在Xdebug官方,http://xdebug.org/docs/display。以下是我阅读后的简单翻译。可能存在偏差或错误原创 2010-10-02 14:47:00 · 4327 阅读 · 0 评论 -
WAMP配置扩展Xdebug
Xdebug现在的最新版本是xdebug 2.0.2:“Windows modules for PHP 5.1.2-5.1.7、Windows modules for PHP 5.2.1-5.2.7”原创 2010-09-29 13:02:00 · 12007 阅读 · 1 评论 -
Yii application应用的生命周期
Yii application应用的生命周期。当处理用户请求时,应用将经历如下声明周期:原创 2010-09-17 22:35:00 · 1265 阅读 · 0 评论 -
PHP页面输出压缩ob_start()
PHP处理后的网页如果不经过处理,HTML将原样输出。经过压缩和没有压缩的文件会有多大差距呢,我们来做个实验。原创 2010-09-16 16:29:00 · 1496 阅读 · 0 评论 -
PHP异常处理
创建你自己的处理器。PHP目前只提供一个简单的处理器Exception。原创 2010-09-16 16:25:00 · 899 阅读 · 0 评论 -
PHP之error_reporting()
在项目开发过程中,一般将php.ini中的display_error 设置为on,这样能够提示错误信息。原创 2010-09-16 16:27:00 · 834 阅读 · 0 评论 -
异常的传递、重掷
有时遇到一些异常无需立刻处理错误,那么有一个解决方法,就是将异常责任交回给当前调用代码的方法,也就是在catch中再次抛出异常(重掷异常),这将使异常沿着方法的调用链向上传递。原创 2010-09-16 16:23:00 · 953 阅读 · 0 评论 -
clickHeat网站点击记录工具
ClickHeat可以记录用户网页上用户点击的情况,生成直观的热度分布图,能够帮助分析、改进网页的布局。它是一款开源工具,由JS+PHP开发,并且支持多国语言(包括中文)。安装简单、配置简单。是一个很好的热度分析工具。原创 2010-09-16 16:14:00 · 2898 阅读 · 0 评论 -
PEAR DB类函数说明
PEAR DB类函数说明原创 2010-10-08 16:18:00 · 1159 阅读 · 0 评论 -
好习惯:每个模块都处理自己的错误
好习惯:每个模块都处理自己的错误。最终目的是希望人们能够使用您的类,而不必了解其中的工作原理。如果他们使用的方法不正确或者不是按照期望的方法使用,也不需要猜测不能工作的原因。当调用者使用时发生错误,可以迅速的知道错误原因,而不必频繁的进行断点设置。原创 2011-01-29 09:15:00 · 815 阅读 · 0 评论 -
好习惯:使用公共访问方法
好习惯:使用公共访问方法。为调用者提供了一种从 PHP 类中获取信息的公共方法,这样当类发生更改时,调用者的代码更改量会很小或无需更改。原创 2011-01-29 10:19:00 · 844 阅读 · 0 评论 -
分布式存储Memcache替代Session方案
PHP自带的Session实际是在服务器中为每个客户建立独立的文件存放各自的信息。在不做处理的情况下,很容易被客户端伪造。并且由于采用文件形式,所以存在着IO读写的瓶颈。一般当用户在线达到1000左右时,就会出现访问速度明显下降的问题。Memcache是应用层级的缓存原创 2010-09-16 16:12:00 · 4147 阅读 · 0 评论 -
航班数据查询软件
一、开启服务器端航班动态软件抓取携程网的单程、往返、联程航班数据。软件界面截图:jar包下载地址:http://download.csdn.net/detail/a600423444/3648490源码下载地址:http://download.csdn.n原创 2011-09-29 23:08:00 · 4430 阅读 · 0 评论 -
phpBatis组件
用过java开源项目mybatis(ibatis)后,觉得它的思路挺好,于是做了一个风格类似于batis的组件。将SQL从MVC中的模型中分离出来,一方面便于后期SQL的优化,也让PHP不再夹杂着SQL,让PHPer更专注于业务逻辑。下面是demo一、主配置文原创 2011-09-29 14:40:41 · 1968 阅读 · 0 评论