<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>裁纸刀下 &#187; PHP</title>
	<atom:link href="http://ofcss.com/tags/php/feed" rel="self" type="application/rss+xml" />
	<link>http://ofcss.com</link>
	<description>独立 自由 诚信 宽容 责任 平常心</description>
	<lastBuildDate>Fri, 20 Apr 2012 04:08:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP 5.3.0 发布</title>
		<link>http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html</link>
		<comments>http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html#comments</comments>
		<pubDate>Sat, 04 Jul 2009 19:33:30 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://wukangrui.net/2009/07/05/php-5-3-0-release-new-feature.html</guid>
		<description><![CDATA[如今PHP 5.3.0也像ASP.NET一样，引入了命名空间、延迟绑定、匿名函数、Lambda表达式等先进特性，可见编程语言与平台无关性在未来将更加凸显，而混合编程的正确性和先进性也将不断得到体现。封闭自己，拒绝变化的产品和思想，在开发领域只有死路一条。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.php.net/" rel="external" target="_blank">PHP 官方网站</a> 6月30日放出了<a href="http://www.php.net/archive/2009.php#id2009-06-30-1" rel="external" target="_blank">PHP 5.3.0 正式发布的消息</a>，该版本是PHP 5.x系列的一个重要里程碑。根据 PHP 官方网站7月3日更新的 <a href="http://cn2.php.net/manual/en/migration53.new-features.php" rel="external" target="_blank">PHP 5.3.0 新特性</a> 介绍，PHP 5.3.0 主要包括以下新增特性或功能：</p>
<p> <span id="more-845"></span>
</p>
<ul>
<li>支持<a href="http://php.net/namespaces" rel="external" target="_blank">命名空间</a> </li>
<li>支持<a href="http://cn2.php.net/manual/en/language.oop5.late-static-bindings.php" rel="external" target="_blank">延迟静态绑定</a>技术 </li>
<li>支持<a href="http://cn2.php.net/manual/en/control-structures.goto.php" rel="external" target="_blank">跳转标签</a>（受限制的goto） </li>
<li>支持<a href="http://cn2.php.net/manual/en/functions.anonymous.php" rel="external" target="_blank">闭包</a>（Lambda表达式和匿名函数） </li>
<li>新增两个魔法函数，<a href="http://cn2.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods" rel="external" target="_blank">__callStatic</a> 和 <a href="http://cn2.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.invoke" rel="external" target="_blank">__invoke</a> </li>
<li>新增 <a href="http://cn2.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc" rel="external" target="_blank">Nowdoc</a> 语法支持，与 <a href="http://cn2.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc" rel="external" target="_blank">Heredoc</a> 语法相同但是带有单引号 </li>
<li>可以在静态变量和类成员、类构造函数中使用 Heredoc 语法 </li>
<li>Heredoc 可以用双引号定义，以便与 Nowdoc 的单引号区别 </li>
<li><a href="http://cn2.php.net/manual/en/language.constants.syntax.php" rel="external" target="_blank">构造函数</a>可以在类之外用 <em>const</em> 关键词进行定义 </li>
<li>增加了<a href="http://cn2.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary" rel="external" target="_blank">条件操作符</a>的简短形式 ?: (例如 a = condition ? true : false） </li>
<li>200 到 399 的状态码在HTTP数据流容器被认为是成功 </li>
<li>允许动态访问静态成员 </li>
<li>允许对<a href="http://cn2.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary" rel="external" target="_blank">异常</a>进行嵌套 </li>
<li>增加并且默认启用垃圾回收机制 </li>
</ul>
<p>此外，针对Windows版本的改变有：</p>
<ul>
<li>不再支持Windows98,ME和NT4，最低支持Windows 2000 </li>
<li>Windows 二进制版本针对 i586 或更高版本编译，不再支持 i386和i486 </li>
<li>对 Windows 系统上的 64位 PHP 提供支持（实验性的） </li>
<li>支持Visual C++ 9（VC9）编译，可以使用 Visual Studio 2008。 </li>
<li><a href="http://cn2.php.net/manual/en/ref.pdo-oci.php" rel="external" target="_blank">PDO_OCI</a> 的 php_pdo_oci8.dll 库（用于Oracle 8的客户端类库）不再构建，替代它的是 php_pdo_oci.dll（去掉了“8”），用于 Oracle 10 或者 11。与其他版本的数据库连接继续支持。 </li>
<li>针对 <a href="http://cn2.php.net/manual/en/book.oci8.php" rel="external" target="_blank">OCI8</a> 的扩展，除了php_oci8.dll之外增加了一个php_oci8_11g.dll，但是不能同时启用。php_oci8.dll与Oracle 10.2客户端类库结合使用，而php_oci8_11g.dll 和 Oracle 11客户端类库结合使用。与其他版本数据库的连接继续支持。 </li>
</ul>
<p>Windows版本新增加了对下列函数的支持：</p>
<ul>
<li><a href="http://cn2.php.net/function.checkdnsrr.php">checkdnsrr()</a> </li>
<li>d<a href="http://cn2.php.net/function.dns-get-record.php">ns_get_record()</a> </li>
<li><a href="http://cn2.php.net/function.fnmatch.php">fnmatch()</a> </li>
<li><a href="http://cn2.php.net/function.getmxrr.php">getmxrr()</a> </li>
<li><a href="http://cn2.php.net/function.getopt.php">getopt()</a> </li>
<li><a href="http://cn2.php.net/function.imagecolorclosesthwb.php">imagecolorclosesthwb()</a> </li>
<li><a href="http://cn2.php.net/function.inet-ntop.php">inet_ntop()</a> </li>
<li><a href="http://cn2.php.net/function.inet-pton.php">inet_pton()</a> </li>
<li><a href="http://cn2.php.net/function.link.php">link()</a> </li>
<li><a href="http://cn2.php.net/function.linkinfo.php">linkinfo()</a> </li>
<li><a href="http://cn2.php.net/function.mcrypt-create-iv.php">mcrypt_create_iv()</a> </li>
<li><a href="http://cn2.php.net/function.readlink.php">readlink()</a> </li>
<li><a href="http://cn2.php.net/function.socket-create-pair.php">socket_create_pair()</a> &#8211; 这个函数以前就在Windows中支持，但是由于在PHP 4.3.0中的一个bug而被禁用 </li>
<li><a href="http://cn2.php.net/function.stream-socket-pair.php">stream_socket_pair()</a> </li>
<li><a href="http://cn2.php.net/function.symlink.php">symlink()</a> </li>
<li><a href="http://cn2.php.net/function.time-nanosleep.php">time_nanosleep()</a> </li>
<li><a href="http://cn2.php.net/function.time-sleep-until.php">time_sleep_until()</a> </li>
</ul>
<p>除了上述改变外，Windows版本还有一些其它提升性能或者增加兼容性的改进，而最为重要的则是一条针对Windows的说明：</p>
<p>在windows下采用ISAPI方式运行PHP已经被遗弃，采用改进的FastCGI SAPI模块来代替。我在<a href="http://wukangrui.net/2008/06/23/fastcgi-for-php-in-iis.html" rel="external" target="_blank">2008年6月23日的日志</a>中曾经笑称“PHP成为IIS‘一等公民’”，那是只是从微软IIS团队官方发布PHP的FastCGI模块，以及微软和Zend的合作而对PHP在Windows平台上的使用做了最乐观的展望，而后来微软在IIS7以后的版本内置FastCGI模块，甚至在云服务中也内置FastCGI支持，则更说明了PHP与Windows的联姻将继续增强。可惜的是直到Windows7发布之后，网上的绝大部分教程依然在教新手采用ISAPI方式运行PHP，甚至是采用PHP4的安装方式。甚至还有人专门跑到我的空间里叫嚣在Windows下运行PHP是如何如何。开源社区对Windows平台的妖魔化，至今影响深远。正是由于拒绝导致了他们对Windows、ASP.NET、C#的不了解，甚至直至今日还死抱着Windows比Linux慢、不如Linux安全之类的陈旧观念。</p>
<p>如今PHP 5.3.0也像ASP.NET一样，引入了命名空间、延迟绑定、匿名函数、Lambda表达式等先进特性，可见编程语言与平台无关性在未来将更加凸显，而混合编程的正确性和先进性也将不断得到体现。封闭自己，拒绝变化的产品和思想，在开发领域只有死路一条。</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li><li>2009-07-08 -- <a href="http://ofcss.com/2009/07/08/asp-net-mvc-best-practices-part-4.html" title="ASP.NET MVC 最佳实践（四）">ASP.NET MVC 最佳实践（四）</a></li><li>2009-07-07 -- <a href="http://ofcss.com/2009/07/07/asp-net-mvc-best-practices-part-3.html" title="ASP.NET MVC 最佳实践（三）">ASP.NET MVC 最佳实践（三）</a></li><li>2009-07-01 -- <a href="http://ofcss.com/2009/07/01/asp-net-mvc-best-practices-part-2.html" title="ASP.NET MVC 最佳实践（二）">ASP.NET MVC 最佳实践（二）</a></li><li>2009-06-28 -- <a href="http://ofcss.com/2009/06/28/asp-net-mvc-best-practices-part-1.html" title="ASP.NET MVC 最佳实践（一）">ASP.NET MVC 最佳实践（一）</a></li><li>2009-06-08 -- <a href="http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html" title="在 IIS 7.x 中用 FastCGI 运行 PHP">在 IIS 7.x 中用 FastCGI 运行 PHP</a></li><li>2008-06-23 -- <a href="http://ofcss.com/2008/06/23/fastcgi-for-php-in-iis.html" title="微软官方FastCGI，PHP成为IIS“一等公民”">微软官方FastCGI，PHP成为IIS“一等公民”</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html" title="动易SW中的一个严重但不影响使用的bug（二）">动易SW中的一个严重但不影响使用的bug（二）</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/thinking-about-html-page-creating.html" title="静态页面生成的思考">静态页面生成的思考</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 IIS 7.x 中用 FastCGI 运行 PHP</title>
		<link>http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html</link>
		<comments>http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 07:16:06 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://wukangrui.net/2009/06/08/%e5%9c%a8-iis-7x-%e4%b8%ad%e7%94%a8-fastcgi-%e8%bf%90%e8%a1%8c-php.html</guid>
		<description><![CDATA[实际上从微软提供 FastCGI 支持以来，在 IIS官方站点上就一直有关于如何配置 IIS 各个版本下的 FastCGI 支持以及使用 FastCGI 方式运行 PHP 的详细教程，所以早在 IIS 7.0 刚刚出现没多久，微软就已经提供了在 IIS 上运行 PHP 的一种更优化的方式—— FastCGI。但是直到 IIS 7.5 随着 Windows 7 出现，网上还有很多的“大虾”在教菜鸟们如何在 IIS 7.x 下用配置ISAPI支持的方式（甚至是PHP手册上不推荐的拷贝文件到系统目录的方式）来支持 PHP。本文介绍一下在 IIS7.x 中启用 FastCGI，以及配置 PHP 的方法。 我的配置环境是 Windows 7 x64 + IIS 7.5，但是本文的内容在Windows 7.x 版本中应该是完全通用的，因为 FastCGI 正是从 IIS 7.0 开始成为内置组件的。至于之前的版本，需要额外安装 FastCGI 支持，配置上也略有不同。 &#160; Part I. 启用 [...]]]></description>
			<content:encoded><![CDATA[<p>实际上从微软提供 <a title="FastCGI官方网站" href="http://www.fastcgi.com/" rel="nofollow" target="_blank">FastCGI</a> 支持以来，在 <a href="http://www.iis.net/" rel="nofollow" target="_blank">IIS官方站点</a>上就一直有关于如何配置 <a title="微软IIS官方网站" href="http://www.iis.net/" rel="nofollow" target="_blank">IIS</a> 各个版本下的 FastCGI 支持以及使用 FastCGI 方式运行 PHP 的详细教程，所以早在 IIS 7.0 刚刚出现没多久，微软就已经提供了在 IIS 上运行 PHP 的一种更优化的方式—— FastCGI。但是直到 IIS 7.5 随着 Windows 7 出现，网上还有很多的“大虾”在教菜鸟们如何在 IIS 7.x 下用配置ISAPI支持的方式（甚至是PHP手册上不推荐的拷贝文件到系统目录的方式）来支持 PHP。本文介绍一下在 IIS7.x 中启用 FastCGI，以及配置 PHP 的方法。</p>
<p> <span id="more-666"></span>
<p>我的配置环境是 Windows 7 x64 + IIS 7.5，但是本文的内容在Windows 7.x 版本中应该是完全通用的，因为 FastCGI 正是从 IIS 7.0 开始成为内置组件的。至于之前的版本，需要额外安装 FastCGI 支持，配置上也略有不同。</p>
<p>&#160;</p>
<h3>Part I. 启用 IIS 7.x 中的 FastCGI 支持    <br /></h3>
<p>依次打开 <strong>控制面板 | 程序和组件 | 开启或关闭Windows功能</strong>，英文版对应操作为 <strong>Control Panel | Programs and Features | Turn Windows Features On or Off</strong>. 然后按下图所示启用 FastCGI （勾选 CGI 将同时启用 CGI 和 FastCGI 支持）。其它项你应该根据自己的需要选择，我这里是为了突出显示才去掉了其他项目的勾选。</p>
<p align="center"><a href="http://file.wukangrui.com/attachments/2009/06/400a630a2ef1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="图一" border="0" alt="图一" src="http://file.wukangrui.com/attachments/2009/06/thumb.png" width="433" height="506" /></a> </p>
<p>如果是 IIS7.0，微软已经发布了一系列升级补丁来修正其中内置的 FastCGI 模块已知的部分问题，你可以根据自己的系统下载对应的补丁进行升级：</p>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;p=1&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dd0343911-1775-4aef-8c99-5f13862ac386%26DisplayLang%3den" target="_blank">Update for Windows Server 2008</a> </li>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;p=3&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d70278393-3291-4aa1-870b-0e9b0907bddf%26DisplayLang%3den" target="_blank">Update for Windows Server 2008 x64 Edition</a> </li>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;p=5&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d98e06637-0f00-45d5-83c5-ed1b41fd6a7b%26DisplayLang%3den" target="_blank">Update for Windows Server 2008 for Itanium-based Systems</a> </li>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;p=2&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d19600729-8470-4956-a276-200450d814bd%26DisplayLang%3den" target="_blank">Update for Windows Vista SP1</a> </li>
<li><a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;p=4&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=&amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dc7066c3b-dcf7-4441-87bc-f7dcb51067d0%26DisplayLang%3den" target="_blank">Update for Windows Vista SP1 for x64 based Systems</a>
<p>&#160;</p>
<h3>Part II. 安装和配置PHP      <br /></h3>
<p>微软官方文章里建议使用非安全线程版本的PHP(non-thread safe build of php)，但是由于该版本下的Zend Optimizer的启用会比较复杂，而大部分商业PHP程序都是离不开Zend Optimizer的，所以建议仍然采用安全线程版本的PHP。请从 <a title="PHP官方网站" href="http://www.php.net/" rel="nofollow" target="_blank">PHP官方网站</a> 下载最新版本的 PHP Zip格式压缩包，本文写作时使用的是 PHP 5.2.9-2 版，下载地址：<a title="PHP 5.2.9-2 zip package" href="http://www.php.net/get/php-5.2.9-2-Win32.zip/from/a/mirror" rel="nofollow" target="_blank">PHP 5.2.9-2 zip package</a> 。</p>
<p>下载以后，将其解压缩到任意目录（本文中使用 D:\server\php，后面所有涉及到此路径的地方均表示为 <strong>[PHP Install Dir]</strong>），然后将目录中的 php.ini-recommend 改名为 php.ini 。用任意的文本编辑器打开这个文件，查找并确认以下设置：</p>
<ul>
<li><strong>fastcgi.impersonate = 1</strong> </li>
<li><strong>cgi.fix_pathinfo=1</strong> </li>
<li><strong>cgi.force_redirect = 0</strong> </li>
<li><strong>open_basedir</strong> 指向包含 php 程序的网站路径。 【可选项】 </li>
<li><strong>extension_dir = &quot;./ext&quot; </strong>;注意：以往版本中这里往往要使用绝对路径，但是现在可以用这样的方式进行通用配置。 </li>
<li>删除你需要激活的php扩展加载项前面的分号，例如：        <br />extension=php_mssql.dll         <br />extension=php_mysql.dll         <br />注意：不是所有的项目都可以激活的，最好只激活你用到的，如果激活某一项之后运行不了，请重新注释掉该项并重启IIS。 </li>
</ul>
<p>设置完毕以后，可以启动一个命令提示行窗口（cmd.exe），运行 <strong>[PHP Install Dir]/php –info</strong> 检查一下 php 是否可以正确运行，如果正确，会输出一系列的环境变量提示等。</p>
<p>&#160;</p>
<h3>Part III. 配置 IIS 处理 PHP 请求      <br /></h3>
<p>打开 IIS 管理器，左边选择你的计算机，中间窗口点击“<strong>Handler Mapping</strong>”（中文版的朋友对照一下图标了，我不太确定在中文版操作系统中这个项目会翻译成什么），然后在右边点击“<strong>Add Module Mapping…</strong>”（<strong>添加模块映射</strong>）。</p>
</li>
<p align="center"><a href="http://file.wukangrui.com/attachments/2009/06/iisaddhandlermapping.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IIS-Add-Handler-Mapping" border="0" alt="IIS-Add-Handler-Mapping" src="http://file.wukangrui.com/attachments/2009/06/iisaddhandlermapping-thumb.png" width="916" height="689" /></a> </p>
<p>在弹出的 Add Module Mapping 对话框中，按照下图填写（Executable(optional)一项请填写你自己的安装路径，即 <strong>[PHP Install Dir]/php-cgi.exe</strong> ）：</p>
<p align="center"><a href="http://file.wukangrui.com/attachments/2009/06/addmodulemapping.gif"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Add Module Mapping" border="0" alt="Add Module Mapping" src="http://file.wukangrui.com/attachments/2009/06/addmodulemapping-thumb.gif" width="475" height="411" /></a>&#160;</p>
<p>填写好之后，点 OK，会弹出一个确认对话框，问你是不是真的要添加这个模块映射。点 <strong>Yes</strong> 继续。</p>
<p align="center"><a href="http://file.wukangrui.com/attachments/2009/06/file3.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="file3" border="0" alt="file3" src="http://file.wukangrui.com/attachments/2009/06/file3-thumb.jpg" width="415" height="167" /></a> </p>
<p>到此就完成了 PHP 在 IIS 7.x 下的安装，在你的网站目录下创建一个文本文件，文件名后缀为.php，比如test.php，该文件的内容只有一行：</p>
<blockquote><p><font style="background-color: #ffffff">&lt;?php phpinfo(); ?&gt;</font></p>
</blockquote>
<p>然后用浏览器浏览这个文件(通常是<a href="http://localhost/test.php">http://localhost/test.php</a>)，正常情况下，就会看到PHP的默认信息页面了。</p>
<p align="center"><a href="http://file.wukangrui.com/attachments/2009/06/phpinfo.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="phpinfo" border="0" alt="phpinfo" src="http://file.wukangrui.com/attachments/2009/06/phpinfo-thumb.png" width="613" height="816" /></a> </p>
<p>根据不同的配置，看到的信息可能有所不同，我这里的抓图已经安装了 Zend Optimizer v3.3.3，默认当然是没有的，你可以自己下载并安装，Zend Optimizer 的安装和以前所有版本的一样，就算没有教程，跟着安装向导一步一步选择也能成功安装。我这里就不赘述了。此外还有 MySQL、PhpMyAdmin 等的安装，也都是一样的。虽然相关，但都和 IIS 版本无关。就不讲了。</p>
<p>以前配置过PHP4，或者在 IIS 6.0 以前版本中以 ISAPI 方式配置过的朋友应该能发现，使用 FastCGI 方式在 IIS 7.x 中配置 PHP，已经大大简化，不用像 PHP 4那样向系统文件夹拷贝文件，不用像 IIS 6.0 以前版本那样修改环境变量，而且也不像 ISAPI 方式那样要设置 extension_dir 的绝对路径……</p>
<p>总而言之，PHP 在 Windows 下已经不像以前一样仅仅是不得以而为之的一个东西，它的安全性、稳定性、运行效率已经大大提高。除了 Linux + Apache + PHP + MySQL，我们现在也可以很方便地使用 Windows + IIS + PHP + MSSQL 了。</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2008-06-23 -- <a href="http://ofcss.com/2008/06/23/fastcgi-for-php-in-iis.html" title="微软官方FastCGI，PHP成为IIS“一等公民”">微软官方FastCGI，PHP成为IIS“一等公民”</a></li><li>2009-07-05 -- <a href="http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html" title="PHP 5.3.0 发布">PHP 5.3.0 发布</a></li><li>2009-06-20 -- <a href="http://ofcss.com/2009/06/20/icbc-u-key-in-windows-7-x64.html" title="工行U盾在Windows 7 x64版下的使用">工行U盾在Windows 7 x64版下的使用</a></li><li>2009-06-05 -- <a href="http://ofcss.com/2009/06/05/uncharted-waters-4-in-windows7-x64.html" title="Windows 7 兼容性展示：大航海时代4">Windows 7 兼容性展示：大航海时代4</a></li><li>2009-05-24 -- <a href="http://ofcss.com/2009/05/24/sql-express-2008-x64-integration-with-visual-studio-2008-sp1.html" title="Visual Studio 2008 搭配64位SQL Server的问题解决方案">Visual Studio 2008 搭配64位SQL Server的问题解决方案</a></li><li>2009-05-23 -- <a href="http://ofcss.com/2009/05/23/google-chrome-in-windows7-x64.html" title="windows 7 x64 上的Google Chrome">windows 7 x64 上的Google Chrome</a></li><li>2009-05-16 -- <a href="http://ofcss.com/2009/05/16/window7-beta-dvd-from-microsoft.html" title="微软发放的Windows 7测试版光盘">微软发放的Windows 7测试版光盘</a></li><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li><li>2007-11-19 -- <a href="http://ofcss.com/2007/11/19/install-eacceleartor-in-dreamhost.html" title="如何在DreamHost主机上安装eAcceleartor支持[翻译]">如何在DreamHost主机上安装eAcceleartor支持[翻译]</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>微软官方FastCGI，PHP成为IIS“一等公民”</title>
		<link>http://ofcss.com/2008/06/23/fastcgi-for-php-in-iis.html</link>
		<comments>http://ofcss.com/2008/06/23/fastcgi-for-php-in-iis.html#comments</comments>
		<pubDate>Mon, 23 Jun 2008 19:46:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=283</guid>
		<description><![CDATA[The IIS Team is eager to announce the official release of Microsoft FastCGI Extension for IIS 6.0 as a free download. For the first time, we are providing hosters and PHP developers full support for a stack of technology that enables reliable, scalable PHP hosting on production Internet Information Services 6.0 (IIS 6) Web servers. [...]]]></description>
			<content:encoded><![CDATA[<p><!---5d9980f9--></p>
<blockquote><p>The IIS Team is eager to announce the official release of Microsoft FastCGI Extension for IIS 6.0 as a <a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521">free download</a>. For the first time, we are providing hosters and PHP developers full support for a stack of technology that enables reliable, scalable PHP hosting on production Internet Information Services 6.0 (IIS 6) Web servers. (Note: The FastCGI module is built in to Windows Server 2008.)</p></blockquote>
<p>　　以往在Windows 上配置服务器的PHP环境，虽然有无数的经验，无数的文章，但是仍然不能解决所有需求。因此“LAMP”集成安装包才会如此盛行。然而除了PHP，我们有时候也并不愿意放弃ASP和ASP.NET，毕竟Linux不论有多少好处，还有那么多游戏不能在上面运行，那么多软件不能在上面运行。为了工作效率和娱乐，更多的人愿意在虚拟机或者单独的分区里装个Linux来做学习之用。<span id="more-283"></span></p>
<p>　　很多人在Windows上配置了Apache，PHP，MySQL，然后到处打听如何让ASP或者ASP.NET得以运行。或者让Apache和IIS可以并行。</p>
<p>　　这一切都源于PHP（不光PHP，还有Perl，JSP等等各种CGI）在IIS上的地位低下，运行效率低，功能不全，不稳定……</p>
<p>　　其实反过来ASP和ASP.NET在Apache上的情况是更糟的，至少我们可以让主流的所有PHP应用都在WIMP（Windows + IIS + MySQL + PHP）上跑得很好，但是几乎不能让任何主流的ASP或者ASP.NET在Apache上正常运行。</p>
<p>　　但是微软很早就开始与PHP开发人员的合作努力必然是会开花结果的。2007年的时候微软IIS小组开始发布FastCGI，如今正式版已经可以支持IIS6.0、IIS7.0，甚至内置在Windows Server 2008上。主机商和试用者的反应都不错。IIS有微软官方团队在努力，PHP有Zend在推动，强强联合带来的信心更是异常强大。</p>
<p>　　FastCGI允许以FastCGI模式在IIS上运行PHP，而不是采用以往的ISAPI方式，这样更接近于Linux下的运行状况。即使在Linux下，也会选择用FastCGI模式来为PHP提速。</p>
<p>　　从<a href="http://www.iis.net/php">www.iis.net/php</a>下载最新的FastCGI扩展安装包，安装到Windows上，然后下载一个PHP的ZIP包解压到任意目录，照着IIS.NET上的配置说明对php.ini做简单修改，再对FastCGIExt.ini做一下配置。为IIS站点加上php扩展名关联。一切都和以前的配置方式差不多。但是不需要再修改环境变量啊，重启服务器啊，拷贝某个文件到Windows目录之类的了，回收一下应用池，一切OK了。</p>
<p>　　在没装Zend Optimizer的情况下打开PHP站点测试一下，不用做基准测试，不用探针来测试，凭感觉都能很明显的感觉到速度的提升。然后装上Zend Optimizer，试试吧，的确稳定了很多，快速了很多。</p>
<p>　　微软的FastCGI并不只是针对PHP的扩展，实际上在FastCGI配置文件里，你可以通过</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
<li class="alt"><span><span>TYPE]   </span></span></li>
<li><span>php=PHP   </span></li>
<li class="alt"><span>cgi=PERL   </span></li>
<li><span>  </span></li>
<li class="alt"><span>[PHP]   </span></li>
<li><span>&#8230;&#8230;   </span></li>
<li class="alt"><span>  </span></li>
<li><span>[PERL]   </span></li>
<li class="alt"><span>&#8230;&#8230;..   </span></li>
</ol>
</div>
<p>　　这样的形式继续添加自己的扩展，全都以FastCGI方式运行。</p>
<p>　　FastCGI扩展的免费下载地址：<a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521">free download</a></p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2009-06-08 -- <a href="http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html" title="在 IIS 7.x 中用 FastCGI 运行 PHP">在 IIS 7.x 中用 FastCGI 运行 PHP</a></li><li>2009-07-05 -- <a href="http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html" title="PHP 5.3.0 发布">PHP 5.3.0 发布</a></li><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li><li>2007-11-19 -- <a href="http://ofcss.com/2007/11/19/install-eacceleartor-in-dreamhost.html" title="如何在DreamHost主机上安装eAcceleartor支持[翻译]">如何在DreamHost主机上安装eAcceleartor支持[翻译]</a></li><li>2005-06-12 -- <a href="http://ofcss.com/2005/06/12/about-website-safety.html" title="关于网站的安全性">关于网站的安全性</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2008/06/23/fastcgi-for-php-in-iis.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在ASP中实现UNIX时间戳</title>
		<link>http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html</link>
		<comments>http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html#comments</comments>
		<pubDate>Wed, 04 Jun 2008 06:55:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=272</guid>
		<description><![CDATA[　　在康盛创想发布UC以后，我曾经尝试为其编写ASP把版本的客户端类库，过程中发现了几个问题，首当其冲的当然是服务器端不支持非php平台的接口，这个问题直接导致了我选择另起炉灶开发自己的通用用户中心。 　　但是在研究UC的过程中却也有一些细小的收获。这篇文章说说PHP中的时间戳。在PHP中，时间函数time()获得的不是我们在ASP中的事件函数Now()所返回的“2008-06-04 21:19:41”这样的形式，而是“1123495443”这样的形式。这个记录的是所表示的时间与1970年1月1日午夜零点之间的事件差，单位为秒，不考虑闰年等因素。 　　如果要编写UC的ASP客户端，这个问题是必然要面对的，实际上即使不为UC编写客户端，这个特性引入ASP还是有不少好处的。下面是具体的实现办法： ASP/Visual Basic代码 &#8216;参数：strTime:要转换的时间；intTimeZone：该时间对应的时区 &#8216;返回值：strTime相对于1970年1月1日午夜0点经过的秒数 &#8216;示例：ToUnixTime(“2008-5-23 10:51:0&#8243;, +8)，返回值为1211511060 Function ToUnixTime(strTime, intTimeZone) If IsEmpty(strTime) or Not IsDate(strTime) Then strTime = Now If IsEmpty(intTimeZone) or Not isNumeric(intTimeZone) Then intTimeZone = 0 ToUnixTime = DateAdd(“h”,-intTimeZone,strTime) ToUnixTime = DateDiff(“s”,“1970-1-1 0:0:0&#8243;, ToUnixTime) End Function &#8216;把UNIX时间戳转换为标准时间 &#8216;参数：intTime:要转换的UNIX时间戳；intTimeZone：该时间戳对应的时区 &#8216;返回值：intTime所代表的标准时间 &#8216;示例：FromUnixTime(“1211511060&#8243;, +8)，返回值2008-5-23 10:51:0 Function FromUnixTime(intTime, intTimeZone) If IsEmpty(intTime) Or Not [...]]]></description>
			<content:encoded><![CDATA[<p>　　在康盛创想发布UC以后，我曾经尝试为其编写ASP把版本的客户端类库，过程中发现了几个问题，首当其冲的当然是服务器端不支持非php平台的接口，这个问题直接导致了我选择另起炉灶开发自己的通用用户中心。</p>
<p>　　但是在研究UC的过程中却也有一些细小的收获。这篇文章说说PHP中的时间戳。在PHP中，时间函数time()获得的不是我们在ASP中的事件函数Now()所返回的“2008-06-04 21:19:41”这样的形式，而是“1123495443”这样的形式。这个记录的是所表示的时间与1970年1月1日午夜零点之间的事件差，单位为秒，不考虑闰年等因素。<span id="more-272"></span></p>
<p>　　如果要编写UC的ASP客户端，这个问题是必然要面对的，实际上即使不为UC编写客户端，这个特性引入ASP还是有不少好处的。下面是具体的实现办法：</p>
<div class="codeText">
<div class="codeHead">ASP/Visual Basic代码</div>
<ol class="dp-vb">
<li class="alt"><span><span class="comment">&#8216;参数：strTime:要转换的时间；intTimeZone：该时间对应的时区     </span><span>  </span></span></li>
<li><span class="comment">&#8216;返回值：strTime相对于1970年1月1日午夜0点经过的秒数     </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;示例：ToUnixTime(“2008-5-23 10:51:0&#8243;, +8)，返回值为1211511060     </span><span>  </span></li>
<li><span class="keyword">Function</span><span> ToUnixTime(strTime, intTimeZone)       </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsEmpty(strTime) or </span><span class="keyword">Not</span><span> IsDate(strTime) </span><span class="keyword">Then</span><span> strTime = Now       </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsEmpty(intTimeZone) or </span><span class="keyword">Not</span><span> isNumeric(intTimeZone) </span><span class="keyword">Then</span><span> intTimeZone = 0       </span></li>
<li class="alt"><span>    ToUnixTime = DateAdd(</span><span class="string">“h”</span><span>,-intTimeZone,strTime)       </span></li>
<li><span>    ToUnixTime = DateDiff(</span><span class="string">“s”</span><span>,</span><span class="string">“1970-1-1 0:0:0&#8243;</span><span>, ToUnixTime)       </span></li>
<li class="alt"><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>      </span></li>
<li><span>      </span></li>
<li class="alt"><span class="comment">&#8216;把UNIX时间戳转换为标准时间     </span><span>  </span></li>
<li><span class="comment">&#8216;参数：intTime:要转换的UNIX时间戳；intTimeZone：该时间戳对应的时区     </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：intTime所代表的标准时间     </span><span>  </span></li>
<li><span class="comment">&#8216;示例：FromUnixTime(“1211511060&#8243;, +8)，返回值2008-5-23 10:51:0     </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> FromUnixTime(intTime, intTimeZone)       </span></li>
<li><span>    </span><span class="keyword">If</span><span> </span><span>IsEmpty(intTime) </span><span class="keyword">Or</span><span> </span><span class="keyword">Not</span><span> IsNumeric(intTime) </span><span class="keyword">Then</span><span>      </span></li>
<li class="alt"><span>        FromUnixTime = Now()       </span></li>
<li><span>        </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>      </span></li>
<li class="alt"><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>      </span></li>
<li><span>    </span><span class="keyword">If</span><span> </span><span>IsEmpty(intTime) </span><span class="keyword">Or</span><span> </span><span class="keyword">Not</span><span> IsNumeric(intTimeZone) </span><span class="keyword">Then</span><span> intTimeZone = 0       </span></li>
<li class="alt"><span>    FromUnixTime = DateAdd(</span><span class="string">“s”</span><span>, intTime, </span><span class="string">“1970-1-1 0:0:0&#8243;</span><span>)       </span></li>
<li><span>    FromUnixTime = DateAdd(</span><span class="string">“h”</span><span>, intTimeZone, FromUnixTime)       </span></li>
<li class="alt"><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
</ol>
</div>
<p> 　　这两个函数分别用于标准时间转Unix时间戳和Unix时间戳转标准时间。用法在函数前面的注释里写得很清楚了。</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li><li>2009-07-05 -- <a href="http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html" title="PHP 5.3.0 发布">PHP 5.3.0 发布</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html" title="动易SW中的一个严重但不影响使用的bug（二）">动易SW中的一个严重但不影响使用的bug（二）</a></li><li>2008-06-18 -- <a href="http://ofcss.com/2008/06/18/api-bug-in-powereasy-siteweaver-part1.html" title="动易SW中的一个严重但不影响使用的bug(一)">动易SW中的一个严重但不影响使用的bug(一)</a></li><li>2009-07-08 -- <a href="http://ofcss.com/2009/07/08/asp-net-mvc-best-practices-part-4.html" title="ASP.NET MVC 最佳实践（四）">ASP.NET MVC 最佳实践（四）</a></li><li>2009-07-07 -- <a href="http://ofcss.com/2009/07/07/asp-net-mvc-best-practices-part-3.html" title="ASP.NET MVC 最佳实践（三）">ASP.NET MVC 最佳实践（三）</a></li><li>2009-07-01 -- <a href="http://ofcss.com/2009/07/01/asp-net-mvc-best-practices-part-2.html" title="ASP.NET MVC 最佳实践（二）">ASP.NET MVC 最佳实践（二）</a></li><li>2009-06-28 -- <a href="http://ofcss.com/2009/06/28/asp-net-mvc-best-practices-part-1.html" title="ASP.NET MVC 最佳实践（一）">ASP.NET MVC 最佳实践（一）</a></li><li>2009-06-08 -- <a href="http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html" title="在 IIS 7.x 中用 FastCGI 运行 PHP">在 IIS 7.x 中用 FastCGI 运行 PHP</a></li><li>2008-09-19 -- <a href="http://ofcss.com/2008/09/19/bug-about-search-engine-of-oblog.html" title="Oblog检测搜索引擎的一个问题">Oblog检测搜索引擎的一个问题</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给UCenter的拥蹩们泼点冷水</title>
		<link>http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html</link>
		<comments>http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html#comments</comments>
		<pubDate>Fri, 23 May 2008 03:32:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[指手划脚]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[动易]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=270</guid>
		<description><![CDATA[康盛创想“七剑合璧”围绕着UCenter同时发布，不仅为站长同时提供了建立各种类型网站的全套解决方案，而且还充分实现了多系统之间的用户数据完美整合，并且解决了跨域条件下单点登录等问题。让很多开发人员都眼前为之一亮。 在康盛创想的论坛上能看到有不少JSP程序、ASP.NET程序员都在咨询或者说抱怨官方的开发文档和示例太难看懂，完全是基于PHP的，如果不把PHP搞懂，很难实现在其它开发平台下的接口开发。而官方的回答只是“以后考虑”。 动易SF 1.1的发布公告中也指出基于UCenter的接口已经列入开发计划中。令广大动易站长欢欣鼓舞。 但是，我却不得不在这里给众多开发人员和站长们泼一盆冷水&#38;mdash;&#38;mdash;基于目前的UCenter，是没办法开发其它平台的接口的。原因很简单，UCenter服务器端默认了客户端的接口路径为“应用URL” + “api/uc.php”，而且这个是不能在配置文件或者后台修改的。 也就是说，不管你在什么平台下，是什么开发语言，你的接口必须为uc.php。那么，只有一个解决方法，就是在你的服务器上映射.php的后缀到你的程序语言的解析器，让.php也变成asp文件或者.net页面的后缀。那你的站点就不可能再同时支持php和asp，或者php和jsp，或者php和asp.net。而如果你是虚拟主机用户，你需要做的事情更多。 我们可以通过简单的方法修改UCenter，使之支持各平台语言的接口（要修改的文件只有4个左右），但是如此一来，等于是第三方开发人员或者说二次开发人员需要对服务器端进行修改，那已经不像是一个“通用平台”的问题了。 其次，在跨平台的信息传递中，UCenter大量使用的是Get/Post方式发送URLEncode编码的数据，而不是在所有平台所有编码语言下都有良好支持的xml格式。这样开发人员不得不继续花费大量时间来处理编码问题。 还有，UCenter由于采用PHP开发，大量使用了PHP的特性的东西，比如UNIX时间戳，比如键值对的数组，而在其它语言平台中，对这些东西的支持是各有不同的。虽然能够处理，但是却非常麻烦。 UCenter目前给我们带来一个最大的启发，就是一个中心，多套应用的模式，以及采用P3P来实现跨域Cookie处理的思路。 我相信，随着UCenter的出现解决了一系列跨站整合中的问题后，完善的跨站用户中心应该会很快出现。而UCenter如果不在下一版本中做大规模的改变，它是不太可能成为最终的通用整合中心的。至少这么久以来，我们可以看到康盛自己的.NET论坛都还没能支持这个UCenter，就能说明一些问题。 相关日志2008-06-22 -- 动易SW中的一个严重但不影响使用的bug（二）2008-06-18 -- 动易SW中的一个严重但不影响使用的bug(一)2008-06-04 -- 在ASP中实现UNIX时间戳2009-07-05 -- PHP 5.3.0 发布2008-06-22 -- 静态页面生成的思考2007-01-30 -- 整合开发的新思路2006-04-12 -- 用JavaScript动态输出的JS脚本不能执行2009-07-08 -- ASP.NET MVC 最佳实践（四）2009-07-07 -- ASP.NET MVC 最佳实践（三）2009-07-01 -- ASP.NET MVC 最佳实践（二）]]></description>
			<content:encoded><![CDATA[<p>康盛创想“七剑合璧”围绕着UCenter同时发布，不仅为站长同时提供了建立各种类型网站的全套解决方案，而且还充分实现了多系统之间的用户数据完美整合，并且解决了跨域条件下单点登录等问题。让很多开发人员都眼前为之一亮。</p>
<p>在康盛创想的论坛上能看到有不少JSP程序、ASP.NET程序员都在咨询或者说抱怨官方的开发文档和示例太难看懂，完全是基于PHP的，如果不把PHP搞懂，很难实现在其它开发平台下的接口开发。而官方的回答只是“以后考虑”。</p>
<p><span id="more-270"></span></p>
<p>动易SF 1.1的发布公告中也指出基于UCenter的接口已经列入开发计划中。令广大动易站长欢欣鼓舞。</p>
<p>但是，我却不得不在这里给众多开发人员和站长们泼一盆冷水&amp;mdash;&amp;mdash;基于目前的UCenter，是没办法开发其它平台的接口的。原因很简单，UCenter服务器端默认了客户端的接口路径为“应用URL” + “api/uc.php”，而且这个是不能在配置文件或者后台修改的。</p>
<p>也就是说，不管你在什么平台下，是什么开发语言，你的接口必须为uc.php。那么，只有一个解决方法，就是在你的服务器上映射.php的后缀到你的程序语言的解析器，让.php也变成asp文件或者.net页面的后缀。那你的站点就不可能再同时支持php和asp，或者php和jsp，或者php和asp.net。而如果你是虚拟主机用户，你需要做的事情更多。</p>
<p>我们可以通过简单的方法修改UCenter，使之支持各平台语言的接口（要修改的文件只有4个左右），但是如此一来，等于是第三方开发人员或者说二次开发人员需要对服务器端进行修改，那已经不像是一个“通用平台”的问题了。</p>
<p>其次，在跨平台的信息传递中，UCenter大量使用的是Get/Post方式发送URLEncode编码的数据，而不是在所有平台所有编码语言下都有良好支持的xml格式。这样开发人员不得不继续花费大量时间来处理编码问题。</p>
<p>还有，UCenter由于采用PHP开发，大量使用了PHP的特性的东西，比如UNIX时间戳，比如键值对的数组，而在其它语言平台中，对这些东西的支持是各有不同的。虽然能够处理，但是却非常麻烦。</p>
<p>UCenter目前给我们带来一个最大的启发，就是一个中心，多套应用的模式，以及采用P3P来实现跨域Cookie处理的思路。</p>
<p>我相信，随着UCenter的出现解决了一系列跨站整合中的问题后，完善的跨站用户中心应该会很快出现。而UCenter如果不在下一版本中做大规模的改变，它是不太可能成为最终的通用整合中心的。至少这么久以来，我们可以看到康盛自己的.NET论坛都还没能支持这个UCenter，就能说明一些问题。</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html" title="动易SW中的一个严重但不影响使用的bug（二）">动易SW中的一个严重但不影响使用的bug（二）</a></li><li>2008-06-18 -- <a href="http://ofcss.com/2008/06/18/api-bug-in-powereasy-siteweaver-part1.html" title="动易SW中的一个严重但不影响使用的bug(一)">动易SW中的一个严重但不影响使用的bug(一)</a></li><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2009-07-05 -- <a href="http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html" title="PHP 5.3.0 发布">PHP 5.3.0 发布</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/thinking-about-html-page-creating.html" title="静态页面生成的思考">静态页面生成的思考</a></li><li>2007-01-30 -- <a href="http://ofcss.com/2007/01/30/new-thinking-about-application-intergration.html" title="整合开发的新思路">整合开发的新思路</a></li><li>2006-04-12 -- <a href="http://ofcss.com/2006/04/12/innerhtml-can-not-be-excuted.html" title="用JavaScript动态输出的JS脚本不能执行">用JavaScript动态输出的JS脚本不能执行</a></li><li>2009-07-08 -- <a href="http://ofcss.com/2009/07/08/asp-net-mvc-best-practices-part-4.html" title="ASP.NET MVC 最佳实践（四）">ASP.NET MVC 最佳实践（四）</a></li><li>2009-07-07 -- <a href="http://ofcss.com/2009/07/07/asp-net-mvc-best-practices-part-3.html" title="ASP.NET MVC 最佳实践（三）">ASP.NET MVC 最佳实践（三）</a></li><li>2009-07-01 -- <a href="http://ofcss.com/2009/07/01/asp-net-mvc-best-practices-part-2.html" title="ASP.NET MVC 最佳实践（二）">ASP.NET MVC 最佳实践（二）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>如何在DreamHost主机上安装eAcceleartor支持[翻译]</title>
		<link>http://ofcss.com/2007/11/19/install-eacceleartor-in-dreamhost.html</link>
		<comments>http://ofcss.com/2007/11/19/install-eacceleartor-in-dreamhost.html#comments</comments>
		<pubDate>Mon, 19 Nov 2007 12:52:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=250</guid>
		<description><![CDATA[作者：robinz 原文：How to Install eAcceleartor on Dreamhost&#38;rsquo;s HOST! 译者：小李刀刀 从我得知eAccelerator可以提高PHP脚本的运行速度以后，我就一直在尝试将eAccelerator安装到dreamhost的主机上。终于，在经过了反复的尝试以后，我成功地装上了。现在我就来介绍一下如何在在dreamhost上安装eAcceleartor。 &#160; 1. 首先你需要编译自己的PHP，因为要加载eAccelerator的话你需要编辑php.ini文件。但是我们无法编辑dreamhost的php.ini文件，所以我们需要编译我们自己的PHP。限于篇幅，有关如何编译PHP的信息，请参阅： Installing PHP4[待译]或者Installing_PHP5[待译]。另外，我建议以FastCGI模式运行PHP，这样也可以提高性能。 2. 编译eAccelelerator的必备条件：autoconf, automake, libtool, m4。在dreamhost主机上已经安装了libtool和m4，我们只需要安装autoconf和automake即可。 2.1. 安装autoconf. （执行下列SSH命令） wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.bz2 tar -xjf autoconf-2.59.tar.bz2 cd autoconf-2.59 ./configure &#38;ndash;prefix=YOUR PATH make make install 2.2. 安装automake. （执行下列SSH命令） wget http://ftp.gnu.org/gnu/automake/automake-1.9.6.tar.bz2 tar -xjf automake-1.9.6.tar.bz2 cd automake-1.9.6 ./configure &#38;ndash;prefix=YOUR PATH make make install 至此，所有先决条件都已具备，请注意：eAccelerator 声称的运行环境：apache 1.3或者apache [...]]]></description>
			<content:encoded><![CDATA[<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">作者：<a title="robinz&#39;s blog" target="_blank" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://blog.robinz.info/"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">robinz</font></a> <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
原文：<a removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://blog.robinz.info/archives/2006/02/15/how-to-install-eacceleartor-on-dreamhosts-host/"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">How to Install eAcceleartor on Dreamhost&amp;rsquo;s HOST!</font></a></p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">译者：小李刀刀</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">从我得知eAccelerator可以提高PHP脚本的运行速度以后，我就一直在尝试将eAccelerator安装到dreamhost的主机上。终于，在经过了反复的尝试以后，我成功地装上了。现在我就来介绍一下如何在在dreamhost上安装eAcceleartor。</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">&nbsp;</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">1. 首先你需要编译自己的PHP，因为要加载eAccelerator的话你需要编辑php.ini文件。但是我们无法编辑dreamhost的php.ini文件，所以我们需要编译我们自己的PHP。限于篇幅，有关如何编译PHP的信息，请参阅： <a title="Installing PHP4" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://wiki.dreamhost.com/Installing_PHP4"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">Installing PHP4</font></a>[待译]或者<a title="http://wiki.dreamhost.com/Installing_PHP5" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://wiki.dreamhost.com/Installing_PHP5"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">Installing_PHP5</font></a>[待译]。另外，我建议以FastCGI模式运行PHP，这样也可以提高性能。</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">2. 编译eAccelelerator的必备条件：autoconf, automake, libtool, m4。在dreamhost主机上已经安装了libtool和m4，我们只需要安装autoconf和automake即可。</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">2.1. 安装autoconf. （执行下列SSH命令）</p>
<blockquote removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.bz2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
tar -xjf autoconf-2.59.tar.bz2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
cd autoconf-2.59 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
./configure &amp;ndash;prefix=YOUR PATH <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
make <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
make install</p>
</blockquote>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">2.2. 安装automake. （执行下列SSH命令）</p>
<blockquote removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">
<p removechild="function MyRC(arg1){varself = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">wget http://ftp.gnu.org/gnu/automake/automake-1.9.6.tar.bz2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
tar -xjf automake-1.9.6.tar.bz2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
cd automake-1.9.6 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
./configure &amp;ndash;prefix=YOUR PATH <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
make <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
make install</p>
</blockquote>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">至此，所有先决条件都已具备，请注意：eAccelerator 声称的运行环境：apache 1.3或者apache 2.0 (prefork), mod_php4/5。eAccelerator 号称需要以 mod_php4/5 来运行PHP， 然而，我们的PHP是运行在FastCGI模式下！嘿嘿，我已经成功安装了eAccelerator，PHP4.4.2以FastCGI模式运行，并且经过测试，工作良好，运行得很棒。</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">3. 接下来让我们尝试安装eAccelerator（执行以下SSH命令）：</p>
<blockquote removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">wget http://voxel.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.4-rc2.tar.bz2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
tar -xjf eaccelerator-0.9.4-rc2.tar.bz2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
cd eaccelerator-0.9.4-rc2 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
export PATH=$PATH:[你的PHP路径]/bin // 告诉配置你的autoconf和automake的路径 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
export PHP_PREFIX= [你的PHP路径]/bin // 通常是 ~/php/bin,，取决于你在编译PHP时候的设置。 <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
$PHP_PREFIX/bin/phpize <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
./configure &amp;ndash;prefix=[你的PHP路径] &amp;ndash;enable-eaccelerator=shared &amp;ndash;with-php-config=$PHP_PREFIX/bin/php-config <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
make <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
cp modules/eaccelerator.so [你的PHP路径]/lib/php/extensions] // make install命令将会因为没有写权限出错，所以我们把它复制一下。</p>
</blockquote>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">4. 修改 php.ini 文件. <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
把 extension_dir 改为 /home/[你的用户ID]/[[你的PHP路径]/lib/php/extensions ，然后添加以下代码：</p>
<blockquote removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">extension=”eaccelerator.so” <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.shm_size=”16&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.cache_dir=”/home/YOUR ID/tmp/eaccelerator” <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.enable=”1&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.optimizer=”1&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.check_mtime=”1&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.debug=”0&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.filter=”&quot; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.shm_max=”0&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.shm_ttl=”0&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.shm_prune_period=”0&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.shm_only=”0&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.compress=”1&amp;Prime; <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
eaccelerator.compress_level=”9&amp;Prime;</p>
</blockquote>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">&nbsp;</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">5. 运行 mkdir -p ~/tmp/eaccelerator 创建一个临时文件夹。</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">6. 别忘了在.htaccess文件中添加代码：</p>
<blockquote removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">AddHandler phpFour .php <br removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" /><br />
Action phpFour /cgi-bin/php.cgi</p>
</blockquote>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">&nbsp;</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">7. 关闭所有运行中的FastCGI进程（SSH命令）。</p>
<blockquote removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">killall php.cgi</p>
</blockquote>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">8. 运行一下PHP探针，看看是否安装成功。</p>
<p removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">希望本文能为你提供一些帮助！</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1cb2f62c-7561-4905-94c8-67b2d55ddf28" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">Technorati 标签: <a rel="tag" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://technorati.com/tags/Dreamhost"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">Dreamhost</font></a>,<a rel="tag" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://technorati.com/tags/PHP"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restorethe Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">PHP</font></a>,<a rel="tag" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://technorati.com/tags/eAccelerator"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">eAccelerator</font></a>,<a rel="tag" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://technorati.com/tags/SSH"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">SSH</font></a>,<a rel="tag" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}" href="http://technorati.com/tags/%e6%9c%8d%e5%8a%a1%e5%99%a8"><font color="#3399ff" removechild="function MyRC(arg1){var self = this;if (self.removeAttribute)self.removeAttribute(&quot;removeChild&quot;);var result = self[&quot;removeChild&quot;](arg1);self[&quot;removeChild&quot;] = arguments.callee; /*Finally restore the Override Function*/if(arg1.clearAttributes)arg1.clearAttributes();if(arg1.onclick)arg1.onclick=null;if(arg1.onmousemove)arg1.onmousemove=null;if(arg1.onmouseover)arg1.onmouseover=null;if(arg1.ondblclick)arg1.ondblclick=null;if(arg1.onmouseenter)arg1.onmouseenter=null;if(arg1.onmouseleave)arg1.onmouseleave=null;return result;}">服务器</font></a></div>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2009-07-05 -- <a href="http://ofcss.com/2009/07/05/php-5-3-0-release-new-feature.html" title="PHP 5.3.0 发布">PHP 5.3.0 发布</a></li><li>2009-06-08 -- <a href="http://ofcss.com/2009/06/08/using-fastcgi-to-host-php-applications-on-iis-7x.html" title="在 IIS 7.x 中用 FastCGI 运行 PHP">在 IIS 7.x 中用 FastCGI 运行 PHP</a></li><li>2008-06-23 -- <a href="http://ofcss.com/2008/06/23/fastcgi-for-php-in-iis.html" title="微软官方FastCGI，PHP成为IIS“一等公民”">微软官方FastCGI，PHP成为IIS“一等公民”</a></li><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2007/11/19/install-eacceleartor-in-dreamhost.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

