三月底在上海 PEA 聚会上做了次关于“PHP 运行机制”的演讲,附件是演讲时用的幻灯片。这次演讲我给自己打 70 分,后面发挥得还不错,但整体上感觉内容组织还有改善的余地,演讲时有些话都重复了好几次,环视全场的机会也不多,以后有机会要注意改正。
ps: 其实单独看幻灯片估计也看不出什么东西来:D,有机会要把当时谈的内容给整理一下再发个 paper 上来。
FreeBSD 7.0 昨日正式发布了,最大的亮点就是改善了 SMP 环境下负载能力。官方说相对于 6.x 普通负载下性能提高了 350%,高负载下性能提高了 1500%。如果能得到证实的话,那这些数据可真是相当的恐怖!
出于保守策略,ULE 调度器没有在 7.0 中作为默认的调度器,可能需要重新编译一下内核。GCC 4.x 的引入和 ZFS 文件系统的试验性支持也是让人值得兴奋。
我已经下载下来并在一部机器上试运行了,感觉良好~ ![]()
由 buildconf 处理的配置文件 config.m4 包含了所有在配置过程中所执行的指令。这些指令诸如包含测试包含所需的外部文件,像头文件、库文件等等。PHP 定义了一系列处理这类情况的宏,其中最常用的我们已经在“表3.18 config.m4 中的 M4 宏”列了出来。
表3.18 config.m4 中的 M4 宏
| 宏 | 说明 |
| AC_MSG_CHECKING(message) | 在执行 configure 命令时输出“checking <message>”等信息。 |
| AC_MSG_RESULT(value) | 取得 AC_MSG_CHECKING 的执行结果,一般情况下 value 应为 yes 或 no。 |
| AC_MSG_ERROR(message) | 在执行 configure 命令时输出一条错误消息 message 并中止脚本的执行。 |
| AC_DEFINE(name,value,description) |
向 php_config.h 添加一行定义: #define name value // description (这对模块的条件编译很有用。) |
| AC_ADD_INCLUDE(path) | 添加一条编译器的包含路径,比如用于模块需要为头文件添加搜索路径。 |
| AC_ADD_LIBRARY_WITH_PATH(libraryname,librarypath) | 指定一个库的连接路径。 |
| AC_ARG_WITH(modulename,description,unconditionaltest,conditionaltest) | 这是一款比较强大的宏,用于将模块的描述 description 添加到“configure –help”命令的输出里面。PHP 会检查当前执行的 configure 脚本里面有没有–with-<modulename> 这个选项。 如果有则执行 unconditionaltest 语句(比如 –with-myext=yes 等), 此时,选项的值会被包含在 $withval 变量里面。否则就执行 conditionaltest 语句。 |
| PHP_EXTENSION(modulename, [shared]) | 这个是配置你的扩展时 PHP 必定调用的一个宏。你可以在模块名后面提供第二个参数,用来表明是否将其编译为动态共享模块。这会导致在编译时为你的源码提供一个 COMPILE_DL_<modulename> 的定义。 |
现在你已经掌握了很多关于 PHP 的知识了。你已经知道了如何创建一个动态加载的模块或被静态连接的扩展。你还知道了在 PHP 和 Zend 的内部变量是如何储存的,以及如何创建和访问这些变量。另外你也知道了很多诸如输出信息文本、自动将变量引入符号表等一系列工具函数的应用。
尽管这一章常常有点“参考”的意味,但我们还是希望它能给你一些关于如何开始编写自己的扩展这方面的知识。限于篇幅,我们不得不省略了很多东西。我们建议你花些时间仔细研究一下它的头文件和一些模块(尤其是 ext/standard 目录下的一些文件以及 MySQL 模块,看一下这些众所周知的函数究竟是怎么实现的),看一下别人是怎么使用这些 API 函数的,尤其是那些本章没有提到的那些函数。
抽空编译了这个 windows 版。这个版本主要是根据 hightman 大牛的 xNix 代码 移植而来。主要改动集中在处理了一些 GCC 与 VC 的兼容性代码,Lock 部分借鉴了 PHP 在跨平台方面的一些成果,去掉了 MMAP 支持,改为普通文件操作。
由于代码中含有类方面操作,而 PHP4 和 PHP5 中的 OO 机制又变化较大,因此目前只有 PHP4 版本。等过几天有空再改写个 PHP5 版本,到时一并把相关的 VC 工程文件及修改后源码放出。
-
搜索不到您的频道?
>立即加入 -
想与您的读者互动?快来认领您的频道
>立即认领 -
想知道您的博客详细订阅数据么?
>到FeedSky查看 -
想体验专业的博客托管服务么?
>注册BlogBus


