»
返回PHPEye网站首页
游客:
注册
|
登录
|
统计
|
帮助
PHPEye开源社区
»
PHP技术讨论区
» php-5.x.x-Win32.zip的组织
‹‹ 上一主题
|
下一主题 ››
11
1/2
1
2
››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题: php-5.x.x-Win32.zip的组织
diogin
版主
UID 16
精华
1
积分 10
帖子 38
翻译 0
原创 0
阅读权限 100
注册 2007-5-4
来自 广东省广州市
状态 离线
#1
使用道具
发表于 2007-5-25 03:36
资料
短消息
加为好友
php-5.x.x-Win32.zip的组织
不知分析过php文件组织的人多不多,我个人有最小化倾向,总喜欢把一个东西拆开来然后重新一块块拼起来,这回拿php压缩包开涮:)
最小化情况下的php其实只需要两个文件就能运行了: php5ts.dll和一个sapi(Server API,说白了就是接口),如php.exe或
php5apache2_2.dll,等等。php语言的完整功能都集中在一个动态链接库 php5ts.dll 里,其它都是外设 :) 这个名字也不是乱取的,
ts实际上是线程安全的缩写。所以,如果需要一个命令行脚本解释器,那么 phpt5s.dll + php.exe 就足够,如果需要以apache模块的
方式运行php解释器,那么 php5ts.dll + php5apache2_2.dll 就足够(根据apache版本加载相应的sapi)。
这种情况下,其实还隐含了一个文件,想必你也猜出来了,就是 php.ini 文件。当没有给php提供配置文件时,它会默认使用一个配置文件,
这个文件就是php.ini-dist。所以,在前两个文件的基础上,再加上一个php.ini文件,就可以完全定制php的行为了。
在哪寻找这个 php.ini 是由sapi决定的,比如命令行下可以用 php -c 来控制加载哪个 php.ini,apache模块里可以用httpd.conf的PHPIniDir
来决定在哪寻找 php.ini,等等。
那么,sapi运行时在哪找php5ts.dll? 首先是在sapi的当前目录,如果找不到,就到PATH目录去找。这个跟后面会讲到的“扩展加载外部库”
实际上原理是一样的,不过有一点区别:php_xxx.dll加载外部库时,外部库跟php_xxx.dll在同一个目录下并没有用,而必须在PATH或调用
php_xxx.dll的sapi目录下才行,以前很多人安装php时,把php5ts.dll和libmysql.dll拷贝到apache的bin目录下就是这个原因。
现在有三个文件了: php5ts.dll, sapi, php.ini。该是添加php扩展的时候了,这些众多的扩展才是php的威力所在!怎么通向扩展?总得
有条路子对不对,呵呵。这条路子就是php.ini里的 extension_dir 配置项。把这个配置项设为 php 扩展的路径,就可以把这些php扩展
导到php里。设置了 extension_dir 选项后,就往这个目录下塞你需要的扩展,然后在 php.ini 里做个记号:extension=php_xxx.dll即可。
扩展并不是都是同一类的,有些扩展本身自己实现了功能函数,有些扩展则链接到外部函数库(zend扩展不在讨论之列)。比如
php_gd2.dll,php_socket.dll,php_memcached.dll,都是自己实现了功能函数;而php_mysql.dll,则是链接到外部函数库的,这个外部
库就是我们熟悉的libmysql.dll。还有其它扩展如oci,也需要外部函数库。
那么,需要外部函数库的扩展,到哪去找这些函数库?一个地方是调用sapi的目录,另一个地方是PATH环境变量定义的目录。前面说过,
跟扩展在同一个目录下是没有用的,除非这个目录也在PATH里。php包的根目录下一大堆的libxxx.dll,fdftk.dll,ssleay32.dll,yaz.dll等等
都是外部函数库。
除了上面讲的这些最核心的文件外,还有其它几个文件和目录,这些目录基本上是给开发和扩展php用的,应用层的php程序基本用不到
这些文件和目录。不过这里有一个例外,就是go-pear.bat文件和PEAR目录,这些是安装PEAR用的,PEAR是一套可复用的类库,可以在
多个项目中复用这些代码。关于PEAR的详细介绍我就不讲了,已经有很多文章介绍这个了,呵呵。
大致就先写这些,有什么想法大家多讨论讨论:)
The world is everything that is the case.
Haohappy
超级版主
PHPEye站长
UID 2
精华
11
积分 110
帖子 260
翻译 6
原创 1
阅读权限 150
注册 2007-5-2
状态 离线
#2
使用道具
发表于 2007-5-25 08:28
资料
短消息
加为好友
好文章,讲得很清楚,谁来介绍下Linux下PHP源码包的文件及安装后的文件?
Verdana
新手上路
UID 39
精华
1
积分 10
帖子 18
翻译 0
原创 0
阅读权限 10
注册 2007-5-23
状态 离线
#3
使用道具
发表于 2007-5-29 13:49
资料
主页
短消息
加为好友
关于 php.ini,有点疑问,PHP 核心会自动加载 php.ini-dist 吗? 我觉得应该不会的。
这个文件以及优化过配置选项的 php.ini-recommended,都只是配置模板而已。
否则 Install manual 也不会让我们把 php.ini-dist/recommended 更名了。
关于加载 php.ini,我的理解是这样的:
首先 PHP 给了我们很多方法去指定配置文件的位置,甚至文件名,比如:
1. PHPRC 环境变量
2. Windows 的注册表
3. 当前目录
4. 系统目录
5. SAPI 的专有命令,类似 PHPIniDir 等
等等....
这些地方,并不是只能放 Path, 也是可以直接写文件名称的,比如 C:/PHP5/php5-demo.ini
如果这里是一个文件,PHP 会直接加载这个文件,而不会再寻找其它的配置文件。
如果这里只是一个目录,那么这个目录会被加入到 Search Path 中.
接着 PHP 会寻找 SAPI 的专有配置文件,格式为 php-$SAPI-NAME$.ini
比如我们常用的 php-apache2handler.ini, php-cli.ini, php-isapi.ini, php-cgi.ini 等等。
如果这些也没有找到,就在 search path 中寻找 php.ini。
即使没有任何配置文件,PHP 也是可以运行的。
上面是我的一点想法,可惜我没有办法去验证,难免有误,请不要见笑,呵呵~
wps2000
新手上路
UID 34
精华 0
积分 0
帖子 73
翻译 0
原创 0
阅读权限 10
注册 2007-5-20
状态 离线
#4
使用道具
发表于 2007-5-29 14:49
资料
短消息
加为好友
QUOTE:
原帖由
Verdana
于 2007-5-29 13:49 发表
关于 php.ini,有点疑问,PHP 核心会自动加载 php.ini-dist 吗? 我觉得应该不会的。
这个文件以及优化过配置选项的 php.ini-recommended,都只是配置模板而已。
否则 Install manual 也不会让我们把 php.ini-dist/recommend ...
没有任何php.ini肯定能运行,只要不使用扩展ext下的东西
diogin
版主
UID 16
精华
1
积分 10
帖子 38
翻译 0
原创 0
阅读权限 100
注册 2007-5-4
来自 广东省广州市
状态 离线
#5
使用道具
发表于 2007-6-1 01:15
资料
短消息
加为好友
Verdana说得对,我写的时候对php.ini的确没有多少把握。
我先看看php-src里跟这部分相关的源代码后再讨论:)
The world is everything that is the case.
hick
新手上路
UID 84
精华 0
积分 0
帖子 3
翻译 0
原创 0
阅读权限 10
注册 2007-6-17
状态 离线
#6
使用道具
发表于 2007-6-17 22:34
资料
短消息
加为好友
php.ini-dist 的事不用看源代码这么麻烦,嘿嘿,你把已加载的 php.ini 改名一下就知道了。另外,加载 php.ini 的顺序,看看 php 包带的 readme 就知道了。
hick
新手上路
UID 84
精华 0
积分 0
帖子 3
翻译 0
原创 0
阅读权限 10
注册 2007-6-17
状态 离线
#7
使用道具
发表于 2007-6-17 22:37
资料
短消息
加为好友
再另外:所有跟 php.ini 相关的东西在 php 内部都会有默认值,所以没有 php.ini 也是可以的。
rainchen
新手上路
UID 57
精华 0
积分 0
帖子 1
翻译 0
原创 0
阅读权限 10
注册 2007-6-6
状态 离线
#8
使用道具
发表于 2007-6-22 22:28
资料
短消息
加为好友
libmysql.dll的问题要怎么解决呢?到了5.X都是要放到apache/bin下,想整php4/php5一起执行都不行了
11
1/2
1
2
››
投票
交易
悬赏
活动
PHPEye开源社区
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
当前时区 GMT+8, 现在时间是 2008-9-7 08:05
Powered by
Discuz!
5.5.0
© 2001-2007
Comsenz Inc.
Processed in 0.014634 second(s), 6 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
PHPEye开源社区
-
Archiver