php pfsockopen 实现,PHP源代码简单分析

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- ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值