<?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>随网之舞Apache &amp;  MySQL &amp;  PHP</title>
	<atom:link href="http://dancewithnet.com/category/design/apache-mysql-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://dancewithnet.com</link>
	<description>WEB Design{HTML:CSS:Javascript:DOM:AJAX:PHP:Usability}/Viewpoint/Photo/Food/Mood</description>
	<lastBuildDate>Mon, 18 Jul 2011 02:45:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>在服务端合并和压缩JavaScript和CSS文件</title>
		<link>http://dancewithnet.com/2010/06/08/minify-js-and-css-files-in-server/</link>
		<comments>http://dancewithnet.com/2010/06/08/minify-js-and-css-files-in-server/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 17:50:57 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[Combo Handler]]></category>
		<category><![CDATA[Minify]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[性能]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1507</guid>
		<description><![CDATA[Web性能优化最佳实践中最重要的一条是减少HTTP请求，它也是YSlow中比重最大的一条规则。减少HTTP请求的方案主要有合并JavaScript和CSS文件、CSS Sprites、图像映射（Image Map）和使用Data URI来编码图... ]]></description>
			<content:encoded><![CDATA[<p>Web性能优化最佳实践中最重要的一条是<a href="http://developer.yahoo.com/performance/rules.html#num_http">减少HTTP请求</a>，它也是<a href="http://developer.yahoo.com/yslow/">YSlow</a>中比重最大的一条规则。减少HTTP请求的方案主要有合并JavaScript和CSS文件、<a href="http://alistapart.com/articles/sprites">CSS Sprites</a>、<a href="http://www.w3.org/TR/html401/struct/objects.html#h-13.6">图像映射（Image Map）</a>和<a href="http://dancewithnet.com/2009/08/15/data-uri-mhtml/">使用Data URI来编码图片</a>。CSS Sprites和图像映射现在已经随处可见了，但由于IE6和IE7不支持Data URI以及性能问题，这项技术尚未大量使用。目前大部分网页中的JavaScript和CSS文件数量和开发时一致，少量的网页会根据实际情况采取本地合并，这些合并中相当多的是有选择地手动完成，每次新的合并都需要重新在本地完成并上传到服务器，比较的随意和繁琐，同样文件的压缩也有类似的情况。而利用服务端的合并和压缩，我们就可以按照开发的逻辑尽可能让文件的颗粒度变小，利用网页中URL的规则来自动实现文件的合并和压缩，这会相当的灵活和高效。</p>
<p><span id="more-1507"></span></p>
<h3>YUI Combo Handler</h3>
<p><a href="http://www.yuiblog.com/blog/2008/07/16/combohandler/">2008年7月YUI Team宣布在YAHOO! CDN上对YUI JavaScript组件提供Combo Handler服务</a>。Combo Handler是Yahoo!开发的一个Apache模块，它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件，从而大大减少文件请求数。比如在页面上使用<a href="http://developer.yahoo.com/yui/editor/">YUI2的Rich Text Editor组件</a>需要引入多个JavaScript文件，常用方式如下：</p>
<pre><code>&lt;script src="http://yui.yahooapis.com/2.8.0r4/build/yahoo-dom-event/
yahoo-dom-event.js"&gt;&lt;/script&gt;
&lt;script src="http://yui.yahooapis.com/2.8.0r4/build/container/
container_core-min.js"&gt;&lt;/script&gt;
&lt;script src="http://yui.yahooapis.com/2.8.0r4/build/menu/menu-min.js"&gt;&lt;/script&gt;
&lt;script src="http://yui.yahooapis.com/2.8.0r4/build/element/element-min.js"&gt;&lt;/script&gt;
&lt;script src="http://yui.yahooapis.com/2.8.0r4/build/button/button-min.js"&gt;&lt;/script&gt;
&lt;script src="http://yui.yahooapis.com/2.8.0r4/build/editor/editor-min.js"&gt;&lt;/script&gt;
</code></pre>
<p>而使用Combo Handler服务之后，则上述的代码可以写为：</p>
<pre><code>&lt;script src="http://yui.yahooapis.com/combo?
2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js&#038;
2.8.0r4/build/container/container_core-min.js&#038;
2.8.0r4/build/menu/menu-min.js&#038;
2.8.0r4/build/element/element-min.js&#038;
2.8.0r4/build/button/button-min.js&#038;
2.8.0r4/build/editor/editor-min.js"&gt;&lt;/script&gt;</code></pre>
<p>除了代码的可读性稍稍有一点点降低外，使用Combo Handler服务大大的降低了HTTP请求数，同时也减少了URL代码量，这对于Web性能优化来讲至关重要。所以，随后<a href="http://yuiblog.com/blog/2008/10/17/loading-yui/">YUI从2.6.0开始，其核心组件YUI Loader内置了Combo Handling功能</a>，即使用YUI Loader时，通过配置<code>combine</code>属性就可以把要加载的多个JavaScript或CSS文件按照使用Combo Handler服务的形式合并起来，这时只要静态文件的服务器支持Combo Handler就行了。在YUI中当<code>combine</code>配置为<code>true</code>时，CDN默认是使用Yahoo! CDN（http://yui.yahooapis.com），所以没有任何问题。这正是YUI最迷人的地方之一。</p>
<p>遗憾的是http://yui.yahooapis.com在中国的速度并不佳，本来中国雅虎提供了http://cn.yui.yahooapis.com/ ，但尚未提供Combo Handler服务，同时因种种原因，其更新在<a href="http://cn.yui.yahooapis.com/2.7.0/build/yahoo-event-dom/yahoo-event-dom.js">YUI 2.7.0</a>之后就停滞了。更糟糕的是Yahoo!开发的支持Combo Handler的Apache模块虽然据传有计划开源，但至少现在依旧是私有技术，要使用就需要自己实现类似功能，所以国内类似技术的应用并不太多。</p>
<h3>Minify</h3>
<p>在Google Code上有一个PHP的开源项目叫<a href="http://code.google.com/p/minify/">Minify</a>，它可以合并、精简、Gzip压缩和缓存JavaScript和CSS文件。其文件合并功能就非常类似Combo Handler，只不过URL的语法稍微有点不同。如果Yahoo! CDN安装了Minify，那么上面Rich Text Editor的代码用Minify的默认格式来写就是：</p>
<pre><code>&lt;script src="http://yui.yahooapis.com/min/f=
2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js,
2.8.0r4/build/container/container_core-min.js,
2.8.0r4/build/menu/menu-min.js,
2.8.0r4/build/element/element-min.js,
2.8.0r4/build/button/button-min.js,
2.8.0r4/build/editor/editor-min.js"&gt;&lt;/script&gt;</code></pre>
<p>本地使用Minify很简单，只需要Apache + PHP环境就OK了：</p>
<ol>
<li>安装好Apache + PHP (<a href="http://dancewithnet.com/2005/09/16/install-apache-and-php-in-windows/">Windows</a>、<a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/">Mac</a>)。</li>
<li>下载<a href="http://code.google.com/p/minify/downloads/list">Minify源码</a>，解压，然后把min文件夹复制到指定的根目录下，比如localhost。这时URL的写法大概是<code>http://localhost/min/f=...</code></li>
<li><a href="http://dancewithnet.com/2010/05/29/making-mod-rewrite-and-htaccess-work-on-mac-os-x/">启用Apache的Mod Rewrite模块</a>，然后在min文件夹下<a href="http://www.zendstudio.net/archives/create-htaccess-file-in-windows/">新建.htaccess文件</a>，并添加如下<a href="http://code.google.com/p/minify/source/browse/branches/2.1.4/min/.htaccess">Rewrite规则</a>：
<pre><code>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine on

# You may need RewriteBase on some servers
<span># 如果做了所有的开启Mod Rewrite的设置依旧无效，请城市尝试启用下面这句</span>
#RewriteBase /min

# rewrite URLs like "/min/f=..." to "/min/?f=..."
RewriteRule ^([bfg]=.*)  index.php?$1 [L,NE]
&lt;/IfModule&gt;</code></pre>
<p>如果不启用Mod Rewrite功能，则Minify的URL会类似http://localhost/min/index.php?f=&#8230;，这<a href="http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/">对客户端和中间服务器的缓存不利</a>，而启用了Mod Rewrite之后的URL类似http://localhost/min/f=&#8230;，不仅解决前面问题且更短。</p>
</li>
<li>配置Minify，即编辑min/config.php文件
<pre><code>$min_enableBuilder = true;
<span>//本地使用时可以通过http://dwn/min/builder/来进行配置，外部使用时请设置为false</span>

//$min_cachePath = 'c:\\WINDOWS\\Temp';
//$min_cachePath = '/tmp';
//$min_cachePath = preg_replace('/^\\d+;/', '', session_save_path());
<span>//选择其一，去掉注释设置临时缓存目录，这样可以减少程序运算提高性能</span>

$min_serveOptions['maxAge'] = 1800;
<span>//设置浏览器缓存的时间，为了提升性能建议这个时间设置尽可能的长，比如315360000
//如果需要在不改变URL的情况下更新静态文件，可以采用类似时间戳的方式，
//如http://localhost/min/f=example/example.css&#038;20100601.css
//建议静态文件采用版本号管理，每次修改都需要升级版本号，这样就无需时间戳了，
//如http://localhost/min/f=example/example_1_0_1.css
</span>
$min_serveOptions['minApp']['maxFiles'] = 10;
<span>//参数f获取参数的个数，即合并的文件个数，这个数量完全可以增大，比如50，
//当然可能会遇到URL最大值问题，后会有解释</span>

$min_documentRoot = '';
//$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) - 15);
//$min_documentRoot = $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'];
<span>//当$min_documentRoot为空时，其值就是$_SERVER['DOCUMENT_ROOT']，
//但合并的文件不在$_SERVER['DOCUMENT_ROOT']下，会导致<a href="http://code.google.com/p/minify/wiki/CommonProblems#Builder_Fails_/_400_Errors">400错误</a>，
//这个时候可以启用第2行或第3行</span>
<span></span>
</code></pre>
</li>
<li>使用Minify
<p>比如，有两个JavaScript文件，<code>http://localhost/example/a.js,http://localhost/example/b.js</code>，那么使用Minify合并的URL是<code>http://localhost/min/f=/example/a.js,/example/b.js</code>，直接把这个URL放到页面中就可以使用了。</p>
</li>
</ol>
<p>实际上Minify不仅仅实现了合并功能，同时默认在合并的同时还会对文件进行精简压缩，如果你在本地本身就对文件进行压缩了，比如使用<a href="http://yuilibrary.com/projects/yuicompressor/">YUI Compressor</a>，那么可以在config.php中进行如下设置取消Minify的压缩以提升性能：</p>
<pre><code>$min_serveOptions['minifiers']['application/x-javascript'] = '';
$min_serveOptions['minifiers']['text/css'] = '';
</code></pre>
<p>如果服务端支持Java，那么也可以<a href="http://code.google.com/p/minify/wiki/CookBook#YUICompressor">对Minify进行简单配置而实现利用YUI Compressor压缩JavaScript和CSS文件</a>。</p>
<p>直接在服务端进行合并和压缩，这非常的灵活，也极大的减轻了前端开发成果的部署过程，真使事半功倍。更多配置请看<a href="http://code.google.com/p/minify/wiki/CookBook">Minify CookBook</a>和<a href="http://code.google.com/p/minify/w/list">Wiki</a></p>
<p>小提示：Minify使用的<a href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a>，这就意味着使用者可以几乎自由的使用该代码。BSD协议鼓励代码共享，但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码，也允许使用或在BSD代码上开发商业软件发布和销售，因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议，因为可以完全控制这些第三方的代码，在必要的时候可以修改或者二次开发。更多中文信息请看<a href="http://baike.baidu.com/view/1178915.html">《BSD协议》</a>。</p>
<h3>在YUI3中使用Minify</h3>
<p>在YUI2中，合并机制只支持库本身的文件，自定义的文件会单独一一加载。从YUI3开始，模块变得更小，这样就导致使用合并时URL会变长，但<a href="http://support.microsoft.com/kb/208427">在IE下URL的最大值是2083</a>，Apache默认的URL最大值是8192，所以当URL在对应浏览器下超出最大值时，YUI3会自动根据浏览器判断进行拆分成多个合并的URL，并且还提供了<a href="http://developer.yahoo.com/yui/3/api/Loader.html#property_maxURLLength"><code>maxURLLength</code></a>来设置最大值。而从YUI3.1.0开始，不仅仅支持自定义文件的合并，还支持可以使用多个提供合并服务的CDN，即可以对YUI组件使用http://yui.yahooapis.com这个CDN，其余文件使用其他支持合并的CDN，这样非常的实用、方便和灵活。示例<a href="http://dancewithnet.com/lab/2010/yui3-loader-and-minify/">在YUI3中使用Minify</a>就说明了这点。</p>
<p>由于YUI默认URL的合并形式和Minify的不相同，所以在YUI实例化时需要利用正则替换来实现YUI3支持Minify的URL合并形式，但这种方式既不灵活，且有风险，不友好又效率低。比较简单的方式是直接修改YUI 3的源码，如示例<a href="http://dancewithnet.com/lab/2010/yui3-loader-and-minify/fixed.html">在修改后的YUI3中使用Minify</a>。同时，YUI 3.1.*的版本有一个bug，即同时合并JavaScript和CSS时，较短的那个URL结尾处多一个&#038;符号，如<a href="http://dancewithnet.com/lab/2010/yui3-loader-and-minify/">示例在YUI3中使用Minify</a>中：</p>
<pre><code>http://yui.yahooapis.com/combo?3.1.1/build/widget/assets/skins/sam/widget.css&#038;
3.1.1/build/console/assets/skins/sam/console.css&#038;

http://dancewithnet.com/min/b=yui&#038;f=3.1.1/tabview/assets/skins/sam/tabview.css&#038;</code></pre>
<p>这两种都可以使用，虽然<a href="http://dancewithnet.com/2009/11/05/a-little-practice-about-js-lazy-load/#comment-219359">在早期的IE浏览器版本（如IE6）中会有无法解析的风险</a>，且影响某些特定情况下的缓存，但当使用修改后的YUI时，合并的URL变成类似<code>/min/b=yui&#038;f=3.1.1/tabview/assets/skins/sam/tabview.css,</code>的样子，就会出现bug了。对于YUI的Combo Handler来说这是一个小bug，所以<a href="http://yuilibrary.com/projects/yui3/ticket/2528680">YUI3把这个bug设置为P5</a>。但当我们改造YUI3来更好的支持Minify时，还要解决这个问题，具体方案请看示例<a href="http://dancewithnet.com/lab/2010/yui3-loader-and-minify/fixed.html">在修改后的YUI3中使用Minify</a>。</p>
<h3>在CDN上使用Minify</h3>
<p>CDN的全称是Content Delivery Network，即内容分发网络。其最常应用就是通过位于不同地理位置的服务器把静态资源部署到用户最近的边缘，这样能有效解决Web服务中大量静态资源的速度和性能问题。由于实施成本比较高，所以在实际的应用中，大型公司一般会组建自己的CDN，而小型公司只能租借第三方的CDN，但不管怎样这两种方式都不会影响在服务端实施合并和压缩程序。一般情况下，静态资源也并不是直接上传到CDN，而是先传到一台后台服务器，然后各地CDN的前端Cache服务器按需索取。YUI CDN的Combo Handler就是部署在其后台服务器上的，Minify也应如此。简单图示如下：<br /><img src="http://dancewithnet.com/wp-content/uploads/2010/06/cdn-and-minify.png" alt="" title="cdn-and-minify" width="678" height="201" class="alignnone size-full wp-image-1519" /></p>
<p>当一个资源请求到CDN时，CDN会先检查本地是否存在这个资源，如果有则会直接返回该资源，如果没有则会请求其后台服务器，后台服务器会依据资源URL的信息进行相应的处理，然后返回给CDN，CDN就会存储这个资源，再次出现这个资源请求时就无需请求后台服务器了。所以，虽然合并特别是压缩JavaScript和CSS文件是消耗时间的，但是由于只需要第一次，并且第一次基本上由我们自己访问掉（我们可以创建程序自动进行一次访问来保证，实际上图片优化也可以采用这种方式），所以基本上很安全。这正是目前在<a href="http://koubei.com">口碑网</a>实施的JavaScript和CSS合并方案，在<a href="http://www.slideshare.net/kavenyan/ss-2755539">第4届D2的《前端性能优化和自动化》</a>中也介绍了它。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2010/06/08/minify-js-and-css-files-in-server/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>启用Mod Rewrite和.htaccess</title>
		<link>http://dancewithnet.com/2010/05/29/making-mod-rewrite-and-htaccess-work-on-mac-os-x/</link>
		<comments>http://dancewithnet.com/2010/05/29/making-mod-rewrite-and-htaccess-work-on-mac-os-x/#comments</comments>
		<pubDate>Sat, 29 May 2010 12:09:43 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[rewrite]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1514</guid>
		<description><![CDATA[Apache的Mode Rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。在大多数情况下，它和.htaccess文件配合使用。比如本篇文章的URL（http://dancewithnet.com/2010/05/29/making-mod-rewrite... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html">Apache的Mode Rewrite模块</a>提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。在大多数情况下，它和<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/howto/htaccess.html">.htaccess文件</a>配合使用。比如本篇文章的URL（http://dancewithnet.com/2010/05/29/making-mod-rewrite-and-htaccess-work-on-mac-os-x）就是Wordpress配合Mod Rewrite模块和.htaccess文件一起实现的，即所谓的<a href="http://codex.wordpress.org/Using_Permalinks">固定链接（Permalinks）</a>。</p>
<p><span id="more-1514"></span></p>
<h3>Windows</h3>
<p>在Windows下，我们一般使用的是Administrator账号，所以启用这两项非常简单：</p>
<ol>
<li>在[Apache安装目录]/conf/httpd.conf中找到<code>#LoadModule rewrite_module modules/mod_rewrite.so</code>，去掉前面的注释符号#。如果没有这行，请添加。并确认apache安装目录下的modules文件夹中是否有<code>mod_rewrite.so</code>这个文件。这样就启用了<code>Mod Rewrite</code>功能。</li>
<li>在<code>[Apache安装目录]/conf/httpd.conf</code>中找到
<pre><code>&lt;Directory /&gt;
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
&lt;/Directory&gt;</code></pre>
<p>把“<code>AllowOverride None</code>”改成“<code>AllowOverride All</code>”，这样所有的文件夹都支持.htaccess了，或者针对指定的文件夹启用.htaccess，可以在<code>[Apache安装目录]/conf/httpd.conf</code>中加入</p>
<pre><code>&lt;Directory "D:/sites/example/"&gt;
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
&lt;/Directory&gt;</code></pre>
<p>这种做法一般是和虚拟主机配置在一起的，所以大多数会把上述配置代码写入<code>[Apache安装目录]/conf/extra/httpd-vhost.conf</code>中，这样比较清晰易于管理。
</li>
<li>重启Apache后，就ok了。</li>
</ol>
<p>完成上诉步骤后，在Wordpress的固定链接中使用除默认外的链接设置，Wordpress会直接在其安装目录中生成对应的.htaccess，这样就可以使用设置的链接形式了。</p>
<h3>Mac OS X</h3>
<p>在Mac OS X中一般不使用<code>root</code>账号，而是通过<code>sudo</code>来获得<code>root</code>相关权限。一般情况下，我们把网站文件放在个人目录下，比如<code>~/Sites</code>，这样就涉及到Mac OS的权限管理，相对于Windows来说复杂不少。</p>
<ol>
<li>在终端运行sudo vi /etc/apache2/httpd.conf，找到<code>#LoadModule rewrite_module modules/mod_rewrite.so</code>，去掉前面的注释符号#。</li>
<li>运行<code>sudo vi /etc/apache2/extra/httpd-vhost.conf</code>，加入
<pre><code>&lt;Directory "/Users/[用户名]/Sites"&gt;
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
&lt;/Directory&gt;</code></pre>
<p>这样整个<code>~/Sites</code>都可以支持<code>.htaccess</code>。
</li>
<li>运行<code> sudo vi /Private/etc/apache2/users/[用户名].conf</code>，把其中的<code>AllowOverride None</code>改成<code>AllowOverride All</code>。需要注意的是，以前的Mac OS X版本，路径可能是<code>/private/etc/httpd/users/[用户名].conf</code></li>
<li>在需要的目录新建.htaccess，并修改其权限为777，此处依旧以使用Wordpress的固定链接为例。
<pre><code>cd ~/Sites/Wordpress
touch .htaccess
chmod 777 .htaccess</code></pre>
<p>新建文件的权限默认是<code>644</code>，通过<code>ls -l .htaccess</code>就可以看到，此时程序无法自动写入.htaccess，这种情况比较安全，但是需要手动写入。
</li>
<li>退出后重启Apache：<code>sudo apachectl restart</code></li>
</ol>
<p>完成上述设置之后，就可以使用Wordpress的固定链接功能了。需要注意的是，如果.htaccess是从Windows下直接复制过来，日志中可能会出现<code>&lt;/IfModule&gt; without matching &lt;IfModule&gt; section</code>的报错。简单的解决方案就是新建文件，重新复制粘贴。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2010/05/29/making-mod-rewrite-and-htaccess-work-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>在Mac OS X中配置Apache ＋ PHP ＋ MySQL</title>
		<link>http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/</link>
		<comments>http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#comments</comments>
		<pubDate>Sat, 08 May 2010 18:37:27 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[mcrypt]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1511</guid>
		<description><![CDATA[Mac OS X 内置了Apache 和 PHP，这样使用起来非常方便。本文以Mac OS X 10.6.3为例。主要内容包括：

启动Apache
运行PHP
安装MySQL
使用phpMyAdmin
配置PHP的MCrypt扩展库
设置虚拟主机

启动Apache
有两种方法... ]]></description>
			<content:encoded><![CDATA[<p>Mac OS X 内置了Apache 和 PHP，这样使用起来非常方便。本文以Mac OS X 10.6.3为例。主要内容包括：</p>
<ol>
<li><a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#apache">启动Apache</a></li>
<li><a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#php">运行PHP</a></li>
<li><a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#mysql">安装MySQL</a></li>
<li><a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#phpmyadmin">使用phpMyAdmin</a></li>
<li><a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#mcrypt">配置PHP的MCrypt扩展库</a></li>
<li><a href="http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/#virtualhost">设置虚拟主机</a></li>
</ol>
<h3 id="apache">启动Apache</h3>
<p>有两种方法：</p>
<ol>
<li>打开“系统设置偏好（System Preferences）” -> “共享（Sharing）” -> &#8220;Web共享（Web Sharing）&#8221;</li>
<li>打开“终端（terminal）”，然后（注意：sudo需要的密码就是系统的root帐号密码）
<ol>
<li>运行“<code>sudo apachectl start</code>”，再输入帐号密码，这样Apache就运行了。</li>
<li>运行“<code>sudo apachectl －v</code>”，你会看到Mac OS X 10.6.3中的Apache版本号：
<pre><code>Server version: Apache/2.2.14 (Unix)
Server built:   Feb 11 2010 14:40:31
</code></pre>
</li>
</ol>
</li>
</ol>
<p>这样在浏览器中输入“http://localhost”，就可以看到出现一个内容为“It works!”的页面，它位于“/Library（资源库）/WebServer/Documents/”下，这是Apache的默认根目录。</p>
<p><span id="more-1511"></span></p>
<p>注意：开启了Apache就是开启了“Web共享”，这时联网的用户就会通过“http://[本地IP]/”来访问“/Library（资源库）/WebServer/Documents/”目录，通过“http://[本地IP]/~[用户名]”来访问“/Users/[用户名]/Sites/”目录，可以通过设置“系统偏好设置”的“安全（Security）”中的“防火墙（Firewall）”来禁止这种访问。</p>
<h3 id="php">运行PHP</h3>
<ol>
<li>在终端中运行“<code>sudo vi /etc/apache2/httpd.conf</code>”，打开Apache的配置文件。（如果不习惯操作终端和vi的可以设置<a href="http://apple.tgbus.com/tutorial/soft/200811/20081125100105.shtml">在Finder中显示所有的系统隐藏文件</a>，记得需要<a href="http://www.macdocks.com/2009/07/14/mac-tips-三种方法重启mac-os-x-finder/">重启Finder</a>，这样就可以找到对应文件，随心所欲编辑了，但需要注意的是某些文件的修改需要<a href="http://support.apple.com/kb/HT1528?viewlocale=zh_CN">开启root帐号</a>，但整体上还是在终端上使用sudo来临时获取root权限比较安全。）</li>
<li>找到“<code>#LoadModule php5_module        libexec/apache2/libphp5.so</code>”，把前面的#号去掉，保存（在命令行输入<code>:w</code>）并退出vi（在命令行输入<code>:q</code>）。</li>
<li>运行“<code>sudo cp /etc/php.ini.default /etc/php.ini</code>”，这样就可以通过php.ini来配置各种PHP功能了。比如：
<pre><code><span>;通过下面两项来调整PHP提交文件的最大值，比如phpMyAdmin中导入数据的最大值</span>
upload_max_filesize = 2M
post_max_size = 8M
<span>;比如通过display_errors来控制是否显示PHP程序的报错</span>
display_errors = Off
</code></pre>
</li>
<li>运行“<code>sudo apachectl restart</code>”，重启Apache，这样PHP就可以用了。</li>
<li>运行“<code>cp /Library/WebServer/Documents/index.html.en /Library/WebServer/Documents/info.php</code>”，即在Apache的根目录下复制index.html.en文件并重命名为info.php</li>
<li>在终端中运行“<code>vi /Library/WebServer/Document/info.php</code>”，这样就可以在vi中编辑info.php文件了。在“It’s works!”后面加上“<code>&lt;?php phpinfo(); ?&gt;</code>”，然后保存之。这样就可以在http://localhost/info.php中看到有关PHP的信息，比如版本号是5.3.1。</li>
</ol>
<h3 id="mysql">安装MySQL</h3>
<p>由于Mac OS X中并没有预装MySQL，所以需要自己手动安装，目前MySQL的最稳定版本是5.1。<a href="http://dev.mysql.com/doc/refman/5.1/en/mac-os-x-installation.html">MySQL提供了Mac OS X下的安装说明</a>。</p>
<ol>
<li><a href="http://dev.mysql.com/downloads/mysql/5.1.html">下载MySQL 5.1</a>。选择合适的版本，比如这里选择的是mysql-5.1.46-osx10.6-x86_64.dmg。</li>
<li>运行dmg，会发现里面有4个文件。首先点击安装mysql-5.1.46-osx10.6-x86_64.pkg，这是MySQL的主安装包。一般情况下，安装文件会自动把MySQL安装到/usr/local下的同名文件夹下。比如点击运行“mysql-5.1.46-osx10.6-x86_64.dmg”会把MySQ安装到“<code>/usr/local/mysql-5.1.46-osx10.6-x86_64</code>”中。一路默认安装完毕即可。</li>
<li>点击安装第2个文件MySQLStartupItem.pkg，这样MySQL就会自动在开机时自动启动了。</li>
<li>点击安装第3个文件MySQL.prefPane，这样就会在“系统设置偏好”中看到名为“MySQL”的ICON，通过它就可以设置MySQL开始还是停止，以及是否开机时自动运行。到这里MySQL就基本安装完毕了。</li>
<li>通过运行“<code>sudo vi /etc/bashrc</code>”，在bash的配置文件中加入<code>mysql</code>和<code>mysqladmin</code>的别名
<pre><code>#mysql
alias mysql='/usr/local/mysql/bin/mysql'
alias mysqladmin='/usr/local/mysql/bin/mysqladmin'
</code></pre>
<p>这样就可以在终端中比较简单地通过命令进行相应的操作，比如安装完毕之后MySQL的<code>root</code>默认密码为空，如果要设置密码可以在终端运行“<code>mysqladmin -u root password "mysqlpassword"</code>”来设置，其中mysqlpassword即root的密码。更多相关内容可以参考<a href="http://dev.mysql.com/doc/refman/5.1/en/resetting-permissions.html">B.5.4.1. How to Reset the Root Password</a>。
</li>
</ol>
<p>注意：Mac OS X的升级或者其他原因可能会导致ＭySQL启动或者开机自动运行，在ＭySQL的操作面板上会提示“<code>Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' </code>”，或者在命令行下提示“<code>Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)</code>”，这应该是某种情况下导致/usr/local/mysql/data的宿主发生了改变，只需要运行“s<code>udo chown -R mysql /usr/local/mysql/data</code>”即可。</p>
<p>另外，<a href="http://www.exp2up.com/2009/03/11/mac上的php无法连接mysql/">使用PHP连接MySQL可能会报错</a>“Can’t connect to local MySQL server through socket ‘/var/mysql/mysql.sock’”，或者使用localhost无法连接MySQL而需要127.0.0.1，原因是连接时候php默认去找/var/mysql/mysql.sock了，但是MAC版本的MYSQL改动了文件的位置，放在/tmp下了。处理办法是按如下修改php.ini：</p>
<pre><code>mysql.default_socket = /tmp/mysql.sock</code></pre>
<h3 id="phpmyadmin">使用phpMyAdmin</h3>
<p><a href="http://www.phpmyadmin.net/">phpMyAdmin</a>是用PHP开发的管理MySQL的程序，非常的流行和实用。能够实用phpMyAdmin管理MySQL是检验前面几步成果的非常有效方式。</p>
<ol>
<li><a href="http://www.phpmyadmin.net/home_page/downloads.php">下载phpMyAdmin</a>。选择合适的版本，比如我选择的是phpMyAdmin-3.3.2-all-languages.tar.bz2这个版本。</li>
<li>把“下载（downloads）”中的phpMyAdmin-3.32-all-languages文件夹复制到“<code>/Users/[用户名]/Site</code>s”中，名改名为phpmyadmin。</li>
<li>复制“<code>/Users/[用户名]/Sites/phpmyadmin/</code>”中的config.sample.inc.php，并命名为config.inc.php</li>
<li>打开config.inc.php,做如下修改：
<pre><code><span>用于Cookie加密，随意的长字符串</span>
$cfg['blowfish_secret'] = ''; 

<span>当phpMyAdmin中出现“#2002 无法登录 MySQL 服务器”时，
<a href="http://achan.me/2010/04/mysql-error-2002.html">请把localhost改成127.0.0.1就ok了</a>，
这是因为MySQL守护程序做了IP绑定（bind-address =127.0.0.1）造成的</span>
$cfg['Servers'][$i]['host'] = 'localhost';

<span>把false改成true，这样就可以访问无密码的MySQL了，
即使MySQL设置了密码也可以这样设置，然后在登录phpMyAdmin时输入密码</span>
$cfg['Servers'][$i]['AllowNoPassword'] = false;
</code></pre>
</li>
<li>这样就可以通过<code>http://localhost/~[用户名]/phpmyadmin</code>访问phpMyAdmin了。这个时候就看到一个提示“无法加载 mcrypt 扩展，请检查您的 PHP 配置。”，这就涉及到下一节安装MCrypt扩展了。</li>
</ol>
<h3 id="mcrypt">配置PHP的MCrypt扩展</h3>
<p><a href="http://mcrypt.sourceforge.net/">MCrypt</a>是一个功能强大的加密算法扩展库，它包括有22种算法，phpMyAdmin依赖这个PHP扩展库。但是它在Mac OS X下的安装却不那么友善，具体如下：</p>
<ol>
<li>下载并解压<a href="http://sourceforge.net/projects/mcrypt/files/Libmcrypt/">libmcrypt-2.5.8.tar.bz2</a>。</li>
<li>在终端执行如下命令（注意如下命令需要安装<a href="http://developer.apple.com/xcode/">xcode</a>支持）：
<pre><code>cd ~/Downloads/libmcrypt-2.5.8/
./configure --disable-posix-threads --enable-static
make
sudo make install</code></pre>
</li>
<li>下载并解压<a href="http://us2.php.net/get/php-5.3.1.tar.bz2/from/a/mirror">PHP源码文件php-5.3.1.tar.bz2</a>。Mac OS X 10.6.3中预装的PHP版本是5.3.1，而现在<a href="http://us2.php.net/downloads.php">最新的PHP版本是5.3.2</a>，你需要依据自己的实际情况选择对应的版本。</li>
<li>在终端执行如下命令：
<pre><code>cd ~/Downloads/php-5.3.1/ext/mcrypt
phpize
./configure
make
cd modules
sudo cp mcrypt.so /usr/lib/php/extensions/no-debug-non-zts-20090626/</code></pre>
</li>
<li>打开php.ini
<pre><code>sudo vi /etc/php.ini</code></pre>
<p>在php.ini中加入如下代码，并保存后退出，然后重启Apache</p>
<pre><code>extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/mcrypt.so</code></pre>
</li>
</ol>
<p>当你再访问<code>http://localhost/~[用户名]/phpmyadmin</code>时，你会发现“无法加载 mcrypt 扩展，请检查您的 PHP 配置。”的提示没有了，这就表示MCrypt扩展库安装成功了。</p>
<h3 id="virtualhost">设置虚拟主机</h3>
<ol>
<li>在终端运行“<code>sudo vi /etc/apache2/httpd.conf</code>”，打开Apche的配置文件</li>
<li>在httpd.conf中找到“<code>#Include /private/etc/apache2/extra/httpd-vhosts.conf</code>”，去掉前面的“＃”，保存并退出。</li>
<li>运行“sudo apachectl restart”，重启Apache后就开启了它的虚拟主机配置功能。</li>
<li>运行“sudo vi /etc/apache2/extra/httpd-vhosts.conf”，这样就打开了配置虚拟主机的文件httpd-vhost.conf，配置你需要的虚拟主机了。需要注意的是该文件默认开启了两个作为例子的虚拟主机：
<pre><code>&lt;VirtualHost *:80&gt;
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common
&lt;/VirtualHost&gt;
&lt;VirtualHost *:80&gt;
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"
    CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common
&lt;/VirtualHost&gt; </code></pre>
<p>而实际上，这两个虚拟主机是不存在的，在没有配置任何其他虚拟主机时，可能会导致访问localhost时出现如下提示：</p>
<pre><code>Forbidden
You don't have permission to access /index.php on this server</code></pre>
<p>最简单的办法就是在它们每行前面加上#，注释掉就好了，这样既能参考又不导致其他问题。
</li>
<li>增加如下配置
<pre><code>&lt;VirtualHost *:80&gt;
    DocumentRoot "/Users/[用户名]/Sites"
    ServerName sites
    ErrorLog "/private/var/log/apache2/sites-error_log"
    CustomLog "/private/var/log/apache2/sites-access_log" common
&lt;/VirtualHost&gt; </code></pre>
<p>保存退出，并重启Apache。</li>
<li>运行“<code>sudo vi /etc/hosts</code>”，打开hosts配置文件，加入&#8221;<code>127.0.0.1 sites</code>&#8220;，这样就可以配置完成sites虚拟主机了，这样就可以用“http://sites”访问了，其内容和“http://localhost/~[用户名]”完全一致。</li>
</ol>
<p>这是利用Mac OS X 10.6.3中原生支持的方式来实现的配置，也可以参考“<a href="http://blog.csdn.net/afatgoat/archive/2008/12/26/3615026.aspx">Mac OS X Leopard: 配置Apache, PHP, SQLite, MySQL, and phpMyAdmin(一) </a>”和“<a href="http://blog.csdn.net/afatgoat/archive/2008/12/28/3628710.aspx">Mac OS X Leopard: 配置Apache, PHP, SQLite, MySQL, and phpMyAdmin(二) </a>”。实际上，你还可以使用<a href="http://www.apachefriends.org/en/xampp-macosx.html">XAMPP</a>或<a href="http://www.macports.org/">MacPorts</a>这种第三方提供的集成方案来实现简单的安装和使用。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2010/05/09/run-apache-php-mysql-in-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>80</slash:comments>
		</item>
		<item>
		<title>从MySQL4.0向MySQL5迁移数据</title>
		<link>http://dancewithnet.com/2007/10/07/data-transfer-from-mysql40-to-mysql51/</link>
		<comments>http://dancewithnet.com/2007/10/07/data-transfer-from-mysql40-to-mysql51/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 16:36:34 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[utf-8]]></category>
		<category><![CDATA[乱码]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2007/10/07/data-transfer-from-mysql40-to-mysql51/</guid>
		<description><![CDATA[用phpMyAdmin时在导入和导出MySQL5数据时，有一个SQL compatibility mode选项，其可选值为NONE、ANSIDB2、MAXDB、MYSQL323、MYSQL40、MSSQL、ORACLE、TRADITIONAL。这是MySQL解决导入导出数据时不同数据库类型或者版... ]]></description>
			<content:encoded><![CDATA[<p>用phpMyAdmin时在导入和导出MySQL5数据时，有一个SQL compatibility mode选项，其可选值为NONE、ANSIDB2、MAXDB、MYSQL323、MYSQL40、MSSQL、ORACLE、TRADITIONAL。这是<a href="http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html">MySQL解决导入导出数据时不同数据库类型或者版本SQL语句不同的问题</a>。MYSQL40选项明显是为了解决和MYSQL4.0数据迁移问题，但是用phpMyAdmin管理MySQL4.0(版本是4.0.25)时，则没有SQL compatibility mode这个选项，应该是不支持吧。</p>
<p>MySQL的默认编码是latin1，而从MySQL4.0中导出数据的SQL语句并没有编码声明(<a href="/2007/01/25/wordpress-data-import-mysql5-from-mysql4-by-phpmyadmin/">《利用phpMyAdmin把wordpress数据从MySQL4迁移到MySQL5》)</a>，所以如果从MySQL4.0中导出数据的编码不是latin1，比如是utf8，那么直接导入到MySQL5中编码会是默认的latin1而出现中文乱码。所以操作步骤如下：<span id="more-1137"></span></p>
<ol>
<li>用phpMyAdmin从MySQL4.0中导出所需的数据表，并勾选上“zip压缩”或“gzip压缩”，这样导出的数据量小。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/10/data-transfer-from-mysql4-1.png' alt='用phpMyAdmin从MySQL4.0中导出所需的数据表' width="640" height="597"  /></li>
<li>用phpMyAdmin在MySQL5中创建一个新的数据库，注意需要声明编码为实际编码，比如utf8。如果不声明编码，那么导致导入的数据编码全部是latin1，而出现中文乱码，无法简单修正。<img src='http://dancewithnet.com/wp-content/uploads/2007/10/data-transfer-from-mysql4-2.png' alt='用phpMyAdmin在MySQL5中创建一个新的数据库'  width="399" height="299" /></li>
<li>在import页面把从MySQL4.0中导出的数据导入，注意选择字符集和SQL compatibility mode模式为MYSQL40，这样整个数据就导入成功了。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/10/data-transfer-from-mysql4-3.png' alt='在import页面把从MySQL4.0中导出的数据导入' width="608" height="476" /></li>
</ol>
<p>由于MySQL默认编码的原因，直接导入整个数据库则无法设置其编码，从而导致中文乱码，所以第1步要求导出的是数据库中的表而不是整个数据库，要想导入整个数据那么需要修改MySQL的默认编码，修改安装目录的下的my.ini文件(Unix下是my.cnf)中对Client和Server的编码声明，然后重启服务即可：<code>default-character-set=utf8</code></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/10/07/data-transfer-from-mysql40-to-mysql51/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>升级到Wordpress2.3小结</title>
		<link>http://dancewithnet.com/2007/10/04/upgraded-to-wordpress23/</link>
		<comments>http://dancewithnet.com/2007/10/04/upgraded-to-wordpress23/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 22:46:59 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[UTW]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2007/10/04/upgraded-to-wordpress23/</guid>
		<description><![CDATA[前几天Wordpress2.3 Dexter发布了（简体中文版），2.3的版本除了增加内置tags标签、插件更新通知、url地址处理等等一系列新的特性，还做了大量的优化、提高效率。Wordpress的主程序升级向来比较容... ]]></description>
			<content:encoded><![CDATA[<p>前几天<a href="http://wordpress.org/development/2007/09/wordpress-23/">Wordpress2.3 Dexter发布了</a>（<a href="http://code.google.com/p/wpcn/downloads/list">简体中文版</a>），2.3的版本除了增加内置tags标签、插件更新通知、url地址处理等等一系列新的特性，还做了大量的优化、提高效率。Wordpress的主程序升级向来比较容易，其难点在于解决插件和自定义主题的不兼容问题，这次由于增加了内置tag功能，已明确不兼容目前广泛使用的<a href="http://www.neato.co.nz/ultimate-tag-warrior">Ultimate Tag Warrior</a>，另外就是放置网志的主机太慢了、环境（PHP4.4+MySQL4.0.25）太老了且偶尔不稳定，所以趁机转移到<a href="http://www.mybrand.com.cn">danbao的MyBrand</a>(PHP5.1.4+MySQL5.0.24)上来。<span id="more-1136"></span></p>
<h3>把数据从MySQL4.0.25转移到MySQL5.0.24</h3>
<ol>
<li>Wordpress自带的导出WXR本来是一个很好的选择，但是似乎对插件数据的导出和数据量大且网速很慢时导出总是有问题，所以只好用phpMyAdmin来导了。</li>
<li>phpMyAdmin在MySQL4和5中导出的格式不同（见《<a href="/2007/01/25/wordpress-data-import-mysql5-from-mysql4-by-phpmyadmin/">利用phpMyAdmin把wordpress数据从MySQL4迁移到MySQL5》</a>），所以需要修改后才能导入MySQL5中。数据量大时，为了能修改只能导出非压缩的.sql文件。</li>
<li>导出的.sql文件汉字可能存在乱码，可以用Editplus和UtralEdit等转化编码（见《<a href="/2006/11/10/gb2312-convert-utf-8-when-using-ssi/">使用SSI功能时，GB2312转换成UTF-8的注意事项》</a>）。</li>
</ol>
<h3>升级到Wordpress2.3</h3>
<ol>
<li>把转化好的数据导入MySQL5中。需要注意的是，很多时候垃圾评论spams是乱码的，如果我们平时处理这些评论是设置其状态为“垃圾评论”，那这些评论不会被删除而保存在评论的数据表中，乱码可能会导致数据导入的失败，需要删除这些乱码重新导入。建议针对垃圾评论可以把其IP和特征字符放入评论黑名单中，然后删除，这样既降低隐患又减少数据量。</li>
<li>Wordpress某些处理时把域名在服务器上的绝对路径写入数据库，所以在迁移过程中如果改变了文件在服务器上的绝对路径或者改变了域名需要修改数据中相应的路径（比如上传文件的路径）。可以直接写SQL语句来修改，也可以用编辑器来替换，比如UtralEdit或者VIM。</li>
<li>数据导入成功并设置好wp-config.php后，打开wp-admin/upgrade.php进行按照指示进行升级。建议<ins datatime="20071005T042000+08:00" title="有些插件会导致无法升级，比如UTW">升级开始前</ins>禁止所有的插件且采用默认主题，然后一个一个的开启检查兼容问题。</li>
</ol>
<h3>解决插件的兼容问题</h3>
<ol>
<li>Wordpress有一个<a href="http://codex.wordpress.org/Plugins">插件列表</a>，这里面的插件都没有问题，只需要对照升级即可。</li>
<li>对于Ultimate Tag Warrior(UTW)，Wordpress2.3在“管理”下的“导入”中提供了把UTW数据转化成内置tag的数据，然后利用<a href="http://codex.wordpress.org/Template_Tags/the_tags">the-tags</a>和<a href="http://codex.wordpress.org/Template_Tags/wp_tag_cloud">wp_tag_cloud</a>替换相应的UTW函数即可，比如：
<pre><code>//UTW_ShowTagsForCurrentPost("commalist");
the_tags("标签：");
//php UTW_ShowWeightedTagSetAlphabetical("coloredsizedtagcloud","",0);
wp_tag_cloud('smallest=1.2&amp;largest=3.6&amp;unit=em&amp;number=O'); </code></pre>
<p>相对于UTW而言，内置的tags功能简单但是稳定高效，同时UTW的作者又提供了Tags的<a href="http://www.neato.co.nz/wordpress-things/tag-managing-thing/">管理功能</a>、<a href="http://www.neato.co.nz/wordpress-things/tag-suggest-thing/">建议功能</a>和<a href="http://www.neato.co.nz/wordpress-things/embedded-tag-thing/">嵌入功能</a>来辅助管理。这样就可以对UTW说再见了。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/10/04/upgraded-to-wordpress23/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>利用phpMyAdmin把wordpress数据从MySQL4迁移到MySQL5</title>
		<link>http://dancewithnet.com/2007/01/25/wordpress-data-import-mysql5-from-mysql4-by-phpmyadmin/</link>
		<comments>http://dancewithnet.com/2007/01/25/wordpress-data-import-mysql5-from-mysql4-by-phpmyadmin/#comments</comments>
		<pubDate>Wed, 24 Jan 2007 22:29:03 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=935</guid>
		<description><![CDATA[通过对比用phpMyAdmin从MySQL和MySQL5导出wordpress数据的不同点，从而解决迁移中的出错问题，这个解决方法不是仅用在迁移Wordpress数据上，实际上是通用的。

利用phpMyAdmin（MySQL＆phpMyAdmin安装于Win... ]]></description>
			<content:encoded><![CDATA[<p>通过对比用phpMyAdmin从MySQL和MySQL5导出wordpress数据的不同点，从而解决迁移中的出错问题，这个解决方法不是仅用在迁移Wordpress数据上，实际上是通用的。<span id="more-935"></span></p>
<ol>
<li>利用phpMyAdmin（MySQL＆phpMyAdmin安装于Win下）在MySQL4中选择数据库“导出”需要的wordpress数据，如图选择“另存为文件”这样就得到一个后缀为.sql的导出文件保存在本地机子上。<br />
<img src="http://dancewithnet.com/wp-content/uploads/2007/03/mysql4-to-mysql5-1.png" alt="导出需要的wordpress数据" /></li>
<li>用phpMyAdmin打开MySQL5，如图默认新建一个数据库。<br />
<img src="http://dancewithnet.com/wp-content/uploads/2007/03/mysql4-to-mysql5-2.png" alt="用phpMyAdmin打开MySQL5，如图默认新建一个数据库" /></li>
<li>在“import”导入需要的数据，如图，成功后配置好数据库链接文件，即可以浏览了。<br />
注意，文件字符集一定要选择latin1，这是在创建MySQL数据库时默认的。<br />
<img src="http://dancewithnet.com/wp-content/uploads/2007/03/mysql4-to-mysql5-3.png" alt="导入需要的数据" /><br />
<ins datatime="20071004T201700+08:00">上图中导入文件最大为2048k，这是收到php.ini文件控制的，通过修改upload_max_filesize，memory_limit和post_max_size可以改变这个值。</ins></li>
</ol>
<p>但是这样使用起来没有问题，但是如果用phpMyAdmin去看数据库表，会发现中文全部是乱码，就是上面说的文件是字符集是latin1的问题。</p>
<p>其实，在导出数据的时候，如果不选择“另存为文件”时，会导出一段SQL语句，如果把这个语句直接放到phpMyAdmin中执行，会出现如图错误：<br />
<img src="http://dancewithnet.com/wp-content/uploads/2007/03/mysql4-to-mysql5-4.png" alt="错误" /></p>
<p>这个错误就是因为有中文字符，而字符集是latin1造成的。所以这种情况下，需要修改字符集。</p>
<p>经过对比发现，同样的表在MySQL4中导出结果如下：</p>
<pre><code>CREATE TABLE `dwn_post2cat` (
 `rel_id` bigint(20) NOT NULL auto_increment,
`post_id` bigint(20) NOT NULL default '0',
`category_id` bigint(20) NOT NULL default '0',
PRIMARY KEY  (`rel_id`),
KEY `post_id` (`post_id`,`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;</code></pre>
<p>在MySQL5中到处结果如下：</p>
<pre><code>CREATE TABLE `dwn_post2cat` (
`rel_id` bigint(20) NOT NULL auto_increment,
`post_id` bigint(20) NOT NULL default '0',
`category_id` bigint(20) NOT NULL default '0',
PRIMARY KEY  (`rel_id`),
KEY `post_id` (`post_id`,`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;</code></pre>
<p>不同点就在最后一句，所以只需要把所有到处数据中<br />
<code>ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;</code><br />
改成<br />
<code>ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;</code><br />
然后再到phpMyAdmin中执行SQL，SQL执行成功。</p>
<p>但是此时却出现乱码，这是Wordpress从MySQL 4.0x 版本以下升级到了4.1x以上遇到的问题。</p>
<p>彻底解决编码问题就是统一用UTF8编码，首先， 将Wordpress 的wp-includes的wp-db.php，在这句后面<br />
<code>$this-&gt;dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);</code><br />
加一句：<br />
<code>$this-&gt;query("SET NAMES 'utf8'");</code><br />
这样就可以保证apche和MYSQL之间传递的是UTF8编码</p>
<p>这样就完工了。</p>
<blockquote><p>MyISAM类型不支持事务处理等高级处理，而InnoDB类型支持。MyISAM类型的表强调的是性能，其执行数度比InnoDB类型更快，但是不提供事务支持，而InnoDB提供事务支持已经外部键等高级数据库功能。这样就可以根据数据表不同的用处是用不同的存储类型。</p>
<p>另外，MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。</p></blockquote>
<ul>
<li>[1]<a href="http://tao.kaoart.info/cms-software-doc/wordpress-%e6%95%99%e7%a8%8b/kunstao/2006/554/">http://tao.kaoart.info/cms-software-doc/wordpress-%e6%95%99%e7%a8%8b/kunstao/2006/554/</a></li>
<li>[2]<a href="http://bulaoge.com/topic.blg?dmn=webdev&amp;tid=12360#Content">http://bulaoge.com/topic.blg?dmn=webdev&amp;tid=12360#Content</a></li>
<li>[3]<a href="http://www.zuola.com/weblog/?p=355">http://www.zuola.com/weblog/?p=355</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/01/25/wordpress-data-import-mysql5-from-mysql4-by-phpmyadmin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>使用SSI功能时，GB2312转换成UTF-8的注意事项</title>
		<link>http://dancewithnet.com/2006/11/10/gb2312-convert-utf-8-when-using-ssi/</link>
		<comments>http://dancewithnet.com/2006/11/10/gb2312-convert-utf-8-when-using-ssi/#comments</comments>
		<pubDate>Thu, 09 Nov 2006 21:28:04 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[ssi]]></category>
		<category><![CDATA[utf-8]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=914</guid>
		<description><![CDATA[最近进行一个项目，为了便于静态页面的维护，利用Apache的SSI功能把多个页面相同的内容提取到一个页面上，然后Include需要页面上。文件的开始采用的编码是GB2312，但是由于应用了AJAX而其默认... ]]></description>
			<content:encoded><![CDATA[<p>最近进行一个项目，为了便于静态页面的维护，利用Apache的SSI功能把多个页面相同的内容提取到一个页面上，然后Include需要页面上。文件的开始采用的编码是GB2312，但是由于应用了AJAX而其默认编码是UTF-8等原因，需要把页面编码GB2312转换成UTF-8。<span id="more-914"></span></p>
<p>GB2312字符集是在ASCII字符集上派生的，而此类字符集统称为ANSI字符集。所以GB2312编码文件在记事本中对应的编码是ANSI。由于Win中记事本中存在GB2312和UTF-8两种方式，所以我就直接用记事本直接打开需要的文件，另存为时编码修改为UTF-8。具体方式如下：</p>
<ol>
<li>用记事本打开要转换的网页文件。可以在网页文件中右键选择“打开方式”为记事本，也可以先打开记事本然后把文件拉入记事本。</li>
<li>选择“文件”-》“另存为”，在出现的窗口中设置编码为UTF-8：<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/gb2312-utf-8-1.png' alt='用记事本把GB2312转成UTF-8' /></li>
</ol>
<p>利用上面的文件转换网页编码之后，我发现在IE下页面不同的地方都出现了空白字符，严重的影响了页面的布局，Firefox和Opera没有问题。但是在记事本和Dreamweaver中，发现不了空白字符的位置，即使把页面所有的空白字符都去掉也解决不了问题。后来发现Editplus也可以转化编码，具体方法是：</p>
<ol>
<li>打开Editplus，选择“文件”-》“打开”</li>
<li>在弹出的窗口中选择“转换”方式为“UTF-8”<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/gb2312-utf-8-2.png' alt='用Editplus把GB2312转成UTF-8' /></li>
</ol>
<p>利用Editplus转换编码的时候有一个好处就是可以多个文件同时转换，就是在打开对话框中选择多个转换文件，同时每个转换的文件都保存了备份文件。不好的地方就是，转换过程中汉字都变成了乱码，这个可能是Editplus没有中文版，只有汉化版，没有考虑中文情况而导致的。</p>
<p>我再次利用Editplus转换一下已经用记事本转换过的页面，页面的空白符问题就得以解决。</p>
<p>后来测试：</p>
<ol>
<li>经过apache解析后的整个GB2312网页文件利用记事本转换成UTF-8就不会出现空白符问题。</li>
<li>把出现空白符的整个页面一起用Editplus转换时，出现空白符的地方出现？号，我发现出现空白符的地方就是Include文件的地方。</li>
</ol>
<p>查找资料如下：</p>
<blockquote><p>当一个软件打开一个文本时，它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码：</p>
<p>检测文件头标识，提示用户选择，根据一定的规则猜测</p>
<p>最标准的途径是检测文本最开头的几个字节，开头字节 Charset/encoding,如下表：</p>
<pre>    EF BB BF UTF-8
    FE FF UTF-16/UCS-2, little endian
    FF FE UTF-16/UCS-2, big endian
    FF FE 00 00 UTF-32/UCS-4, little endian.
    00 00 FE FF UTF-32/UCS-4, big-endian.</pre>
</blockquote>
<p>所以我猜想，应该是利用记事本转换编码的时候，记事本改变了每个文件的头部几个字节的声明，当用SSI包含这些文件的时候，位于文件中间的这些声明字节应该被忽略，但是IE浏览器无法忽略，而当作空白符，所以出现了问题。而当用Editplus来转换的时候，可能声明的字节写法更加规范或者紧凑，IE可以辨认忽略了。</p>
<p>所以编码转换建议如下：</p>
<ol>
<li>英文的直接用Editplus批量转换。</li>
<li>中文的，先用记事本转换一下，然后再用Editplus批量转换一下。</li>
</ol>
<ul class="refer">
<li>[1]<a href="http://www.zeali.net/entry/152">http://www.zeali.net/entry/152</a></li>
<li>[2]<a href="http://ellisonzeng.spaces.live.com/blog/cns!1198A97487162C2A!161.entry">http://ellisonzeng.spaces.live.com/blog/cns!1198A97487162C2A!161.entry</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2006/11/10/gb2312-convert-utf-8-when-using-ssi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL＆phpMyAdmin安装于Win下</title>
		<link>http://dancewithnet.com/2006/02/14/install-mysql-and-phpmyadmin-in-windows/</link>
		<comments>http://dancewithnet.com/2006/02/14/install-mysql-and-phpmyadmin-in-windows/#comments</comments>
		<pubDate>Tue, 14 Feb 2006 09:24:05 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=862</guid>
		<description><![CDATA[MySQL是一种精巧的中小型数据库系统，是现在非常流行的“Linux＋Apache＋PHP＋MySQL”中不可或缺的一环。phpMyAdmin是用PHP编写的一个MySQL数据库管理工具，使用它可以在比较友好的界面下操作MySQL，... ]]></description>
			<content:encoded><![CDATA[<p>MySQL是一种精巧的中小型数据库系统，是现在非常流行的“Linux＋Apache＋PHP＋MySQL”中不可或缺的一环。phpMyAdmin是用PHP编写的一个MySQL数据库管理工具，使用它可以在比较友好的界面下操作MySQL，而其本身就是php来写的，是一个非常棒的php源码教材。<span id="more-862"></span></p>
<p> 一般在安装MySQL＆phpMyAdmin之前会安装Apache＆php。具体可以看我的一篇文章<a href="http://dancewithnet.com/2005/09/16/install-apache-and-php-in-windows/">《安装Apache+PHP在Windows+IIS下》</a>。</p>
<h3>一、安装MySQL</h3>
<ol>
<li>到<a href="http://dev.mysql.com/downloads/">http://dev.mysql.com/downloads/</a>下载MySQL安装程序，本文中用的是目前的推荐版本MySQL5.0</li>
<li>安装MySQL，首先出现选择安装类型<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/mysql-phpmyadmin-1.gif' alt='安装MySQL，首先出现选择默认安装类型Typical' />
<ol>
<li>Typical典型安装：典型安装安装类型MySQL服务器，mysql命令行客户端和命令行应用程序。命令行客户端和程序包括mysqldump, myisamchk和几个其他工具可以帮助你管理MySQL服务器。</li>
<li>Complete完全安装：完全安装类型安装在安装包里的所有的内容。整个安装包包括诸如嵌入式服务库，基准套件，支持脚本和文档。</li>
<li>Custom定制安装：定制安装类型使你能够完全控制你希望安装的整个软件包，你可以选择你想要安装的软件包类型和安装路径。</li>
</ol>
<p>Typical是默认安装类型，推荐初级用户使用。</p>
<p>如果选择Typical或者Complete，你将会马上前进到确认屏幕来确认你的选择同时开始安装，默认安装路径是C:\Program Files\MySQL\MySQL Server 5.0\。</p>
<p>如果选择Custom，则会出现一个界面来改变安装的软件包＆安装路径。所有可用的内容都以一种树形结构罗列在定制安装对话框的左端。没有被选中安装的内容有一个红色的X标记，选中安装的内容有一个白色标记。可以点击内容图标同时从出现的下拉菜单中选择新的选项来决定一个内容是否安装。可以通过点击“change&#8230;”按钮在出现的页面选择安装路径。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/mysql-phpmyadmin-2.gif' alt='可以通过点击“change…”按钮在出现的页面选择安装路径。' /></p>
<p>本文中为了＆<a href="http://dancewithnet.com/2005/09/16/install-apache-and-php-in-windows/">《安装Apache+PHP在Windows+IIS下》</a>中保持一直，安装目录为C:\web\MySQL\<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/mysql-phpmyadmin-3.gif' alt='安装目录为C:\web\MySQL\' /></p>
</li>
<li>安装MySQL Server Instance Configuration Wizard
<p>安装完之后会出现MySQL服务实例配置向导，直接next下去，选择Stardard Configuration继续next，在出现的Modify Security Settings设置root的password然后继续next，然后点击execute，最后Finish！</p>
</li>
<li>在首次在安装完成后，将会提供你一份注册MySQL站点的选项。注册可以使你访问forums.mysql.com论坛的邮件，同时可以在bugs.mysql.com报告错误同时提交给实时通讯装置。</li>
<li>安装成功之后，打开“开始》MySQL》MySQL  Server 5.0》MySQL Command Line Client”，在出现的窗口中输入root的密码即可以进入表示安装成功。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/mysql-phpmyadmin-4.gif' alt='出现的窗口中输入root的密码' /></li>
</ol>
<h3>二、安装phpMyAdmin</h3>
<ol>
<li>phpMyAdmin是一个管理MySQL的PHP程序，因此设置好phpMyAdmin相当于完整的配置完Apache＋PHP＋MySQL并运行了一个程序。</li>
<li>配置PHP，因为上面只是安装了MySQL还要启动相应的模块才能是php能够链接MySQL</li>
<ol>
<li>打开C:\web\php5,把libmysql.dll文件拷到C:\WINDOWS\system32中</li>
<li>打开C:\WINDOWS\php.ini做如下修改
<ol>
<li>去掉extension=php_mysql.dll前注释符号;启动php的mysql模块</li>
<li>去掉; extension_dir = &#8220;./&#8221;前注释符号，并修改为extension_dir = &#8220;C:/web/php5/ext&#8221;，这个主要是因为本文中安装的不是默认路径所以需要指定扩展路径</li>
<li>去掉extension=php_mbstring.dll前的注释符号，启动mbstring模块因为汉字是宽字符。</li>
<li>重启apache让设置生效</li>
</ol>
</li>
</ol>
<li>从<a href="http://www.phpmyadmin.net/">http://www.phpmyadmin.net/</a>下载<a href="http://www.phpmyadmin.net/">phpMyAdmin</a>，本文用的是phpMyAdmin 2.7.0-pl2</li>
<li>把下载的phpMyAdmin解压缩到某一文件夹中，本文是C:\web\phpMyAdmin</li>
<li>在apache中设置为localhost的虚拟目录admin
<pre><code>&lt;Directory&gt;
Alias /admin/ "C:/web/phpMyAdmin/"
DirectoryIndex index.php
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
&lt;/Directory&gt;</code></pre>
</li>
<li>在浏览器中输入http://localhost/admin/,得到如下页面即为安装成功。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/mysql-phpmyadmin-5.jpg' alt='phpMyAdmin安装成功看到的页面' /></li>
</ol>
<h3>三、配置phpMyAdmin[2006.12.29]</h3>
<p>phpMyAdmin所在的目录下的config.default.php文件，修改一下几个变量，就可以来管理MySQL数据库了。</p>
<pre><code>$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin/';<span>（phpMyAdmin的访问路径）</span>
$cfg[’Servers’][$i][’user’] = 'root'; <span>（MySQL的用户名）</span>
$cfg[’Servers’][$i][’password’] = 'mysql'; <span>（MySQL的用户名的密码）</span></code></pre>
<p>这样设置后，如果放在网络上，不管是谁只要知道你的phpmyadmin的位置也一样可以访问？所以就需要设置密码。</p>
<pre><code>$cfg[’Servers’][$i][’auth_type’] = ‘config’;
<span>// Authentication method (config, http or cookie based)?</span></code></pre>
<p>有三种选择config http cookie</p>
<ul>
<li>config : 按配置文件中的密码 (也就是标准方式) 这种方式没有认证，也是默认方式</li>
<li>http : 使用HTTP认证，这个需要apache和php下，且php是以模块的形式引入</li>
<li>cookie : 使用COOKIE登录认证，只需要浏览器支持cookie</li>
</ul>
<p>所以常用的形式是cookie，这个时候需要设置 $cfg['blowfish_secret'] = &#8216;(一个特殊的字符串)&#8217;;</p>
<p>ok，这样再访问就需要输入你的MySQL的用户名和密码了。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2006/02/14/install-mysql-and-phpmyadmin-in-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安装Apache+PHP在Windows+IIS下</title>
		<link>http://dancewithnet.com/2005/09/16/install-apache-and-php-in-windows/</link>
		<comments>http://dancewithnet.com/2005/09/16/install-apache-and-php-in-windows/#comments</comments>
		<pubDate>Thu, 15 Sep 2005 16:05:59 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=852</guid>
		<description><![CDATA[Linux+Apache+PHP+MySQL是一个低成本效率高而又稳定的WEB Server，但是我们绝大部分开发都是在Windows环境下完成开发，然后移植到Linux或者Unix下。现在依据个人体验来说明一下Windows XP＋IIS下安装Apache2... ]]></description>
			<content:encoded><![CDATA[<p>Linux+Apache+PHP+MySQL是一个低成本效率高而又稳定的WEB Server，但是我们绝大部分开发都是在Windows环境下完成开发，然后移植到Linux或者Unix下。现在依据个人体验来说明一下Windows XP＋IIS下安装Apache2＋PHP 5。没有IIS安装就更加简单，除去IIS相关步骤就可以了。<span id="more-852"></span></p>
<h3>一、关闭IIS，如果不关闭IIS安装Apache会出错。</h3>
<p>关闭IIS有两种方法，任意一种都可以：</p>
<ol>
<li>控制面板－－性能和维护－－管理工具－－服务中，关闭IIS Admin服务。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-1.gif' alt='控制面板－－性能和维护－－管理工具－－服务中，关闭IIS Admin服务' /></li>
<li>在开始－－运行中直接输入如下代码，或者先输入cmd，在弹出的窗口中输入也行<code>net  stop  iisadmin</code>上述命令关闭了iis相关的所有服务器，比如web sites 、smtp等。<code>net stop iisadmin /y<span>避免输入上面那个命令后需要在输入y</span></code>如果用net stop w3svc只是关闭一个站点3w服务器，但是如果是多个web站点就不行。
</li>
</ol>
<p>如果开启IIS可以在控制面板中找到interet信息服务打开网站服务的方法，也可以用命名，net start w3svc都可以。注意如果直接在服务中打开IIS Admin服务或者运动net start iisadmin，是可以打开IIS Admin服务，但是3w服务没有打开，所以依旧需要用上面的方法打开3w服务，因为在打开IIS Admin服务没有打开3w服务，但是打开3w服务肯定就打开了IIS Admin服务。</p>
<h3>二、安装Apache2。</h3>
<p>ps，Apache 2不能在Windows 95上运行；在Windows 98上勉强能够运行，但不能作为服务使用。从4.3版本开始，PHP也不再支持Windows 95。所以，你的Windows操作系统必须是Windows NT、2000、XP、Vista和Win7。</p>
<ol>
<li>Apache可以到<a href="http://www.apache.org/dyn/closer.cgi/httpd/binaries/win32/">http://www.apache.org/dyn/closer.cgi/httpd/binaries/win32/</a>下载</li>
<li>对于本机开发Network Domain，ServerName都填入localhost就可以了，填入email地址即可。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-2.gif' alt='安装apache时需要填入的信息' /></li>
<li>上图中的单项选择，对于初学者来说，不管Apache的服务是否使用80单口，建议都选第一个，这样就直接把Apache注册为系统服务，稳定方便。然后下一步选择Typical。</li>
<li>安装路径一般会默认为c:\Programme Files\Apache Group改成c:\web或者其他符合8.3格式的名称，这样以来以后每次输入Apache安装路径不用加引号，并且Apache安装时会自动生成Apache2文件夹，所以文件会安装到c:\web\apache2，这样以后也可以把PHP，MySQL都安装到web下便于几种管理。</li>
<li>由于Apache＆IIS都默认WEB服务端口是80，所以其中一个必须修改其端口，一般改成8080<br />修改IIS端口直接在IIS管理工具中就可以了。可以在控制面板中找，或者在运行中输入inetmgr<br />修改Apache端口，通过开始－所有程序－Apache－Configure Apache Server打开httpd.conf文件，
<pre><code><span>找到</span> #Listen 12.34.56.78:80   <span>#是注释符号</span>
     Listen 80  <span>改成</span>  Listen 8080
<span>然后找到</span>  ServerName localhost:80   <span>改成</span>  ServerName localhost:8080  <span>即可</span></code></pre>
</li>
<li>在浏览器中输入localhost，如果修改了端口就输入localhost:8080能够看到apache页面，就说明安装成功了。</li>
</ol>
<p>ps[2005.9.29].利用apache的proxy模块实现隐藏iis的端口</p>
<ol>
<li>按照上面的方法，apache使用默认端口80，修改iis使用端口为8080，当然你也可以采用其他的合理端口。</li>
<li>修改apache的http.conf文件，去掉下面两行代码前的注释符号#，启动代理模块
<pre><code>LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so</code></pre>
</li>
<li>在该文件添加上如下两行代码，使输入http://localhost/iis/转向http://localhost:8080
<pre><code>ProxyPass /iis/ http://127.0.0.1:8080/
 ProxyPassReverse /iis http://127.0.0.1:8080</code></pre>
<p>这样就可以在浏览器中输入localhost访问apache，输入localhost/iis/访问iis了而隐藏了8080端口</li>
<li>另外，可以通过设置虚拟主机来访问apache或者iis
<pre><code>&lt;VirtualHost *:80&gt;
    ServerAdmin kavenyan@163.com
    DocumentRoot E:/www/dancewithnet
    ServerName www.dancewithnet.com
    ServerAlias dancewithnet.com
    DefaultLanguage zh-CN
    AddDefaultCharset UTF-8
&lt;/VirtualHost&gt;
&lt;VirtualHost *:80&gt;
    ServerAdmin kavenyan@163.com
    ServerName iis.dancewithnet.com
    DefaultLanguage zh-CN
    AddDefaultCharset GB2312
    ProxyPass / http://127.0.0.1:8080/  <span>or http://服务器ip:8080/</span>
    ProxyPassReverse / http://127.0.0.1:8080/   <span>or http://服务器ip:8080/</span>
&lt;/VirtualHost&gt;</code></pre>
</li>
<p>这样就可以使用www.dancewithnet.com访问apache,iis.dancewithnet.com访问iss,而隐藏了8080端口</p>
<h3>三、配置PHP环境</h3>
<ol>
<li>在<a href="http://www.php.net/downloads.php">www.php.net</a>上下载php5的zip安装包，将其文件解压放到c:\web\php5中即可
<p>ps， Apache 2可采取2种方式来运行PHP程序：通过一个CGI接口来运行（外部调用Php.exe），或者使用PHP的DLL文件在Apache的内部运行。后一种方式的速度较快。所以，针对每个版本的PHP，都会提供2个Windows二进制发行包。较小的是.msi包，它会安装CGI可执行程序Php.exe，但其中拿掉了通过Apache DLL来运行PHP脚本所需的模块。较大的.zip包则包含了所有这些东西</p>
</li>
<li>最好是无论使用何种接口（CGI 或者 SAPI）都确保 php5ts.dll 可用，因此必须将此文件放到 Windows 路径中。最好的位置是 Windows 的 system 目录（%windir%\System）：
<pre><code>c:\\winnt\\system32 for Windows NT/2000
或者
c:\\winnt40\\system32 for Windows NT/2000 服务器版
c:\\windows\\system32 for Windows XP/Vista/Win7</code></pre>
<p>ps，也有把php文件中所有的dll文件都拷到%windir%\System中的，那样的配置和我介绍的方法稍微有点不同，但是我觉得那样比较杂乱，就不再说明，有兴趣的朋友可以自己研究。</p>
<li>接着实设定有效的PHP 配置文件，php.ini。压缩包中包括两个 ini 文件，php.ini-dist 和 php.ini-recommended。建议使用 php.ini-recommended，因为此文件对默认设置作了性能和安全上的优化。将选择的 ini 文件拷贝到 PHP 能够找到的目录下并改名为 php.ini。PHP 默认在 Windows 目录（%WINDIR% 或 %SYSTEMROOT% ）下搜索 php.ini：
<pre><code>c:\\winnt 或 c:\\winnt40  for Windows NT/2000 服务器版
c:\windows  for Windows XP/Vista/Win7</code></pre>
</li>
<li>停止Apache，打开httpd.conf进行编辑。<br />
如果是使用CGI二进制文件的形式来使用php，添入代码如下（注意代码间的空格）：</p>
<pre><code>ScriptAlias /php/ "c:/web/php5/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php5/php.exe"
</code></pre>
<p>如果作为模块（推荐这种方式），添加代码如下：   </p>
<pre><code>LoadModule php5_module "c:/web/php5/php5apache2.dll"
AddType application/x-httpd-php .php
</code></pre>
</li>
<li>保存httpd.conf，启动Apache</li>
</ol>
<h3>四、测试PHP</h3>
<ol>
<li>编写文件index.php放入C:\web\Apache2\htdocs中，代码如下：<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-3.gif' alt='测试PHP安装是否成功的代码' /></li>
<li>在浏览中输入http://localhost/index.php效果如下，则说明安装成功：<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-4.gif' alt='php安装成功出现的页面' /></li>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2005/09/16/install-apache-and-php-in-windows/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>SSI</title>
		<link>http://dancewithnet.com/2005/06/02/ssi/</link>
		<comments>http://dancewithnet.com/2005/06/02/ssi/#comments</comments>
		<pubDate>Thu, 02 Jun 2005 13:40:04 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Apache &  MySQL &  PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ssi]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=847</guid>
		<description><![CDATA[一、什么是SSI？
SSI直译服务器端包含(Server Side   Includes)，由字面上看由WEB在服务器提供的一种功能，并且是在服务器端进行的。一般说来，要完成较复杂的任务（如：聊天室／留言本等），必... ]]></description>
			<content:encoded><![CDATA[<h3>一、什么是SSI？</h3>
<p>SSI直译服务器端包含(Server Side   Includes)，由字面上看由WEB在服务器提供的一种功能，并且是在服务器端进行的。<span id="more-847"></span>一般说来，要完成较复杂的任务（如：聊天室／留言本等），必须设计专门的CGI或ASP程序；但是如果只是想给网页加上简单的功能(如：显示一篇文档，web服务器环境变量，关于该文档的更新日期／大小等)，则只要SSI就可以完成了。SSI则是直接由服务器解释执行的，须要WEB服务器软件支持SSI。而且，由于直接在服务器端执行SSI，产生相应HTML代码；所以对客户端没有限制，不会产生因为不同浏览器而产生不同的观看效果。</p>
<h3>二、SSI有什么用?</h3>
<p>目前，主要有以下几种用用途：</p>
<ol>
<li>显示服务器端环境变量&lt;#echo&gt;</li>
<li>将文本内容直接插入到文档中&lt;#include&gt;</li>
<li>显示WEB文档相关信息&lt;#flastmod #fsize&gt; (如文件制作日期/大小等)</li>
<li>直接执行服务器上的各种程序&lt;#exec&gt;(如CGI或其他可执行程序)</li>
<li>设置SSI信息显示格式&lt;#config&gt;(如文件制作日期/大小显示方式</li>
<li>高级SSI&lt;XSSI&gt;可设置变量使用if条件语句。</li>
</ol>
<h3>三、使用SSI很容易吧？</h3>
<p>SSI是为WEB服务器提供的一套命令，这些命令只要直接嵌入到HTML文档的注释内容之中即可。如：</p>
<p>&lt;!&#8211;#include   file=&quot;info.htm&quot;&#8211;&gt;</p>
<p>就是一条SSI指令，其作用是将&quot;info.htm&quot;的内容拷贝到当前的页面中，当访问者来浏览时，会看到其它HTML文档一样显示info.htm其中的内容。</p>
<p>其它的SSI指令使用形式基本同刚才的举例差不多，可见SSI使用只是插入一点代码而已，使用形式非常简单。</p>
<p>当然，如果WEB服务器不支持SSI，它就会只不过将它当作注释信息，直接跳过其中的内容；浏览器也会忽略这些信息。</p>
<h3>四、如何在我的WEB服务器上配置SSI功能？</h3>
<p>在一些WEB服务器上（如IIS   4.0/SAMBAR 4.2），包含 #include 指令的文件必须使用已被映射到 SSI 解释程序的扩展名；否则，Web   服务器将不会处理该SSI指令；默认情况下，扩展名 .stm、.shtm 和 .shtml 被映射到解释程序（Ssinc.dll）。 </p>
<p>Apache则是根据你的设置情况而定，修改srm.conf如：</p>
<pre><code>AddType text/x-server-parsed-html   .shtml
<span>将只对.shtml扩展名的文件解析SSI指令</span>
AddType text/x-server-parsed-html   .html
<span>将对所有HTML文档解析SSI指令</span>
</code></pre>
<p>Netscape WEB服务器直接使用Administration Server(管理服务器)可打开SSI功能。</p>
<p>Website使用Server Admin程序中的Mapping标签，扩展名添加内容类型为：wwwserver/html-ssi</p>
<p>Cern服务器不支持SSI，可用SSI诈骗法，到<a href="http://sw.cse.bris.ac.uk/WebTools/fakessi.html">http://sw.cse.bris.ac.uk/WebTools/fakessi.html</a>上下载一个PERL脚本，即可使你的CERN服务器使用一些SSI指令。（不支持exec指令。）</p>
<h3>五、如何试用SSI</h3>
<h4>（一）SSI指令基本格式：</h4>
<dl>
<dt>语法</dt>
<dd><code>&lt;!--指令名称="指令参数"--&gt;</code></dd>
<dt>示例</dt>
<dd><code>&lt;!--#include file="info.htm"--&gt;</code></dd>
<dt>说明:</dt>
<dd>&lt;!&#8211;  &#8211;&gt;是HTML语法中表示注释，当WEB服务器不支持SSI时，会忽略这些信息。</dd>
<dd>#include 为SSI指令之一。</dd>
<dd>file 为include的参数, info.htm为参数值，在本指令中指将要包含的文档名。</dd>
<dt>注意:</dt>
<dd>&lt;!&#8211;与#号间无空格，只有SSI指令与参数间存在空格。</dd>
<dd>上面的标点=””，一个也不能少。</dd>
<dd>SSI指令是大小写敏感的，因此参数必须是小写才会起作用。</dd>
</dl>
<h4>（二）SSI指令使用详解</h4>
<h5>1)#echo 示范</h5>
<dl>
<dt>作用：</dt>
<dd>将环境变量插入到页面中。</dd>
<dt>语法：</dt>
<dd><code>&lt;!--#echo var=”变量名称”--&gt;</code></dd>
<dt>示例：</dt>
<dd>
<pre><code>
本文档名称：&lt;!--#echo   var=”DOCUMENT_NAME”--&gt;
现在时间：&lt;!--#echo   var=”DATE_LOCAL”--&gt;
你的IP地址是：&lt;!--#echo   var=”REMOTE_ADDR”--&gt;</code></pre>
</dd>
<dt>可在SSI中使用的变量：</dt>
<dd>
<ol>
<li>只有SSI中能使用的变量<br />
<table>
<tbody>
<tr>
<td></td>
<td>变量名称</td>
<td>作用</td>
<td>示例</td>
</tr>
<tr>
<td>1</td>
<td>DOCUMENT_NAME</td>
<td>当前文档名</td>
<td>echo.html</td>
</tr>
<tr>
<td>2</td>
<td>DOCUMENT_URL或DOCUMENT_URI</td>
<td>当前文档相对URL</td>
<td>/ssi/echo.html</td>
</tr>
<tr>
<td>3</td>
<td>QUERY_STRING_UNESCAPED<br />
        或QUERY_STRING</td>
<td>所发送的查询字符串</td>
<td>sample</td>
</tr>
<tr>
<td>4</td>
<td>DATE_LOCAL</td>
<td>服务器中当前日期</td>
<td>Sun, 23 May 1999 21:54:30</td>
</tr>
<tr>
<td>5</td>
<td>DATE_GMT</td>
<td>以格林威冶时间设置的服务器时间</td>
<td>Sun, 23 May 1999 13:54:30</td>
</tr>
<tr>
<td>6</td>
<td>LAST_MODIFIED</td>
<td>当前文档最后修改时间</td>
<td>23-May-1999 PST</td>
</tr>
</tbody>
</table>
</li>
<li>标准CGI变量:
<p>WEB上关于CGI环境变量测试的示例：</p>
<ul>
<li>LINUX下Apache：<a href="http://hoyi.zb169.net/cgi-bin/hiecho.cgi?sample">http://hoyi.zb169.net/cgi-bin/hiecho.cgi?sample</a></li>
<li>Freebsd下Apache: <a href="http://hoyi.onlineexpress.net/cgi-bin/hiecho.cgi?sample">http://hoyi.onlineexpress.net/cgi-bin/hiecho.cgi?sample</a></li>
</ul>
<table>
<tbody>
<tr>
<td></td>
<td>CGI环境变量名称</td>
<td>作用</td>
<td>示例</td>
</tr>
<tr>
<td>1</td>
<td>AUTH_TYPE</td>
<td>用户所使用的身份验证类型</td>
<td>　</td>
</tr>
<tr>
<td>2</td>
<td>CONTENT_LENGTH</td>
<td>服务器输出文本长度</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>HTTP_ACCEPT</td>
<td>客户机可接受的MIME类型</td>
<td>application/vnd.ms-excel, application/msword, */*</td>
</tr>
<tr>
<td>4</td>
<td>HTTP_USER_AGENT</td>
<td>客户机浏览器配置状况</td>
<td>Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)</td>
</tr>
<tr>
<td>5</td>
<td>GATEWARY_INTERFACE</td>
<td>服务器所使用的 CGI 规范的修正版</td>
<td>CGI/1.1</td>
</tr>
<tr>
<td>6</td>
<td>PATH_INFO</td>
<td>客户端给出附加路径信息</td>
<td>　</td>
</tr>
<tr>
<td>7</td>
<td>PATH_TRANSLATED</td>
<td>PATH_INFO 的值，但带有扩展为某个目录规范的虚拟路径</td>
<td>/v/spool/webadm/html</td>
</tr>
<tr>
<td>8</td>
<td>QUERY_STRING</td>
<td>在引用该脚本的 URL 中跟在问号 (?) 后面的信息</td>
<td>Sample</td>
</tr>
<tr>
<td>9</td>
<td>REMOTE_ADDR</td>
<td>客户机IP地址</td>
<td>202.103.27.103</td>
</tr>
<tr>
<td>10</td>
<td>REMOTE_HOST</td>
<td>客户机名称</td>
<td>　</td>
</tr>
<tr>
<td>11</td>
<td>REQUEST_METHOD</td>
<td>HTTP请求方法</td>
<td>GET</td>
</tr>
<tr>
<td>12</td>
<td>SCRIPT_NAME</td>
<td>当前脚本名称</td>
<td>/cgi-main/cgiwrap/hoyi/hiecho.cgi</td>
</tr>
<tr>
<td>13</td>
<td>SERVER_NAME</td>
<td>服务器名称或IP地址</td>
<td>hoyi.zb169.net</td>
</tr>
<tr>
<td>14</td>
<td>SERVER_PORT</td>
<td>服务器接请求的TCP/IP端口</td>
<td>80</td>
</tr>
<tr>
<td>15</td>
<td>SERVER_PROTOCOL</td>
<td>与请求有关的信息检索协议的名称与版本，通常为 HTTP/1.0</td>
<td>HTTP/1.1</td>
</tr>
<tr>
<td>16</td>
<td>SERVER_SOFTWARE</td>
<td>响应请求的 Web 服务器软件的名称和版本</td>
<td>Apache/1.3.6 (Unix)</td>
</tr>
</tbody>
</table>
</li>
<li>某些服务器支持的变量</li>
</ol>
</dd>
</dl>
<h5>2) #include 示范</h5>
<dl>
<dt>作用：</dt>
<dd>将文本文件的内容直接插入到文档页面中。</p>
<dt>语法：</dt>
<dd>
<pre><code>&lt;!--#include   file=”文件名称”--&gt;
&lt;!--#include virtual=”文件名称”--&gt;</code></pre>
</dd>
<dt>参数：</dt>
<dd>file文件名是一个相对路径，该路径相对于使用 #include指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中，但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档，则为file=”nav_head.htm”。</li>
<dd>virtual文件名是Web站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件；则为file=”/hoyi/nav_head.htm”</li>
</ul>
<dt>注意：</dt>
<dd>文件名称必须带有扩展名。</li>
<dd>被包含的文件可以具有任何文件扩展名，我觉得直接使用htm扩展名最方便，微软公司推荐使用   .inc 扩展名（这就看你的爱好了）。</li>
</ol>
<dt>示例：</dt>
<dd>
<pre><code>&lt;!--#include   file=”nav_head.htm”--&gt;将头文件插入到当前页面
&lt;!--#include   file=”nav_foot.htm”--&gt;将尾文件插入到当前页面</code></pre>
</dd>
</dl>
<h5>3. #flastmod 和#fsize 示范</h5>
<dl>
<dt>作用：</dt>
<dd>#flastmod 文件最近更新日期</dd>
<dd>#fsize 文件的长度</dd>
<dt>语法：</dt>
<dd>
<pre><code>&lt;!--#flastmod file=”文件名称”--&gt;
  &lt;!--#fsize   file=”文件名称”--&gt;</code></pre>
</dd>
<dt>参数：</dt>
<dd>file 指定包含文件相对于本文档的位置 如 info.txt   表示当前目录下的的info.txt文档</dd>
<dd>virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt   表示</dd>
<dt>注意：</dt>
<dd>文件名称必须带有扩展名。</dd>
<dt>示例：</dt>
<dd>
<pre><code>&lt;!--#flastmod   file=”news.htm”--&gt;
  将当前目录下news.htm文件的最近更新日期插插入到当前页面
  &lt;!--#fsize   file=”news.htm”--&gt;
  将当前目录下news.htm的文件大小入到当前页面</code></pre>
</dd>
</dl>
<h5>4.#exec 示范</h5>
<dl>
<dt>作用：</dt>
<dd>将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入，这取决于使用的参数是cmd还是cgi。</dd>
<dt>语法：</dt>
<dd>
<pre><code>&lt;!--#exec   cmd=”文件名称”--&gt;
  &lt;!--#exec cgi=”文件名称”--&gt;</code></pre>
</dd>
<dt>参数：</dt>
<dd>cmd 常规应用程序</dd>
<dd>cgi   CGI脚本程序</dd>
<dt>示例：</dt>
<dd>
<pre><code>&lt;!--#exec cmd=”cat   /etc/passwd”--&gt;将会显示密码文件
  &lt;!--#exec cmd=”dir   /b”--&gt;将会显示当前目录下文件列表
  &lt;!--#exec   cgi=”/cgi-bin/gb.cgi”--&gt;将会执行CGI程序gb.cgi。
  &lt;!--#exec   cgi=”/cgi-bin/access_log.cgi”--&gt;将会执行CGI程序access_log.cgi。</code></pre>
</dd>
<dt>注意：</dt>
<dd>从上面的示例可以看出，这个指令相当方便，但是也存在安全问题。</dd>
<dt>禁止方法：</dt>
<dd>Apache，将access.conf中的”Options   Includes ExecCGI”这行代码删除；</dd>
<dd>在IIS中，要禁用 #exec 命令，可修改 SSIExecDisable   元数据库；</dd>
</dl>
<h5>5.#config</h5>
<dl>
<dt>作用：</dt>
<dd>指定返回给客户端浏览器的错误信息、日期和文件大小的格式。</dd>
<dt>语法：</dt>
<dd>&lt;!&#8211;#config   errmsg=”自定义错误信息”&#8211;&gt;</dd>
<dd>&lt;!&#8211;#config sizefmt=”显示单位”&#8211;&gt;</dd>
<dd>&lt;!&#8211;#config   timefmt=”显示格式”&#8211;&gt;</dd>
<dt>参数：</dt>
<dd>errmsg 自定义SSI执行错误信息，可以为任何你喜欢的方式。</dd>
<dd>sizefmt   文件大小显示方式，默认为字节方式(“bytes”)可以改为千字节方式(“abbrev”)</dd>
<dd>timefmt 时间显示方式，最灵活的配置属性。</p>
<table>
<tbody>
<tr>
<td>代码</td>
<td>示例</td>
<td>作用</td>
<td>代码</td>
<td>示例</td>
<td>作用</td>
</tr>
<tr>
<td>%a</td>
<td>Mon</td>
<td>缩写的星期几</td>
<td>%m</td>
<td>05</td>
<td>月份数</td>
</tr>
<tr>
<td>%A</td>
<td>Monday</td>
<td>星期几</td>
<td>%M</td>
<td>55</td>
<td>分</td>
</tr>
<tr>
<td>%b<br />
          %h</td>
<td>Aug</td>
<td>缩写的月份名</td>
<td>%p</td>
<td>AM</td>
<td>上、下午(AM或PM)</td>
</tr>
<tr>
<td>%r</td>
<td>10:20:20 AM</td>
<td>12小制时间</td>
</tr>
<tr>
<td>%B</td>
<td>Auguest</td>
<td>月份名</td>
<td>%s</td>
<td>40</td>
<td>秒</td>
</tr>
<tr>
<td>%d</td>
<td>01</td>
<td>当月第几天</td>
<td>%T</td>
<td>20:20:30</td>
<td>24小制时间</td>
</tr>
<tr>
<td>%D</td>
<td>05/28/99</td>
<td>数字日期</td>
<td>%U<br />
          %W</td>
<td>21</td>
<td>一年中的星期</td>
</tr>
<tr>
<td>%e</td>
<td>1</td>
<td>当月第几天，前面不放0</td>
<td>%w</td>
<td>2</td>
<td>从星期天至今天数</td>
</tr>
<tr>
<td>%H</td>
<td>20</td>
<td>小时(24小时制)</td>
<td>%y</td>
<td>99</td>
<td>2位数格式的年号</td>
</tr>
<tr>
<td>%I</td>
<td>08</td>
<td>小时(12小时制)</td>
<td>%Y</td>
<td>1999</td>
<td>4位数表示的年号</td>
</tr>
<tr>
<td>%j</td>
<td>320</td>
<td>一年中的天数</td>
<td>%z</td>
<td>PDT</td>
<td>时区位置</td>
</tr>
</tbody>
</table>
</dd>
<dt>示例：</dt>
<dd>
<pre><code>  显示一个不存在文件的大小
  &lt;!--#config errmsg=”服务器执行错误，请联系管理员 <a href="mailto:yiho@126.com">yiho@126.com</a>，谢谢！”--&gt;
  &lt;!--#fsize   file=”不存在的文件.htm”--&gt;
  以千字节方式显示文件大小
  &lt;!--#config   sizefmt=”abbrev”--&gt;
  &lt;!--#fsizefile=”news.htm”--&gt;
  以特定的时间格式显示时间
  &lt;!--#config   timefmt=”%Y年/%m月%d日 星期%W 北京时间%H:%M:%s，%Y年已过去了%j天
                           今天是%Y年的第%U个星期”--&gt;
  &lt;!--#echo   var=”DATE_LOCAL”--&gt;
  显示今天是星期几,几月,时区
  &lt;!--#config timefmt=”今天%A, %B   ,服务器时区是 %z，是”--&gt;
  &lt;!--#echo var=”DATE_LOCAL”--&gt;</code></pre>
</dd>
</dl>
<h5>6.XSSI</h5>
<p>XSSI（Extended SSI）是一组高级SSI指令，内置于Apache   1.2或更高版本的mod-include模块之中。其中可利用的的指令有：#printenv、#set、#if</p>
<dl>
<dt>#printenv</dt>
<dd>作用：显示当前存在于WEB服务器环境中的所有环境变量。</dd>
<dd>语法：&lt;!&#8211;#printenv&#8211;&gt;</dd>
<dd>参数：无</dd>
<dd>示例：&lt;!&#8211;#printenv&#8211;&gt;</dd>
<dt>#set</dt>
<dd>作用：可给变量赋值，以用于后面的if语句。</p>
<dd>语法：&lt;!&#8211;#set   var=”变量名”value=”变量值”&#8211;&gt;</p>
<dd>参数：无</p>
<dd>示例：&lt;!&#8211;#set   var=”color”value=”红色”&#8211;&gt;</p>
<dt>#if</dt>
<dd>作用：创建可以改变数据的页面，这些数据根据使用if语句时计算的要求予以显示。</p>
<dd>语法：</p>
<pre>
<code>
  &lt;!--#if   expr=”$变量名=\”变量值A\””--&gt;
  <span>显示内容</span>
  &lt;!--#elif   expr=”$变量名=\”变量值B\””--&gt;
  <span>显示内容</span>
  &lt;!--#else--&gt;
  <span>显示内容</span>
  &lt;!--#endif”--&gt;
</code>
</pre>
</dd>
<dd>参数：</p>
<table>
<caption>关于XSSI的条件表达式</caption>
<tbody>
<tr>
<td>表达式</td>
<td>作用</td>
</tr>
<tr>
<td>(string)</td>
<td>如果string存在，就返回真</td>
</tr>
<tr>
<td>string1=string2</td>
<td>如果两个字符串相等，就返回真</td>
</tr>
<tr>
<td>string1!=string2</td>
<td>如果两个字符串不等，就返回真</td>
</tr>
<tr>
<td>string1&lt;string2</td>
<td>如果string1小于string2，就返回真</td>
</tr>
<tr>
<td>string1&lt;=string2</td>
<td>如果string1小于等于string2，就返回真</td>
</tr>
<tr>
<td>string1&gt;string2</td>
<td>如果string1大于string2，就返回真</td>
</tr>
<tr>
<td>string1&gt;=string2</td>
<td>如果string1大于等于string2，就返回真</td>
</tr>
<tr>
<td>!string</td>
<td>！为<strong>”非”</strong>操作符；若string存在，就返回真</td>
</tr>
<tr>
<td>(string1)&amp;&amp;(string2)</td>
<td>&amp;&amp;为<strong>”与”</strong>操作符；string1、string2都存在，就返回真</td>
</tr>
<tr>
<td>(string1)!!(string2)</td>
<td>!!   为<strong>”或”</strong>操作符；string1、string2有一个存在，就返回真</td>
</tr>
</tbody>
</table>
</dd>
<dd>示例：</p>
<pre>
<code>
&lt;!--#if   expr=”$SERVER_NAME=\”hoyi.zb169.net\””--&gt;
欢迎光临好易CGI工厂在淄博热线的分站<a href="http://hoyi.zb169.net/">http://hoyi.zb169.net</a>。
&lt;!--#elif  expr=”$SERVER_NAME=\”linux.cqi.com.cn\”” --&gt;
欢迎光临好易CGI工厂在太阳城的分站<a href="http://linux.cqi.com.cn/~hoyi">http://linux.cqi.com.cn/~hoyi</a>。
&lt;!--#else--&gt;
欢迎光临好易CGI工厂！
&lt;!--#endif”--&gt;</code></pre>
</dd>
<dd>注意：用于前面指令中的反斜杠，是用来代换内部的引号，以便它们不会被解释为结束表达式。不可省略。</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2005/06/02/ssi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

