不知分析过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的详细介绍我就不讲了,已经有很多文章介绍这个了,呵呵。
大致就先写这些,有什么想法大家多讨论讨论:)
分享到:
相关推荐
标题“php-5.6.40-nts-Win32-VC11-x64.zip”揭示了这是一个针对Windows 64位系统的PHP 5.6.40版本的非线程安全(NTS)版本,由Visual C++ 11编译器构建。这个特定版本对于那些遇到低版本PHP兼容性问题的用户来说是个...
"php_oci8-2.1.3-7.0-ts-vc14-x64.zip" 文件就是一个包含OCI8扩展的压缩包,专为PHP 7.0版本设计,支持线程安全(TS)并采用Visual C++ 14编译器构建,适用于64位Windows系统。 1. **oci8扩展介绍** OCI8是Oracle ...
压缩包中的两个文件“php-5.4.45-Win32-VC9-x86.zip”和“php-5.4.45-nts-Win32-VC9-x86.zip”分别代表了TS和NTS的PHP 5.4.45版本,均适用于32位Windows系统,由Visual C++ 9(即Visual Studio 2008)编译。...
这个版本是PHP 5.x系列中的一个重要里程碑,它在稳定性和性能上都做了很多优化,同时也包含了丰富的功能特性,为开发者提供了强大的工具箱。 首先,PHP 5.6.34在错误处理方面有了显著的改进。引入了严格模式...
标题“php5.4.3-win32”指的是PHP的5.4.3版本,专为32位Windows操作系统设计。这个版本在2012年发布,是PHP 5.x系列中的一个重要更新,它带来了许多改进和新特性。 在描述中提到的"支持coreseek实时索引"这一点,...
标题 "php-5.2.3-Win32.zip" 提供的信息表明这是一个适用于Windows操作系统的PHP版本,具体为5.2.3。这个压缩包是PHP编程语言的一个发行版,专为在32位Windows环境下运行而设计。PHP是一种广泛使用的开源服务器端...
在这个项目中,HTML5被用来创建各种网页元素,如商品展示、导航栏、购物车等,通过合理的标记来组织信息,使得网页内容更易理解。 2. CSS(Cascading Style Sheets):负责网页的样式和布局。CSS3在此项目中发挥了...
- PHP:下载php-5.3.28-Win32-VC9-x86.msi和对应的zip包 - MySQL:安装mysql-installer-web-community-5.6.17.0.msi - 配置文件编辑器:推荐Notepad++ (npp.6.6.4.Installer.exe) - 开发工具:如Zend Studio、...
Snipe-IT是一款开源的IT资产管理软件,基于PHP和Laravel框架开发,旨在帮助组织有效跟踪和管理硬件、软件资产。这个"snipe-it_内网直接部署版本.zip"文件是一个预配置好的Snipe-IT版本,包含了所有必要的组件,以便...
其次,`apache-tomcat-7.0.23-windows-x64.zip`文件则与Apache Tomcat相关,Tomcat是一个开源的Java Servlet容器,主要用于运行Java Web应用程序,包括JSP和Servlet。虽然Apache HTTP Server和Apache Tomcat都属于...
虽然推荐在Windows 2008系统上使用,但在某些情况下(例如Win10)可能存在兼容性问题。PHPNOW简化了配置过程,使得初学者也能轻松上手。 2. **XAMPP**:XAMPP是由Apache Friends组织开发的一款跨平台的开源软件,...
- 数据库:SQL Server 2012、MySQL 5.5.48 (Win x64)、Webyog SQLyog Ultimate 12.0.8.0 - 集成开发环境:MyEclipse 10.6 #### 3. 竞赛时间 - **竞赛时长**:3.5小时 - **考核内容**:仅设技能操作部分,不包含...
在PHP中,生成压缩文件是常见的需求,尤其在处理大量数据或者...在实际应用中,你可以根据自己的业务需求对`pack_object`函数进行扩展,以满足不同的文件组织结构。同时,确保文件权限设置正确,以防止未经授权的访问。