<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post/3667/</link>
<title><![CDATA[php在apache中一共有三种工作方式：CGI模式、FastCGI模式、Apache 模块DLL ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 22 Oct 2010 03:12:42 +0000</pubDate> 
<guid>http://jackxiang.com/post/3667/</guid> 
<description>
<![CDATA[ 
	再来看PHP的两种执行方式：ISAPI和FastCGI。<br/>&nbsp;&nbsp;&nbsp;&nbsp;ISAPI执行方式是以DLL动态库的形式使用，可以在被用户请求后执行，在处理完一个用户请求后不会马上消失，所以需要进行线程安全检查，这样来提高程序的执行效率，所以如果是以ISAPI来执行PHP，建议选择Thread Safe版本；<br/>&nbsp;&nbsp;&nbsp;&nbsp;而FastCGI执行方式是以单一线程来执行操作，所以不需要进行线程的安全检查，除去线程安全检查的防护反而可以提高执行效率，所以，如果是以FastCGI来执行PHP，建议选择Non Thread Safe版本。<br/><br/><br/>php.ini-development&nbsp;&nbsp;开发使用的配置文件<br/><br/>php.ini-production&nbsp;&nbsp; 标准的生产环境的配置<br/><br/><br/><br/>php在apache中一共有三种工作方式：CGI模式、FastCGI 、FastCGI是什么？ <br/><br/>　　FastCGI是语言无关的、可伸缩架构的CGI开放扩展，其主要行 为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知，CGI解释器的反复加载是CGI性能低下的主要原因，如果CGI解释器保持在内存中 并接受FastCGI进程管理器调度，则可以提供良好的性能、伸缩性、Fail-Over特性等等。 <br/><br/>　　FastCGI的官方站点在http://www.fastcgi.com 1、Web Server 启动时载入FastCGI进程管理器（IIS ISAPI或Apache Module）; <br/><br/>　　2、FastCGI进程管理器自身初始化，启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。 <br/><br/>　　3、当客户端请求到达Web Server时，FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。 <br/><br/>　　4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时，请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器（运行在 WebServer中）的下一个连接。 在正常的CGI模式中，php-cgi.exe在此便退出了。 <br/><br/>　　在上述情况中，你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI，所有这些 都只在进程启动时发生一次。一个额外的好处是，持续数据库连接(Persistent database connection)可以工作。 <br/><br/>　　二、为什么要使用FastCGI，而不是多线程CGI解释器？ <br/><br/>　　这可能出于多方面的考虑，例如： <br/><br/>　　1、你无论如何也不能在windows平台上稳定的使用多线程CGI解释器，无论是IIS ISAPI方式还是APACHE Module方式，它们总是运行一段时间就崩溃了。奇怪么？但是确实存在这样的情况！ <br/><br/>　　当然，也有很多时候你能够稳定的使用多线程CGI解释器，但是，你有可能发现网页有时候会出现错误，无论如何也找不到原因，而换用FastCGI方式时 这种错误的概率会大大的降低。我也不清楚这是为什么，我想独立地址空间的CGI解释器可能终究比共享地址空间的形式来得稳定一点点。 <br/><br/>　　2、性 能！性能？可能么，难道FastCGI比多线程CGI解释器更快？但有时候确实是这样，只有测试一下你的网站，才能最后下结论。原因嘛，我觉得很难讲，但 有资料说在Zend WinEnabler的时代，Zend原来也是建议在Windows平台下使用FastCGI而不是IIS ISAPI或Apache Module，不过现在Zend已经不做这个产品了。 <br/><br/>　　php在apache中一共有三种工作方式：CGI模式、FastCGI模式、Apache 模块DLL) <br/><br/>　　以下分别比较： <br/><br/>　　一、CGI模式与模块模式比较： <br/><br/>　　php在apache中两种工作方式的区别(CGI模式、Apache 模块DLL) <br/><br/>　　这两种工作方式的安装： <br/><br/>　　PHP 在 Apache 2.0 中的 CGI 方式 <br/><br/>　　ScriptAlias /php/ &quot;c:/php/&quot; <br/><br/>　　AddType application/x-httpd-php .php <br/><br/>　　# 对 PHP 4 用这行 <br/><br/>　　Action application/x-httpd-php &quot;/php/php.exe&quot; <br/><br/>　　# 对 PHP 5 用这行 <br/><br/>　　Action application/x-httpd-php &quot;/php/php-cgi.exe&quot; <br/><br/>　　PHP 在 Apache 2.0 中的模块方式 <br/><br/>　　# 对 PHP 4 用这两行： <br/><br/>　　LoadModule php4_module &quot;c:/php/php4apache2.dll&quot; <br/><br/>　　# 别忘了从 sapi 目录中把 php4apache2.dll 拷贝出来！ <br/><br/>　　AddType application/x-httpd-php .php <br/><br/>　　# 对 PHP 5 用这两行： <br/><br/>　　LoadModule php5_module &quot;c:/php/php5apache2.dll&quot; <br/><br/>　　AddType application/x-httpd-php .php <br/><br/>　　# 配置 php.ini 的路径 <br/><br/>　　PHPIniDir &quot;C:/php&quot; <br/><br/>　　这两种工作方式的区别： <br/><br/>　　在CGI模式下，如果客户机请求一个php文件，Web服务器就调用php.exe去解释这个文件，然后再把解释的结果以网页的形式返回给客户机； <br/><br/>　　而在模块化(DLL)中，PHP是与Web服务器一起启动并运行的。 <br/><br/>　　所以从某种角度上来说，以apache模块方式安装的 PHP4有着比CGI模式更好的安全性以及更好的执行效率和速度。 <br/><br/>　　二、FastCGI运行模式分析： <br/><br/>　　FastCGI 模式运行 PHP 的优点： <br/><br/>　　以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache，只是 PHP 自己的进程当掉（但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程）。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好（我本来用 ApacheBench 进行了测试，但忘了保存结果，大家有兴趣可以自己测试）。 <br/><br/>　　最后，就是可以同时运行 PHP5 和 PHP4。参考下面的配置文件，分别建立了两个虚拟主机，其中一个使用 PHP5，另一个使用 PHP4。 <br/><br/>　　LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll <br/><br/>　　ScriptAlias /fcgi-php5/ &quot;d:/usr/local/php-5.0.4/&quot; <br/><br/>　　FastCgiServer &quot;d:/usr/local/php-5.0.4/php-cgi.exe&quot; -processes 3 <br/><br/>　　ScriptAlias /fcgi-php4/ &quot;d:/usr/local/php-4.3.11/&quot; <br/><br/>　　FastCgiServer &quot;d:/usr/local/php-4.3.11/php.exe&quot; <br/><br/>　　Listen 80 <br/><br/>　　NameVirtualHost *:80 <br/><br/>　　DocumentRoot d:/www <br/><br/>　　Options Indexes FollowSymlinks MultiViews <br/><br/>　　ServerName php5.localhost <br/><br/>　　AddType application/x-httpd-fastphp5 .php <br/><br/>　　Action application/x-httpd-fastphp5 &quot;/fcgi-php5/php-cgi.exe&quot; <br/><br/>　　IndexOptions FancyIndexing FoldersFirst <br/><br/>　　Options Indexes FollowSymLinks MultiViews <br/><br/>　　AllowOverride None <br/><br/>　　Order allow,deny <br/><br/>　　Allow from all <br/><br/>　　Listen 8080 <br/><br/>　　NameVirtualHost *:8080 <br/><br/>　　DocumentRoot d:/www <br/><br/>　　Options Indexes FollowSymlinks MultiViews <br/><br/>　　ServerName php4.localhost <br/><br/>　　AddType application/x-httpd-fastphp4 .php <br/><br/>　　Action application/x-httpd-fastphp4 &quot;/fcgi-php4/php.exe&quot; <br/><br/>　　Options Indexes FollowSymLinks MultiViews <br/><br/>　　AllowOverride None <br/><br/>　　Order allow,deny <br/><br/>　　Allow from all <br/><br/>　　使用上面的配置，访问 http://localhost/就使用 PHP5，而访问 http://localhost:8080/就使用 PHP4。所以只要合理配置，就可以让不同的虚拟主机使用不同版本的 PHP。FastCGI 模式的一些缺点： <br/><br/><br/>　　说完了好处，也来说说缺点。从我的实际使用来看，用 FastCGI 模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时，由于 FastCGI 会认为 PHP 进程超时，从而在页面返回 500 错误。这一点让人非常恼火，所以我在开发机器上还是换回了 ISAPI 模式。 <br/><br/>　　最后，在 Windows 中以 FastCGI 模式存在潜在的安全漏洞。因为我还没有找到如何在 Windows 环境下实现 SuEXEC 的方法，因此 PHP 的进程总是以最高权限运行，这从安全角度来看显然不是个好消息。 很抱歉，因为您在网易相册发布了违规信息，账号被屏蔽。被屏蔽期间他人无法访问您的相册。<br/><br/>　　去帮助中心，了解如何重新恢复服务。 <br/><br/><br/><br/>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/hwh4729/archive/2010/10/13/5938764.aspx<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post/3667/#blogcomment63972</link>
<title><![CDATA[[评论] php在apache中一共有三种工作方式：CGI模式、FastCGI模式、Apache 模块DLL ]]></title> 
<author>66+6 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 12 Nov 2015 07:39:15 +0000</pubDate> 
<guid>http://jackxiang.com/post/3667/#blogcomment63972</guid> 
<description>
<![CDATA[ 
	6+6+6
]]>
</description>
</item>
</channel>
</rss>