PHP在Apache中两种工作方式的区别.doc_第1页
PHP在Apache中两种工作方式的区别.doc_第2页
PHP在Apache中两种工作方式的区别.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP在Apache中两种工作方式的区别.txt不怕偷儿带工具,就怕偷儿懂科技! 1品味生活,完善人性。存在就是机会,思考才能提高。人需要不断打碎自己,更应该重新组装自己。 本文由yhm1100贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 PHP 在 Apache 中两种工作方式的区别 中两种工作方式的区别(CGI 模式、Apache 模块 DLL) 模式、 Windows 下有两种方法 PHP 工作 方法使 工作于 Apache 2.0.x 之中。一种是 使用 CGI 可执行程序,另一种是适用 Apache 模块的 DLL。 方法 这两种工作方式的安装: 这两种工作方式的安装: 安装 PHP 在 Apache 2.0 中的 CGI 方式 ScriptAlias /php/ c:/php/ AddType application/x-httpd-php .php # 对 PHP 4 用这行 Action application/x-httpd-php /php/php.exe # 对 PHP 5 用这行 Action application/x-httpd-php /php/php-cgi.exe PHP 在 Apache 2.0 中的模块方式 # 对 PHP 4 用这两行: LoadModule php4_module c:/php/php4apache2.dll # 别忘了从 sapi 目录中把 php4apache2.dll 拷贝出来! AddType application/x-httpd-php .php # 对 PHP 5 用这两行: LoadModule php5_module c:/php/php5apache2.dll AddType application/x-httpd-php .php # 配置 php.ini 的路径 PHPIniDir C:/php 这两种工作方式的区别: 这两种工作方式的区别: 在 CGI 模式下,如果客户机请求一个 php 文件,Web 服务器就调用 php.exe 去解释这个文件,然后再把解释的结果以网页的形式返回给 客户机; 而在模块化(DLL)中,PHP 是与 Web 服务器一起启动并运行的。 所以从某种角度上来说,以 apache 模块方式安装的 PHP4 有着比 CGI 模式更好的安全性以及更好的执行效率和速度。 一、FastCGI 是什么? FastCGI 是语言无关的、可伸缩架构的 CGI 开放扩展,其主要行为是将 CGI 解释器进程保持在内存中并因此获得较高的性能。众所 周知,CGI 解释器的反复加载是 CGI 性能低下的主要原因,如果 CGI 解释器保持在内存中并接受 FastCGI 进程管理器调度,则可以提供 良好的性能、伸缩性、Fail-Over 特性等等。 FastCGI 的官方站点在 FastCGI 的工作原理是: 1、Web Server 启动时载入 FastCGI 进程管理器(IIS ISAPI 或 Apache Module); 2、FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程 (在任务管理器中可见多个 php-cgi.exe)并等待来自 Web Server 的连 接。 3、当客户端请求到达 Web Server 时,FastCGI 进程管理器选择并连接到一个 CGI 解释器。Web server 将 CGI 环境变量和标准输入 发送到 FastCGI 子进程 php-cgi.exe。 4、FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。当 FastCGI 子进程关闭连接时,请求便告处理完 成。 FastCGI 子进程接着等待并处理来自 FastCGI 进程管理器 (运行在 WebServer 中) 的下一个连接。 在正常的 CGI 模式中, php-cgi.exe 在此便退出了。 在上述情况中,你可以想象 CGI 通常有多慢。每一个 Web 请求 PHP 都必须重新解析 php.ini、重新载入全部 dll 扩展并重初始化全部 数据结构。使用 FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection) 可以工作。 二、为什么要使用 FastCGI,而不是多线程 CGI 解释器? 这可能出于多方面的考虑,例如: 1、你无论如何也不能在 windows 平台上稳定的使用多线程 CGI 解释器,无论是 IIS ISAPI 方式还是 APACHE Module 方式,它们总 是运行一段时间就崩溃了。奇怪么?但是确实存在这样的情况! 当然,也有很多时候你能够稳定的使用多线程 CGI 解释器,但是,你有可能发现网页有时候会出现错误,无论如何也找不到原因,而 换用 FastCGI 方式时这种错误的概率会大大的降低。我也不清楚这是为什么,我想独立地址空间的 CGI 解释器可能终究比共享地址空间 的形式来得稳定一点点。 2、性能!性能?可能么,难道 FastCGI 比多线程 CGI 解释器更快?但有时候确实是这样,只有测试一下你的网站,才能最后下结论。 原因嘛,我觉得很难讲,但有资料说在 Zend WinEnabler 的时代,Zend 原来也是建议在 Windows 平台下使用 FastCGI 而不是 IIS ISAPI 或 Apache Module,不过现在 Zend 已经不做这个产品了。 三、不使用 FastCGI 的理由 1、多进程比多线程消耗更多的服务器内存,php-cgi.exe 解释器每进程消耗 7 至 25 兆内存,将这个数字乘以 50 或 100 试试。 2、性能。确实有时候多线程 CGI 解释器更快,呵呵,而且有时候,它也很稳定。 3、CGI?听起来就很土,呵呵 四、IIS FastCGI 配置方法 1、首先确定你已正确安装了 PHP 4.3.x 及更新的版本。早期版本的 PHP 并未默认加入 FastCGI 支持,如果你想在早期版本中工作, 需要重新编译它。我们假设 PHP 安装在 c:php,支持 FastFCGI 的可执行文件名是 php-cgi.exe。 注意:建议在 Php.ini 中关闭 cgi.force_redirect,启用 fastcgi.impersonate,启用 cgi.rfc2616_header 2、下载 /fastcgi/fastcgi-0.6.zip 并将其中的 isapi_fcgi.dll 解压缩到 c:php 目录下(不是必须在此目录,这里 只是叙述方便) 。 3、使用 regedit.exe 建立如下注册表项: HKEY_LOCAL_MACHINE:SoftwareFASTCGI.php (必需) 4、在此项下建立如下键值: 字符串类型:AppPath,值为 c:phpphp-cgi.exe 字符串类型:BindPath,值为 php-fcgi 以下是可选配置键值: DWORD 类型:StartServers,启动时默认启动的解释器个数,默认值 5 DWORD 类型:MaxServers,最大解释器个数,默认 25 DWORD 类型:IncrementServers,当解释器不够用时增量个数,默认 2 DWORD 类型:Timeout,增量解释器(超出 StartServers 数目的)存活时间,默认 600(秒) DWORD 类型:ThreadPoolSize,线程池大小,仅 IIS 下有效,默认 10 DWORD 类型:Impersonate,仅 IIS 有效,如果为 1,使用 IIS 安全标志,为 0 则关闭此特性。不要关闭它除非你不担心安全问题。 默认 1 DWORD 类型:MaxPostData,Post 数据预读 Byte 限制,默认 0 DWORD 类型: BypassAuth, IIS 有效, 仅 如果为 1 并且 isapi_fcgi.dll 被配置为 IIS Filter, 同时 IIS 被配置为使用 BASIC Authentication, 这将强制所有认证请求使用 IIS 匿名用户。这一选项的目的是允许脚本实现自己的安全机制。默认 0 BINARY 类型:CustomVars,附加环境变量值,新行分隔,Null 结束 5、如果是 IIS6,添加一个 Web 服务扩展指向 c:phpisapi_fcgi.dll,并允许。应用程序池中的“最大工作进程数”请保持为 1。 (必需) (必需) 6、添加应用程序扩展映射关系: 1). 在 Internet 信息服务管理器中,选择网站或应用程序的根目录。 2). 打开目录属性页(右键选择“属性”) ,再选择“主目录”。 3). 点击“配置”按钮,选择“映射”Tab 页。 4). 点击“添加”, 在“可执行文件”设为: c:phpisapi_fcgi.dll, 扩展名设为.php, 一定要选择“确认文件是否存在”, 然后“确定”保存设置。 5). 再同样添加对.php3 或.phtml 扩展名的支持(可选) 。 6). 保存设定并重新启动 IIS。 7、测试一下,同时请求多个 Web 页面,然后察看任务管理器中的进程,页面完成后 php-cgi.exe 进程持续运行并不退出。 五、Apache 配置方法 1、首先确定你已正确安装了 PHP 4.3.x 及更新的版本。早期版本的 PHP 并未默认加入 FastCGI 支持,如果你想在早期版本中工作, 需要重新编译它。我们假设 PHP 安装在 c:php,支持 FastFCGI 的可执行文件名是 php-cgi.exe。 注意:建议在 Php.ini 中打开 cgi.force_redirect,关闭 fastcgi.impersonate,关闭 cgi.rfc2616_headers。 2、下载 /dist/mod_fastcgi-2.4.2-AP20.dll,放到 Apache 2.x 的 Modules 目录中。 3、确定 Apache 2.x 在 CGI 方式下可以正常运行 PHP。httpd.conf 中存在如下几行: ScriptAlias /php/ c:/php/ Action application/x-httpd-php /php/php-cgi.exe SetEnv PHPRC C:/php AddType application/x-httpd-php .php 4、在 httpd.conf 中添加: LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP20.dll # 说明:此处的 -processes 3 表示启动三个 php-cgi.exe 进程, # 关于 FastCgiServer 的详细参数请参考 FastCGI 文档。 FastCgiServer c:/php/php-cgi.exe -processes 3 5、重新启动 Apache,测试同上。 六、高级配置 设想这样一种场景,你的服务器上同时跑 Apache 2 和 IIS 6,两个 Web 服务器都跑 php 应用。那么,有如下三种可能: A、php 使用 iis isapi 和 apache module 安装,均为多线程方式运行。这个和 FastCGI 没有关系。 B、其中一个服务器使用 FastCGI 方式,另一个使用多线程方式。这个能运行正常。 C、两个均使用 FastCGI 方式,这个往往不正常。一般表现为: 两个服务器各自启动一些 php-cgi.exe 进程,然后服务器之一不解释 php 页面,或者隔一会儿就派生新的 php-cgi.exe 进程(可 怕呀) 。 为什么呢?我想大概是因为上面使用的两个东西(iis isapi 和 apache module)的作者大概并没有想过要和对方同时使用吧,呵呵。 想了想,Apache 2 和 IIS 6 如果可以共用一批 php-cgi.exe 解释器就好了,既不浪费内存,估计也不会有调度问题了。 经过研究和测试证明,这个想法是可行的。但是,由于 Shane Caraveo 并未在 ISAPI DLL 中提供使用外置 FastCGI 服务的功能,因 此在此场景中只能是由 IIS 负责启动和管理 php-cgi.exe,然后配置 Apache 去使用这些受 IIS 管理的 php-cgi.exe 进程。 配置方法: 1、按上述四中的方法配置 IIS FastCGI。 2、基本按上述五中的方法配置 Apache FastCGI,五.4 改为在 httpd.conf 中添加: LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP20.dll # 使用外部 FastCGI 服务器,请参考 FastCGI 文档。 FastCgiExternalServer c:/php/php-cgi.exe -socket php-fcgi 注意:-socket 参数后的值必须与 HKEY_L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论