PHP源代码简单分析
PHP源代码简单分析
1. 目录结构
1. build 和编译有关的目录。
2. ext 扩展库代码,例如 Mysql、zlib、iconv 等我们熟悉的扩展库。
3. main 主目录。
4. sapi 和各种服务器的接口调用,例如apache、IIS等,也包含一般的fastcgi、cgi等。
5. win32 和 Windows 下编译 PHP 有关的脚本。用了 WSH。
6. Zend 文件夹核心的引擎。
2. PHP使用Lex和Yacc对语法进行解析。
在 Zend 目录下有两个文件 zend_language_parser.y 与 zend_language_scanner.l 他们是Lex和Yacc的脚本文件,通过这两个脚本文件生成对应的.c和.h文件,实际上这在 linux 下非常普遍,gcc 也使用它们产生语树。
3. PHP如何使用Mysql?
ext 目录下有一个 mysql 子目录,这个目录中的php_mysql.c 和 php_mysql.h 负责 PHP 与 Mysql 操作。使用了 Mysql 手册中的 C 语言 API。
4. 安全模式?
main 文件夹下的safe_mode.h 和 safe_mode.c 文件负责PHP的安全模式。
5. 那些是 PHP 的标准函数,那些是扩展函数?
ext 目录下英文意思是扩展,而在 ext 下还是有一个 standard 文件夹,存放着 PHP 中的标准函数,例如 explode 这个函数是在 ./ext/standard/string.c 下定义的。
6. PHP 源代码中的PHP_FUNCTION(xx) 宏。
这个宏用来检验一个函数名称是否合法。合法的函数名称应该由小写字母及下划线组成。
7. 那些函数集是标准的?
通过 ./ext/standard/ 目录我们可以看到以下常用函数集是标准的。字符串函数集、数组函数集、文件及目录操作函数集、md5算法等。
8. 一些函数的实现过程
1. fsockopen, pfsockopen 的实现
这两个函数的实现离不开 ./ext/standard/fsock.c 文件中的 php_fsockopen_stream 函数。具体的socket都在./main/network.c 中实现。
9. PHP 函数集注册过程
在./main/internal_functions.c 中有一个数组 php_builtin_extensions 默认下有以下成员:
1. phpext_bcmath_ptr
2. phpext_calendar_ptr
3. phpext_com_dotnet_ptr
4. phpext_ctype_ptr
5. phpext_date_ptr
6. phpext_ftp_ptr
7. phpext_has
相关文档:
自己编写基于MVC的轻量级PHP框架
2008-4-3 23:33:56 已被阅读:
477 发表评论
做WEB开发已有一年,每次都写重复的东西, 因此,想自己写一下框架,以后开发方便.
本人之前学习asp.NET两年,JSP半年,可是后来因为工作的原故换成PHP.其实很不喜欢PHP的语法.还有PHP的函数名,每回都忘记..还是喜
欢C#和JAVA的语法,哈...不 ......
1,定义header()头部输出格式
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:finlename=php.xls");
vnd.ms-excel -----定义输出文件格
php.xls ---------定义输出的文件名
2,输出编� ......
Memcache::add — 添加一个值,如果已经存在,则返回false
Memcache::addServer — 添加一个可供使用的服务器地址
Memcache::close — 关闭一个Memcache对象
Memcache::connect — 创建一个Memcache对象
memcache_debug — 控制调试功能
Memcache::decrement — 对保存的某个key中的值� ......
之前写的crud类实在比较简单(http://blog.csdn.net/yycai/archive/2009/12/15/5012353.aspx),重新封装了一下:
/**
* 自动化数据表操作类
* @example
*
* $db = cls_crud::factory(array('table'=>'article'));
* $data = $db->get_block_list(array('category_id' => 3), ......
/**********************************
APACHE
***********************************/
编辑参数:
./configure" \
"--prefix=/usr/local/apache" \
"--enable-so" \
"--enable-ssl" \
"--enable-mods-shared=most" \
"--with-mpm=event" \
"--with-ssl=/usr/local/openssl" \
"--enable-cache" \
"--enable-mem- ......