<?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>SLJ.me - 申力军 &#187; Apache/Nginx</title>
	<atom:link href="http://slj.me/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://slj.me</link>
	<description>申力军的博客</description>
	<lastBuildDate>Mon, 05 Dec 2011 05:35:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>CentOS 安装 Apache 后其他机器无法访问的解决方法</title>
		<link>http://slj.me/2010/12/centos-apache-firewall-settings/</link>
		<comments>http://slj.me/2010/12/centos-apache-firewall-settings/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 13:00:08 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[Apache/Nginx]]></category>
		<category><![CDATA[Web Structure]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2102</guid>
		<description><![CDATA[症状： 通过 yum install httpd mod_ssl 安装apache以及https模块之后， /etc/init.d/httpd start 成功启动了Apache 但是局域网的另外一台机器却无法显示其页面。 诊断： 1、 netstat -l 看到 80 端口正在被监听。 2、 接着使用 curl http://127.0.0.1 可以得到页面源码。且不说默认的Apache配置如何，至少能说明服务已经跑起来了。 但是在局域网另外一台机器却无法打开页面。 3、 我使用SSH连到CentOS操作的，说明之间的链路是没问题的。 随之想到的就是防火墙，记得有个iptables，立刻上网找到了解决方案。 这里需要注意的就是，添加那句规则时，一定要放在拒绝规则的上面，和22端口的规则挨在一起就没错了。 解决方法： 通过/etc/init.d/iptables status命令查询是否有打开80端口，如果没有可通过两种方式处理： 1.修改vi /etc/sysconfig/iptables命令添加使防火墙开放80端口 -A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 80 -j ACCEPT 2.关闭防火墙 /etc/init.d/iptables stop #start 开启 #restart 重启 永久性关闭防火墙chkconfig [...]]]></description>
			<content:encoded><![CDATA[<h3>症状：</h3>
<p>通过 yum install httpd mod_ssl 安装apache以及https模块之后，<br />
/etc/init.d/httpd start  成功启动了Apache<br />
但是局域网的另外一台机器却无法显示其页面。</p>
<h3>诊断：</h3>
<p>1、<br />
netstat -l 看到 80 端口正在被监听。<br />
2、<br />
接着使用 curl http://127.0.0.1 可以得到页面源码。且不说默认的Apache配置如何，至少能说明服务已经跑起来了。<br />
但是在局域网另外一台机器却无法打开页面。<br />
3、<br />
我使用SSH连到CentOS操作的，说明之间的链路是没问题的。</p>
<p>随之想到的就是防火墙，记得有个iptables，立刻上网找到了解决方案。<br />
这里需要注意的就是，添加那句规则时，一定要放在拒绝规则的上面，和22端口的规则挨在一起就没错了。</p>
<h3><span id="more-2102"></span>解决方法：</h3>
<p>通过/etc/init.d/iptables status命令查询是否有打开80端口，如果没有可通过两种方式处理：</p>
<p>1.修改vi /etc/sysconfig/iptables命令添加使防火墙开放80端口<br />
-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 80 -j ACCEPT</p>
<p>2.关闭防火墙<br />
/etc/init.d/iptables stop<br />
#start 开启<br />
#restart 重启</p>
<p>永久性关闭防火墙chkconfig &#8211;level 35 iptables off</p>
<h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/03/21andy-centos-repo/" title="分享21Andy的CentOS的repo">分享21Andy的CentOS的repo</a></li><li><a href="http://slj.me/2010/12/centos-php5-2-yum/" title="CentOS 用 yum 官方源安裝 PHP5.2.x">CentOS 用 yum 官方源安裝 PHP5.2.x</a></li><li><a href="http://slj.me/2010/12/php-memcached-permission-denied/" title="PHP无法操作memcached提示Permission denied的解决方法">PHP无法操作memcached提示Permission denied的解决方法</a></li><li><a href="http://slj.me/2010/12/install-memcache-on-centos/" title="安装memcache到CentOS（另附yum法）">安装memcache到CentOS（另附yum法）</a></li><li><a href="http://slj.me/2009/12/ssh-restart-apache/" title="用SSH重启Apache">用SSH重启Apache</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2010/12/centos-apache-firewall-settings/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用SSH重启Apache</title>
		<link>http://slj.me/2009/12/ssh-restart-apache/</link>
		<comments>http://slj.me/2009/12/ssh-restart-apache/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 11:09:14 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[Apache/Nginx]]></category>

		<guid isPermaLink="false">http://kiya.cn/?p=1350</guid>
		<description><![CDATA[最近，Bryan雇我把我的作品Yourcaddy.com开发成产品，可以带license的出售。作品完成之后Bryan开卖，地址在http://www.yelpclone.com。购买的人我这里看上去还可以，不能算少。于是有一个客户需要协助安装服务。于是我便去他的独立服务器上捣鼓了一下。我看着他的域名觉得无比兴奋！ GEV.com 可谓价值连城！客户给的是一个FTP+SSH账户。下面就说一说在Windows下利用SSH来远程服务器重启Apache。 首先工具用的是 SSH Secure Shell 介绍几个Linux命令。 wherei1s 能找到你要找的东东在哪。 比如： [root@s1 ~]# whereis httpd httpd: /usr/sbin/httpd.worker /usr/sbin/httpd /usr/sbin/httpd.event /etc/httpd /usr/lib/httpd /usr/include/httpd /usr/share/man/man8/httpd.8.gz 找到httpd进程程序之所在 ps -ef&#124;grep httpd 找到apachectl whereis apachectl 重启apache /usr/sbin/apachectl restart 检测conf文件有没有错 /usr/sbin/apachectl -t 对服务的操作：  [root@s1 ~]# whereis service service: /sbin/service /usr/share/man/man8/service.8.gz 或重启httpd服务 /sbin/service httpd restart （以上路径根据安装时的路径而定） Related Posts / 相关文章CentOS 安装 Apache 后其他机器无法访问的解决方法好书推荐-《PHP与MySQL程序设计（第3版）》Apache [...]]]></description>
			<content:encoded><![CDATA[<p>最近，Bryan雇我把我的作品Yourcaddy.com开发成产品，可以带license的出售。作品完成之后Bryan开卖，地址在<a href="http://www.yelpclone.com" target="_blank">http://www.yelpclone.com</a>。购买的人我这里看上去还可以，不能算少。于是有一个客户需要协助安装服务。于是我便去他的独立服务器上捣鼓了一下。我看着他的域名觉得无比兴奋！ GEV.com 可谓价值连城！客户给的是一个FTP+SSH账户。下面就说一说在Windows下利用SSH来远程服务器重启Apache。</p>
<p><span id="more-1350"></span>首先工具用的是 SSH Secure Shell</p>
<p>介绍几个Linux命令。</p>
<p>wherei1s 能找到你要找的东东在哪。 比如：<br />
[root@s1 ~]# whereis httpd<br />
httpd: /usr/sbin/httpd.worker /usr/sbin/httpd /usr/sbin/httpd.event /etc/httpd<br />
/usr/lib/httpd /usr/include/httpd /usr/share/man/man8/httpd.8.gz</p>
<p>找到httpd进程程序之所在<br />
ps -ef|grep httpd</p>
<p>找到apachectl<br />
whereis apachectl</p>
<p>重启apache<br />
/usr/sbin/apachectl restart</p>
<p>检测conf文件有没有错<br />
/usr/sbin/apachectl -t</p>
<p>对服务的操作：<br />
 [root@s1 ~]# whereis service<br />
service: /sbin/service /usr/share/man/man8/service.8.gz</p>
<p>或重启httpd服务<br />
/sbin/service httpd restart</p>
<p>（以上路径根据安装时的路径而定）</p>
<h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2010/12/centos-apache-firewall-settings/" title="CentOS 安装 Apache 后其他机器无法访问的解决方法">CentOS 安装 Apache 后其他机器无法访问的解决方法</a></li><li><a href="http://slj.me/2009/05/book-beginingphpandmysql/" title="好书推荐-《PHP与MySQL程序设计（第3版）》">好书推荐-《PHP与MySQL程序设计（第3版）》</a></li><li><a href="http://slj.me/2009/04/apache-rewrite-regular/" title="Apache Rewrite 规则详解">Apache Rewrite 规则详解</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2009/12/ssh-restart-apache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>好书推荐-《PHP与MySQL程序设计（第3版）》</title>
		<link>http://slj.me/2009/05/book-beginingphpandmysql/</link>
		<comments>http://slj.me/2009/05/book-beginingphpandmysql/#comments</comments>
		<pubDate>Sat, 02 May 2009 15:02:32 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[Apache/Nginx]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[好书]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[程序设计]]></category>
		<category><![CDATA[第3版]]></category>

		<guid isPermaLink="false">http://kiya.cn/?p=390</guid>
		<description><![CDATA[     上了大学，在图书馆看了很多的书，各个方面从UI一直到PHP，自我感觉比较好的书不多，特别是UI方面的书，好的书很少。身边有的学习HTML的同学，我把他们借的书翻开目录一看就帮他们删章节，因为有的章节看了也没用，比如“如何用表格布局网页”，这已经是淘汰的技术了，只能稍微了解了解，不能养成习惯。      我认为，一本介绍计算机技术的书，应该以实用为主，全面为辅。例如，有些HTML书介绍标签介绍的非常全面（恰恰没有HTML5中的canvas这一类重要标签），然而我们平时的使用几乎用不到那些“全面的”标签（比如&#60;font&#62;之类被淘汰的标签等），而重要的部分如“不同浏览器的hack”这一基本的内容却没有介绍到。      其实好的书还是有的，我认为图灵以及人民邮电出版社的部分图书我最喜欢，      我会相继在我博客贴上我所看过的好书，敬请关注。 《PHP与MySQL程序设计（第3版）》        先说说这本书，PHP方面的基础类图书，我最喜欢的是这本，虽然厚了一点，但是说的非常全面，也很实用，特别是“高级OOP面向对象编程”以及后面的 Smarty、MVC的部分都很 up-to-date，我认为这本书作为PHP起步来说很值得读，后几章介绍数据库的内容也很好。        喜欢的同学可以去网上买，或者图书馆也能借得到（有一本目前还在我的^_^）         下面是转载来的图书信息。 【内容简介】         PHP语言和 MySQL 数据库这两种开源技术已经成为开发Web应用的最佳组合。Web 2.0为它们提供了更广阔的天地。 　　本书全面介绍PHP脚本语言和MySQL数据库这两种目前最流行的开源软件，主要内容包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、触发器和视图等。本书实用性强，帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践，了解如何结合这些卓越的技术创建数据库驱动的动态Web应用程序。 　　本书适合于Web开发的新手阅读，也适合作为各层次PHP和MySQL开发人员的参考书。        本书是久负盛名的经典著作，以内容全面、讲解翔实而著称。书中对主题的选取和组织从实用出发，在讲述知识之外还加入了作者多年积累的宝贵实战经验，并提供了500多个可以直接用于实际项目的代码示例，充分体现了作者深厚的开发功力。这一版不仅对原有章节进行了全面的修订、更新和改进，还加入了PHP 6和MySQL最新版本中的新特性，包括如何利用国际化和本地化开源工具创建面向全世界的Web网站，开发强大Web应用的利器MVC模式与Zend框架。.. 作者为本书专门开设了配套网站http://www.beginningphpandmysql.com，也可以通过Twitter（http://twitter.com/begphpandmysql）了解更多信息。&#8230; 【作译者介绍】 本书提供作译者介绍 W. Jason Gilmore，世界知名的软件技术专家，CodeMash技术大会创始人之一，MySQL全球技术大会顾问委员会成员。他曾负责Apress出版公司开源图书出版项目，开发了大量PHP和MySQL应用程序，并在各大专业媒体发表了众多有影响的技术文章。他的个人网站是http://www.wjgilmore.com。&#8230; 【前言】 最好的编程图书应该不是纯粹地讲述理论，而是要切合实际。虽然我没有幻想自己会成为当代最伟大的技术作家，但在写书过程中，我一直都以此为目标，努力让所写的内容能用到实处。以本书的篇幅来看，很明显，我在竭尽所能地提供这种实用性。也就是说，如果你希望获得PHP编程语言和MySQL数据库服务器的实践经验，对它们有全面的了解，并且想知道如何结合这些卓越的技术创建数据库驱动的动态Web应用程序，那么本书正合你所需。. 各个PHP和MySQL社区的狂热工作促使了本书新版本的诞生，它较之前的版本有了很大的变化。本版不但加入了PHP 6和最新的MySQL版本中出现的新特性，还另外增加了两章全新的内容。 【目录信息】 第1章　PHP概述　1 1.1　历史　1 1.1.1　PHP 4　2 1.1.2　PHP 5　3 1.2　PHP的一般特性　3 1.2.1　实用性　3 1.2.2　强大功能　4 1.2.3　可选择性　4 1.2.4　成本　5 1.3　小结　5 第2章　安装配置Apache和PHP　6 2.1　安装　6 2.1.1　获得发行包　6 2.1.2　安装过程　7 2.1.3　测试安装　11 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000080;">     上了大学，在图书馆看了很多的书，各个方面从UI一直到PHP，自我感觉比较好的书不多，特别是UI方面的书，好的书很少。身边有的学习HTML的同学，我把他们借的书翻开目录一看就帮他们删章节，因为有的章节看了也没用，比如“如何用表格布局网页”，这已经是淘汰的技术了，只能稍微了解了解，不能养成习惯。<br />
     我认为，一本介绍计算机技术的书，<span style="text-decoration: underline;">应该以实用为主，全面为辅</span>。例如，有些HTML书介绍标签介绍的非常全面（恰恰没有HTML5中的canvas这一类重要标签），然而我们平时的使用几乎用不到那些“全面的”标签（比如&lt;font&gt;之类被淘汰的标签等），而重要的部分如“不同浏览器的hack”这一基本的内容却没有介绍到。<br />
</span><span style="color: #000080;">     其实好的书还是有的，我认为图灵以及人民邮电出版社的部分图书我最喜欢，<br />
<span style="color: #000080;">     </span>我会相继在我博客贴上我所看过的好书，敬请关注。</span></p>
<h3 style="text-align: center;"><span style="color: #900;">《PHP与MySQL程序设计（第3版）》</span></h3>
<p><span style="color: #800000;">       先说说这本书，PHP方面的基础类图书，我最喜欢的是这本，虽然厚了一点，但是说的非常全面，也很实用，特别是“高级OOP面向对象编程”以及后面的 Smarty、MVC的部分都很 up-to-date，我认为这本书作为PHP起步来说很值得读，后几章介绍数据库的内容也很好。<br />
       喜欢的同学可以去网上买，或者图书馆也能借得到（有一本目前还在我的^_^）<br />
        </span><span style="color: #800000;">下面是转载来的图书信息。<br />
</span><br />
<img class="alignnone size-full wp-image-391" style="float:left; margin:20px;" title="book-phpmysql" src="http://kiya.cn/wp-content/uploads/2009/05/1_2009042918061218iua.jpg" alt="book-phpmysql" width="142" height="184" /></p>
<p><strong>【内容简介】</strong><br />
        PHP语言和 MySQL 数据库这两种开源技术已经成为开发Web应用的最佳组合。Web 2.0为它们提供了更广阔的天地。<br />
<span id="ctl00_ContentPlaceHolder1_DetailsView1_DESCRIPTIONLabel">　　本书全面介绍PHP脚本语言和MySQL数据库这两种目前最流行的开源软件，主要内容包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、触发器和视图等。本书实用性强，帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践，了解如何结合这些卓越的技术创建数据库驱动的动态Web应用程序。<br />
　　本书适合于Web开发的新手阅读，也适合作为各层次PHP和MySQL开发人员的参考书。</span> <br />
     <span id="more-390"></span> 本书是久负盛名的经典著作，以内容全面、讲解翔实而著称。书中对主题的选取和组织从实用出发，在讲述知识之外还加入了作者多年积累的宝贵实战经验，并提供了500多个可以直接用于实际项目的代码示例，充分体现了作者深厚的开发功力。这一版不仅对原有章节进行了全面的修订、更新和改进，还加入了PHP 6和MySQL最新版本中的新特性，包括如何利用国际化和本地化开源工具创建面向全世界的Web网站，开发强大Web应用的利器MVC模式与Zend框架。..</p>
<p>作者为本书专门开设了配套网站<a href="http://www.beginningphpandmysql.com/" target="_blank"><span style="color: #07519a;">http://www.beginningphpandmysql.com</span></a>，也可以通过Twitter（<a href="http://twitter.com/begphpandmysql" target="_blank"><span style="color: #07519a;">http://twitter.com/begphpandmysql</span></a>）了解更多信息。&#8230;</p>
<p><img class="alignnone size-full wp-image-415" style="float:right; margin:10px;" title="PHPandMYSQL" src="http://kiya.cn/wp-content/uploads/2009/05/1590598627.gif" alt="PHPandMYSQL" width="120" height="150" /><strong>【作译者介绍】</strong><br />
本书提供作译者介绍<br />
W. Jason Gilmore，世界知名的软件技术专家，CodeMash技术大会创始人之一，MySQL全球技术大会顾问委员会成员。他曾负责Apress出版公司开源图书出版项目，开发了大量PHP和MySQL应用程序，并在各大专业媒体发表了众多有影响的技术文章。他的个人网站是<a href="http://www.wjgilmore.com/" target="_blank"><span style="color: #07519a;">http://www.wjgilmore.com</span></a>。&#8230;</p>
<p><strong>【前言】</strong><br />
最好的编程图书应该不是纯粹地讲述理论，而是要切合实际。虽然我没有幻想自己会成为当代最伟大的技术作家，但在写书过程中，我一直都以此为目标，努力让所写的内容能用到实处。以本书的篇幅来看，很明显，我在竭尽所能地提供这种实用性。也就是说，如果你希望获得PHP编程语言和MySQL数据库服务器的实践经验，对它们有全面的了解，并且想知道如何结合这些卓越的技术创建数据库驱动的动态Web应用程序，那么本书正合你所需。.<br />
各个PHP和MySQL社区的狂热工作促使了本书新版本的诞生，它较之前的版本有了很大的变化。本版不但加入了PHP 6和最新的MySQL版本中出现的新特性，还另外增加了两章全新的内容。</p>
<p><strong>【目录信息】</strong></p>
<blockquote><p>第1章　PHP概述　1<br />
1.1　历史　1<br />
1.1.1　PHP 4　2<br />
1.1.2　PHP 5　3<br />
1.2　PHP的一般特性　3<br />
1.2.1　实用性　3<br />
1.2.2　强大功能　4<br />
1.2.3　可选择性　4<br />
1.2.4　成本　5<br />
1.3　小结　5</p>
<p>第2章　安装配置Apache和PHP　6<br />
2.1　安装　6<br />
2.1.1　获得发行包　6<br />
2.1.2　安装过程　7<br />
2.1.3　测试安装　11<br />
2.1.4　定制UNIX构建　12<br />
2.1.5　定制Windows构建　12<br />
2.1.6　常见错误　13<br />
2.1.7　查看并下载文档　13<br />
2.2　配置　13<br />
2.2.1　管理PHP的配置指令　14<br />
2.2.2　PHP的配置指令　15<br />
2.3　小结　29</p>
<p>第3章　PHP基础　30<br />
3.1　界定PHP代码　30<br />
3.1.1　默认语法　30<br />
3.1.2　短标记　31<br />
3.1.3　脚本　31<br />
3.1.4　ASP风格　32<br />
3.1.5　嵌入多个代码块　32<br />
3.2　注释　32<br />
3.2.1　单行C++语法　32<br />
3.2.2　Shell语法　32<br />
3.2.3　多行C语法　33<br />
3.3　输出　33<br />
3.3.1　print()　33<br />
3.3.2　echo()　34<br />
3.3.3　printf()　34<br />
3.3.4　sprintf()　35<br />
3.4　数据类型　35<br />
3.4.1　标量数据类型　35<br />
3.4.2　复合数据类型　37<br />
3.4.3　特殊数据类型　38<br />
3.4.4　类型强制转换　38<br />
3.4.5　类型自动转换　39<br />
3.4.6　与类型有关的函数　40<br />
3.4.7　类型标识符函数　40<br />
3.5　标识符　41<br />
3.6　变量　41<br />
3.6.1　变量声明　42<br />
3.6.2　变量作用域　43<br />
3.6.3　PHP的超级全局变量　45<br />
3.6.4　变量的变量　48<br />
3.7　常量　49<br />
3.8　表达式　49<br />
3.8.1　操作数　50<br />
3.8.2　操作符　50<br />
3.9　字符串插入　54<br />
3.9.1　双引号　55<br />
3.9.2　单引号　55<br />
3.9.3　Heredoc　56<br />
3.10　控制结构　56<br />
3.10.1　执行控制语句　57<br />
3.10.2　条件语句　57<br />
3.10.3　循环语句　59<br />
3.10.4　文件包含语句　63<br />
3.10.5　require_once()　65<br />
3.11　小结　65</p>
<p>第4章　函数　66<br />
4.1　调用函数　66<br />
4.2　创建函数　66<br />
4.2.1　按值传递参数　67<br />
4.2.2　按引用传递参数　68<br />
4.2.3　默认参数值　68<br />
4.2.4　可选参数　68<br />
4.2.5　从函数返回值　69<br />
4.2.6　嵌套函数　70<br />
4.2.7　递归函数　70<br />
4.2.8　变量函数　72<br />
4.3　函数库　73<br />
4.4　小结　74</p>
<p>第5章　数组　75<br />
5.1　什么是数组　75<br />
5.2　输出数组　76<br />
5.3　创建数组　77<br />
5.4　测试数组　79<br />
5.5　增加和删除数组元素　79<br />
5.6　定位数组元素　81<br />
5.7　遍历数组　82<br />
5.8　确定数组大小和唯一性　85<br />
5.9　数组排序　86<br />
5.10　合并、拆分、接合和分解数组　91<br />
5.11　其他有用的数组函数　95<br />
5.12　小结　96</p>
<p>第6章　面向对象的PHP　97<br />
6.1　OOP的好处　97<br />
6.1.1　封装　97<br />
6.1.2　继承　98<br />
6.1.3　多态　98<br />
6.2　关键的OOP概念　99<br />
6.2.1　类　99<br />
6.2.2　对象　99<br />
6.2.3　字段　100<br />
6.2.4　属性　102<br />
6.2.5　常量　104<br />
6.2.6　方法　105<br />
6.3　类型提示　108<br />
6.4　构造函数和析构函数　108<br />
6.4.1　构造函数　108<br />
6.4.2　析构函数　110<br />
6.5　静态类成员　111<br />
6.6　instanceof关键字　112<br />
6.7　辅助函数　112<br />
6.8　自动加载对象　114<br />
6.9　小结　114</p>
<p>第7章　高级OOP特性　115<br />
7.1　PHP不支持的高级OOP特性　115<br />
7.2　对象克隆　116<br />
7.2.1　克隆示例　116<br />
7.2.2　__clone()方法　117<br />
7.3　继承　118<br />
7.3.1　类继承　118<br />
7.3.2　继承和构造函数　120<br />
7.4　接口　121<br />
7.4.1　实现一个接口　122<br />
7.4.2　实现多个接口　123<br />
7.5　抽象类　124<br />
7.6　反射　124<br />
7.6.1　编写ReflectionClass类　125<br />
7.6.2　编写ReflectionMethod类　127<br />
7.6.3　编写ReflectionParameter类　128<br />
7.6.4　编写ReflectionProperty类　129<br />
7.6.5　反射的其他用途　130<br />
7.7　小结　130</p>
<p>第8章　错误和异常处理　131<br />
8.1　配置指令　131<br />
8.2　错误日志　134<br />
8.3　异常处理　135<br />
8.3.1　为什么异常处理很方便　136<br />
8.3.2　PHP的异常处理实现　137<br />
8.4　小结　140</p>
<p>第9章　字符串和正则表达式　141<br />
9.1　复杂(大括号)偏移语法　141<br />
9.2　正则表达式　142<br />
9.2.1　正则表达式语法(POSIX)　142<br />
9.2.2　PHP的正则表达式函数(POSIX扩展)　144<br />
9.2.3　正则表达式语法(Perl风格)　146<br />
9.3　其他字符串函数　151<br />
9.3.1　确定字符串长度　152<br />
9.3.2　比较两个字符串　152<br />
9.3.3　处理字符串大小写　154<br />
9.3.4　字符串与HTML相互转换　155<br />
9.3.5　正则表达式函数的替代函数　159<br />
9.3.6　填充和剔除字符串　164<br />
9.3.7　字符和单词计数　165<br />
9.4　使用PEAR：Validate_US　167<br />
9.4.1　安装Validate_US　167<br />
9.4.2　使用Validate_US　168<br />
9.5　小结　168</p>
<p>第10章　处理文件和操作系统　169<br />
10.1　了解文件和目录　169<br />
10.1.1　解析目录路径　169<br />
10.1.2　文件类型和链接　171<br />
10.1.3　计算文件、目录和磁盘大小　173<br />
10.1.4　访问和修改时间　175<br />
10.2　文件所有权和权限　176<br />
10.3　文件I/O　178<br />
10.3.1　资源的概念　178<br />
10.3.2　换行　178<br />
10.3.3　文件末尾　178<br />
10.3.4　打开和关闭文件　179<br />
10.3.5　读取文件　180<br />
10.3.6　移动文件指针　184<br />
10.3.7　写入文件　184<br />
10.3.8　读取目录内容　185<br />
10.4　执行Shell命令　186<br />
10.5　系统级程序执行　187<br />
10.5.1　清理输入　187<br />
10.5.2　PHP的程序执行函数　188<br />
10.6　小结　190</p>
<p>第11章　PEAR　191<br />
11.1　流行的PEAR包　191<br />
11.2　安装和更新PEAR　193<br />
11.2.1　安装PEAR　193<br />
11.2.2　PEAR和ISP公司　194<br />
11.2.3　更新PEAR　194<br />
11.3　使用PEAR包管理器　194<br />
11.3.1　查看安装的包　195<br />
11.3.2　了解安装包的更多信息　195<br />
11.3.3　安装PEAR包　196<br />
11.3.4　使用PEAR包　197<br />
11.3.5　升级PEAR包　198<br />
11.3.6　卸载PEAR包　198<br />
11.3.7　降级PEAR包　199<br />
11.4　小结　199</p>
<p>第12章　日期和时间　200<br />
12.1　UNIX时间戳　200<br />
12.2　PHP的日期和时间库　200<br />
12.3　日期函数　206<br />
12.3.1　显示本地化的日期和时间　206<br />
12.3.2　显示网页的最新修改日期　209<br />
12.3.3　确定当前月份中的天数　209<br />
12.3.4　计算当前日期后X天的日期　209<br />
12.3.5　创建日历　210<br />
12.4　PHP 5.1　213<br />
12.4.1　Date基础　213<br />
12.4.2　Date构造函数　213<br />
12.4.3　访问方法和修改方法　214<br />
12.4.4　验证函数　216<br />
12.4.5　处理方法　216<br />
12.5　小结　222</p>
<p>第13章　表单和导航提示　223<br />
13.1　PHP和Web表单　223<br />
13.1.1　简单示例　224<br />
13.1.2　向函数传递表单数据　225<br />
13.1.3　处理多值表单组件　226<br />
13.1.4　用PHP生成表单　227<br />
13.1.5　自动选择表单数据　228<br />
13.1.6　PHP、Web表单和JavaScript　229<br />
13.2　导航提示　231<br />
13.2.1　用户友好的URL　231<br />
13.2.2　“面包屑型”轨迹　233<br />
13.2.3　创建定制错误处理函数　237<br />
13.3　小结　238</p>
<p>第14章　身份认证　239<br />
14.1　HTTP认证概念　239<br />
14.2　PHP认证　240<br />
14.2.1　认证变量　240<br />
14.2.2　认证方法　241<br />
14.3　用户登录管理　248<br />
14.3.1　密码指派　248<br />
14.3.2　使用CrackLib库测试密码易猜性　250<br />
14.3.3　一次性URL和密码恢复　251</p>
<p>第15章　处理文件上传　254<br />
15.1　通过HTTP协议上传文件　254<br />
15.2　通过PHP处理上传　255<br />
15.2.1　PHP的文件上传/资源指令　255<br />
15.2.2　$_FILES数组　256<br />
15.2.3　PHP的文件上传函数　256<br />
15.2.4　上传错误消息　258<br />
15.2.5　文件上传示例　258<br />
15.3　利用PEAR：HTTP_Upload　261<br />
15.3.1　安装HTTP_Upload　261<br />
15.3.2　了解关于上传文件的更多信息　262<br />
15.3.3　将上传的文件移动到最终目标　263<br />
15.3.4　上传多个文件　263<br />
15.4　小结　264</p>
<p>第16章　网络　265<br />
16.1　DNS、服务器和服务　265<br />
16.1.1　DNS　265<br />
16.1.2　服务　268<br />
16.1.3　建立套接字连接　269<br />
16.2　邮件　271<br />
16.2.1　配置指令　271<br />
16.2.2　发送纯文本电子邮件　272<br />
16.2.3　使用额外的信息首部发送电子邮件　272<br />
16.2.4　将电子邮件发送给多个接收者　273<br />
16.2.5　发送HTML格式的电子邮件　273<br />
16.2.6　发送附件　274<br />
16.3　IMAP、POP3和NNTP　275<br />
16.3.1　需求　276<br />
16.3.2　建立和关闭连接　276<br />
16.3.3　了解更多关于邮箱和邮件的信息　277<br />
16.3.4　获取邮件　280<br />
16.3.5　写邮件　286<br />
16.3.6　发送邮件　286<br />
16.3.7　邮箱管理　287<br />
16.3.8　邮件管理　288<br />
16.4　流　288<br />
16.4.1　流包装器和上下文　289<br />
16.4.2　流过滤器　290<br />
16.5　常见网络任务　291<br />
16.5.1　连接一台服务器　291<br />
16.5.2　端口扫描器　292<br />
16.5.3　子网转换器　293<br />
16.5.4　测试用户带宽　294<br />
16.6　小结　295</p>
<p>第17章　PHP和LDAP　296<br />
17.1　LDAP介绍　297<br />
17.2　在PHP中使用LDAP　297<br />
17.2.1　连接到LDAP服务器　297<br />
17.2.2　绑定到LDAP服务器　298<br />
17.2.3　关闭LDAP服务器连接　299<br />
17.2.4　获取LDAP数据　299<br />
17.2.5　处理项值　301<br />
17.2.6　统计所获取的项　302<br />
17.2.7　获取属性　302<br />
17.2.8　排序和比较LDAP项　305<br />
17.2.9　处理项　306<br />
17.2.10　回收内存　308<br />
17.2.11　插入LDAP数据　309<br />
17.2.12　更新LDAP数据　309<br />
17.2.13　删除LDAP数据　310<br />
17.2.14　配置函数　311<br />
17.2.15　字符编码　312<br />
17.2.16　处理区分名　312<br />
17.2.17　错误处理　313<br />
17.3　小结　314</p>
<p>第18章　会话处理器　315<br />
18.1　什么是会话处理　315<br />
18.1.1　cookie　315<br />
18.1.2　URL重写　316<br />
18.1.3　会话处理过程　316<br />
18.2　配置指令　317<br />
18.3　关键概念　320<br />
18.3.1　开始会话　320<br />
18.3.2　销毁会话　321<br />
18.3.3　获取和设置会话ID　321<br />
18.3.4　创建和删除会话变量　321<br />
18.3.5　编码和解码会话数据　322<br />
18.4　实际的会话处理示例　324<br />
18.4.1　自动登录　324<br />
18.4.2　最近浏览的文档索引　325<br />
18.5　创建定制会话处理器　327<br />
18.5.1　将定制会话函数加入到PHP逻辑　327<br />
18.5.2　基于MySQL的定制会话处理器　328<br />
18.6　小结　330</p>
<p>第19章　用Smarty模板化　331<br />
19.1　什么是模板化引擎　331<br />
19.2　Smarty介绍　333<br />
19.3　安装Smarty　333<br />
19.4　使用Smarty　334<br />
19.5　Smarty的表现逻辑　336<br />
19.5.1　注释　336<br />
19.5.2　变量修饰符　336<br />
19.5.3　控制结构　339<br />
19.5.4　语句　342<br />
19.6　创建配置文件　344<br />
19.6.1　config_load　345<br />
19.6.2　引用配置变量　345<br />
19.7　结合Smarty使用CSS　346<br />
19.8　缓存　347<br />
19.8.1　处理缓存生命期　347<br />
19.8.2　通过is_cached()消除处理开销　348<br />
19.8.3　为每个模板创建多个缓存　348<br />
19.8.4　关于缓存的结束语　349<br />
19.9　小结　350</p>
<p>第20章　Web服务　351<br />
20.1　为什么使用Web服务　352<br />
20.2　真正简单聚合　353<br />
20.2.1　RSS语法　355<br />
20.2.2　MagpieRSS　356<br />
20.3　SimpleXML　361<br />
20.3.1　SimpleXML函数　362<br />
20.3.2　SimpleXML方法　363<br />
20.4　SOAP　365<br />
20.4.1　NuSOAP　366<br />
20.4.2　PHP 5的SOAP扩展　374<br />
20.5　使用PHP Web服务和C#客户　381<br />
20.6　小结　383</p>
<p>第21章　安全PHP编程　384<br />
21.1　安全地配置PHP　384<br />
21.1.1　安全模式　385<br />
21.1.2　其他与安全有关的配置参数　386<br />
21.2　隐藏配置细节　388<br />
21.3　隐藏敏感数据　389<br />
21.3.1　注意文档根目录　390<br />
21.3.2　拒绝访问某些文件扩展名　390<br />
21.4　清理用户数据　390<br />
21.4.1　文件删除　390<br />
21.4.2　跨网站脚本　391<br />
21.4.3　清理用户输入：解决方案　392<br />
21.5　数据加密　394<br />
21.5.1　PHP的加密函数　394<br />
21.5.2　mhash　395<br />
21.5.3　MCrypt　396<br />
21.6　小结　397</p>
<p>第22章　SQLite　398<br />
22.1　SQLite介绍　398<br />
22.1.1　安装SQLite　398<br />
22.1.2　使用SQLite命令行界面　399<br />
22.2　PHP的SQLite库　400<br />
22.2.1　SQLite指令　400<br />
22.2.2　打开连接　400<br />
22.2.3　在内存中创建表　401<br />
22.2.4　关闭连接　401<br />
22.2.5　查询数据库　402<br />
22.2.6　解析结果集　403<br />
22.2.7　获取结果集细节　405<br />
22.2.8　操作结果集指针　406<br />
22.2.9　了解表模式的更多信息　408<br />
22.2.10　操作二进制数据　408<br />
22.2.11　创建和覆盖SQLite函数　409<br />
22.2.12　创建聚集函数　410<br />
22.3　小结　411</p>
<p>第23章　PDO介绍　412<br />
23.1　为什么还要另一种数据库抽象层　413<br />
23.2　使用PDO　413<br />
23.2.1　安装PDO　414<br />
23.2.2　PDO的数据库支持　414<br />
23.2.3　连接到数据库服务器并选择数据库　415<br />
23.2.4　存取属性　416<br />
23.2.5　错误处理　417<br />
23.2.6　查询执行　417<br />
23.2.7　准备语句　418<br />
23.2.8　获取数据　421<br />
23.2.9　设置绑定列　423<br />
23.2.10　事务　424<br />
23.3　小结　425</p>
<p>第24章　MySQL介绍　426<br />
24.1　MySQL为什么如此流行　426<br />
24.1.1　灵活性　426<br />
24.1.2　强大功能　427<br />
24.1.3　灵活的许可选择　428<br />
24.1.4　超级活跃的用户群体　429<br />
24.2　MySQL 4　429<br />
24.3　MySQL 5　430<br />
24.4　著名的MySQL用户　430<br />
24.4.1　craigslist　430<br />
24.4.2　雅虎财经　431<br />
24.4.3　维基百科　431<br />
24.5　小结　431</p>
<p>第25章　安装和配置MySQL　432<br />
25.1　PHP和MySQL许可问题　432<br />
25.1.1　Linux　433<br />
25.1.2　Windows　433<br />
25.2　下载MySQL　433<br />
25.3　安装MySQL　434<br />
25.3.1　Linux　434<br />
25.3.2　Windows　437<br />
25.4　设置MySQL管理员密码　439<br />
25.5　启动和停止MySQL　439<br />
25.5.1　手工控制守护进程　439<br />
25.5.2　自动启动和停止MySQL　441<br />
25.6　配置和优化MySQL　442<br />
25.6.1　mysqld_safe　443<br />
25.6.2　配置和优化参数　443<br />
25.6.3　my.cnf文件　446<br />
25.7　小结　448</p>
<p>第26章　众多MySQL客户端　449<br />
26.1　标准客户端选项　449<br />
26.2　连接选项　450<br />
26.3　一般选项　450<br />
26.4　mysql　451<br />
26.4.1　关键mysql选项　451<br />
26.4.2　以交互模式使用mysql　452<br />
26.4.3　查看配置变量和系统状态　454<br />
26.4.4　以批处理模式使用mysql　455<br />
26.4.5　有用的mysql提示　456<br />
26.5　mysqladmin　458<br />
26.6　其他实用工具　459<br />
26.6.1　mysqldump　459<br />
26.6.2　mysqlshow　459<br />
26.6.3　mysqlhotcopy　460<br />
26.6.4　mysqlimport　460<br />
26.6.5　myisamchk　461<br />
26.6.6　mysqlcheck　461<br />
26.7　第三方客户端程序　462<br />
26.7.1　MySQL管理器　462<br />
26.7.2　phpMyAdmin　463<br />
26.7.3　MySQL查询浏览器　464<br />
26.7.4　Navicat　465<br />
26.8　小结　466</p>
<p>第27章　MySQL存储引擎和数据类型　467<br />
27.1　存储引擎　467<br />
27.1.1　InnoDB　468<br />
27.1.2　MyISAM　468<br />
27.1.3　MEMORY　470<br />
27.1.4　MERGE　471<br />
27.1.5　BDB　471<br />
27.1.6　FEDERATED　471<br />
27.1.7　ARCHIVE　472<br />
27.1.8　CSV　473<br />
27.1.9　EXAMPLE　473<br />
27.1.10　BLACKHOLE　473<br />
27.1.11　存储引擎FAQ　473<br />
27.2　数据类型和属性　475<br />
27.2.1　数据类型　475<br />
27.2.2　数据类型属性　479<br />
27.3　操作数据库和表　481<br />
27.3.1　操作数据库　481<br />
27.3.2　操作表　483<br />
27.3.3　修改表结构　485<br />
27.3.4　INFORMATION_SCHEMA　485<br />
27.4　小结　487</p>
<p>第28章　保护MySQL的安全　488<br />
28.1　首先应当做什么　488<br />
28.2　保护mysqld守护进程　489<br />
28.3　MySQL访问权限系统　489<br />
28.3.1　权限系统的工作方式　490<br />
28.3.2　访问信息存储在哪里　491<br />
28.4　用户和权限管理　498<br />
28.4.1　CREATE USER　498<br />
28.4.2　DROP USER　499<br />
28.4.3　RENAME USER　499<br />
28.4.4　GRANT和REVOKE命令　499<br />
28.4.5　查看权限　503<br />
28.5　限制用户资源　503<br />
28.6　保护MySQL连接　504<br />
28.6.1　授权选项　504<br />
28.6.2　SSL选项　505<br />
28.6.3　启动启用SSL的MySQL服务器　506<br />
28.6.4　使用启用SSL的客户端进行连接　506<br />
28.6.5　在my.cnf文件中存储SSL选项　506<br />
28.7　小结　507</p>
<p>第29章　PHP的MySQL扩展　508<br />
29.1　预备工作　508<br />
29.1.1　在Linux中启用MySQL扩展　508<br />
29.1.2　在Windows中启用MySQL扩展　508<br />
29.1.3　用户权限　509<br />
29.1.4　示例数据　509<br />
29.2　PHP的MySQL命令　509<br />
29.2.1　建立和关闭连接　509<br />
29.2.2　在单独的文件中存储连接信息　511<br />
29.2.3　保护连接信息　511<br />
29.3　选择数据库　512<br />
29.4　查询MySQL　512<br />
29.5　获取和显示数据　513<br />
29.6　插入数据　516<br />
29.7　修改数据　517<br />
29.8　删除数据　519<br />
29.9　所选择的记录和受影响的记录　520<br />
29.10　获取数据库和表的信息　521<br />
29.11　获取字段信息　523<br />
29.11.1　查看表属性　526<br />
29.11.2　获取错误信息　527<br />
29.12　辅助函数　528<br />
29.13　小结　530</p>
<p>第30章　PHP的mysqli扩展　531<br />
30.1　预备工作　532<br />
30.1.1　在UNIX中启用mysqli扩展　532<br />
30.1.2　在Windows中启用mysqli扩展　532<br />
30.1.3　示例数据　532<br />
30.2　使用mysqli扩展　532<br />
30.2.1　连接MySQL服务器　532<br />
30.2.2　连接错误报告　533<br />
30.2.3　选择一个MySQL数据库　535<br />
30.2.4　关闭MySQL连接　536<br />
30.3　查询　536<br />
30.3.1　查询执行　536<br />
30.3.2　回收查询内存　537<br />
30.3.3　准备结果集　538<br />
30.3.4　解析结果　539<br />
30.3.5　多个查询　542<br />
30.3.6　准备语句　543<br />
30.4　数据库事务　548<br />
30.5　小结　549</p>
<p>第31章　存储例程　550<br />
31.1　应当使用存储例程吗　550<br />
31.1.1　存储例程的优点　550<br />
31.1.2　存储例程的缺点　551<br />
31.2　MySQL如何实现存储例程　551<br />
31.2.1　存储例程权限表　551<br />
31.2.2　创建存储例程　553<br />
31.2.3　声明和设置变量　554<br />
31.2.4　执行存储例程　555<br />
31.2.5　多语句存储例程　556<br />
31.2.6　从另一个例程中调用例程　562<br />
31.2.7　修改存储例程　563<br />
31.2.8　删除存储例程　563<br />
31.2.9　查看例程状态　563<br />
31.2.10　查看例程的创建语法　564<br />
31.2.11　条件和处理器　564<br />
31.3　将例程集成到Web应用程序　565<br />
31.3.1　创建员工奖金界面　565<br />
31.3.2　获取多条记录　566<br />
31.4　小结　566</p>
<p>第32章　MySQL触发器　567<br />
32.1　介绍触发器　567<br />
32.1.1　为什么使用触发器　567<br />
32.1.2　在事件前采取行动　568<br />
32.1.3　在事件后采取行动　568<br />
32.1.4　前触发器和后触发器　569<br />
32.2　MySQL对触发器的支持　569<br />
32.2.1　创建触发器　570<br />
32.2.2　查看现有的触发器　571<br />
32.2.3　修改触发器　572<br />
32.2.4　删除触发器　572<br />
32.2.5　级联触发器　573<br />
32.3　将触发器集成到Web应用程序　574<br />
32.4　小结　575</p>
<p>第33章　视图　576<br />
33.1　视图概述　576<br />
33.2　MySQL对视图的支持　577<br />
33.2.1　创建和执行视图　577<br />
33.2.2　查看视图信息　581<br />
33.2.3　修改视图　582<br />
33.2.4　删除视图　583<br />
33.2.5　更新视图　583<br />
33.3　将视图结合到Web应用程序中　583<br />
33.4　小结　585</p>
<p>第34章　实用数据库查询　586<br />
34.1　示例数据　586<br />
34.2　用PEAR创建表格输出　587<br />
34.2.1　安装HTML_Table　587<br />
34.2.2　创建一个简单表　587<br />
34.2.3　创建更可读的行输出　589<br />
34.2.4　根据数据库数据创建表格　589<br />
34.2.5　一般化输出过程　591<br />
34.3　排序输出　593<br />
34.4　创建分页输出　594<br />
34.5　列出页码　597<br />
34.6　子查询　598<br />
34.6.1　用子查询完成比较　599<br />
34.6.2　用子查询确定存在性　599<br />
34.6.3　用子查询维护数据库　600<br />
34.6.4　在PHP中使用子查询　601<br />
34.7　游标　601<br />
34.7.1　游标基础　601<br />
34.7.2　创建游标　602<br />
34.7.3　打开游标　602<br />
34.7.4　使用游标　602<br />
34.7.5　关闭游标　603<br />
34.7.6　在PHP中使用游标　604<br />
34.8　小结　604</p>
<p>第35章　索引和搜索　605<br />
35.1　数据库索引　605<br />
35.1.1　主键索引　605<br />
35.1.2　唯一索引　606<br />
35.1.3　常规索引　607<br />
35.1.4　全文索引　608<br />
35.1.5　索引最佳实践　611<br />
35.2　基于表单的搜索　611<br />
35.2.1　执行简单搜索　612<br />
35.2.2　扩展搜索功能　613<br />
35.2.3　执行全文搜索　614<br />
35.3　小结　615</p>
<p>第36章　事务　616<br />
36.1　什么是事务　616<br />
36.2　MySQL的事务功能　616<br />
36.2.1　系统需求　617<br />
36.2.2　表创建　617<br />
36.2.3　InnoDB配置参数　618<br />
36.3　示例项目　619<br />
36.3.1　示例数据　620<br />
36.3.2　执行示例事务　620<br />
36.3.3　备份和恢复InnoDB表　622<br />
36.3.4　用法提示　622<br />
36.4　用PHP构建事务应用程序　622<br />
36.5　小结　624</p>
<p>第37章　导入和导出数据　625<br />
37.1　示例表　625<br />
37.2　获得合适的媒介　625<br />
37.3　导出数据　626<br />
37.4　导入数据　628<br />
37.4.1　利用LOAD DATA INFILE导入数据　628<br />
37.4.2　用mysqlimport导入　631<br />
37.4.3　用PHP加载表数据　633<br />
37.5　小结　634</p>
<p>索引(图灵网站下载)<br />
[singlepic id=11 w=320 h=240 float=center]<br />
<center>（我那本的近照，点击放大）</center>
</p></blockquote>
<p>参考：<br />
<a href="http://www.phpchina.com/html/05/n-34505.html" target="_blank">http://www.phpchina.com/html/05/n-34505.html</a><br />
<a href="http://www.ptpress.com.cn/Book.aspx?id=7882" target="_blank">http://www.ptpress.com.cn/Book.aspx?id=7882</a></p>
<h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/10/mysql-save-query-result-to-a-file/" title="MySQL 把查询结果保存到文件中的方法">MySQL 把查询结果保存到文件中的方法</a></li><li><a href="http://slj.me/2011/08/web-open-source-project/" title="疯狂的 Web 应用开源项目">疯狂的 Web 应用开源项目</a></li><li><a href="http://slj.me/2011/06/php-daemon-notice/" title="[转] 代替bash，书写 PHP daemon 后台程序">[转] 代替bash，书写 PHP daemon 后台程序</a></li><li><a href="http://slj.me/2011/04/xdebug-for-php/" title="Xdebug for php 一个实用的PHP调试扩展">Xdebug for php 一个实用的PHP调试扩展</a></li><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2009/05/book-beginingphpandmysql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Apache Rewrite 规则详解</title>
		<link>http://slj.me/2009/04/apache-rewrite-regular/</link>
		<comments>http://slj.me/2009/04/apache-rewrite-regular/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 07:17:15 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[Apache/Nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[http.conf]]></category>
		<category><![CDATA[regular]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[RewriteCond]]></category>
		<category><![CDATA[RewriteEngine]]></category>
		<category><![CDATA[RewriteRule]]></category>

		<guid isPermaLink="false">http://kiya.cn/?p=211</guid>
		<description><![CDATA[在开篇之前： 我想说这篇文章其实是我刚刚接触Rewrite的时候学习的文档，应属转载，但是在这里我不想写明原地址，原因是文章中大多数给出的配置命令经实验都是错误的。需要原文的可以在谷歌上搜索一下&#8221;Apache Rewrite 规则详解&#8221; 好在我对正则表达式有所了解，把原文的代码都通过自己的理解改写了一下，并都能够达到题设的要求，并联想需求添加了例子。 本文是经过我实验后修改有效的，如果还是出现500错误请去掉 # 及后面的注释（也许有些环境不支持中文注解），如果还是错误请在下面给我留言。 1、Rewrite规则简介： Rewirte主要的功能就是实现URL的跳转，它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块，必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块，别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。 基于服务器级的(httpd.conf)有两种方法，一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明，需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。 基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。 2、举例说明： 例一.下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.kiya.cn和70.40.213.183都跳转到主机前缀为http://www.kiya.cn，避免相同内容的网页有多个指向的域名，如http://kiya.cn。 NameVirtualHost 70.40.213.183:80 ServerAdmin slj@kiya.cn DocumentRoot &#8220;/web&#8221; ServerName kiya.cn RewriteEngine on #打开rewirte功能 RewriteCond %{HTTP_HOST} !^www.kiya.cn [NC] #声明Client请求的主机中前缀不是www.kiya.cn，其中 [NC] 的意思是忽略大小写 RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #声明Client请求的主机中前缀不是70.40.213.183，其中 [NC] 的意思是忽略大小写 RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空 RewriteRule ^(.*) http://www.kiya.cn/ [L] #含义是如果Client请求的主机中的前缀符合上述条件，则直接进行跳转到http://www.kiya.cn/,[L]意味着立即停止重写操作，并不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符，()括号的功能是把所有的字符做一个标记，以便于后面的应用.就是引用前面里的(.*)字符。 例二.将输入 en.sicasoft.com [...]]]></description>
			<content:encoded><![CDATA[<p><strong>在开篇之前：</strong><br />
我想说这篇文章其实是我刚刚接触Rewrite的时候学习的文档，应属转载，但是在这里我不想写明原地址，原因是文章中大多数给出的配置命令经实验都是错误的。需要原文的可以在谷歌上搜索一下&#8221;Apache Rewrite 规则详解&#8221;<br />
好在我对正则表达式有所了解，把原文的代码都通过自己的理解改写了一下，并都能够达到题设的要求，并联想需求添加了例子。<br />
本文是经过我实验后修改有效的，如果还是出现500错误请去掉 <strong>#</strong> 及后面的注释（也许有些环境不支持中文注解），如果还是错误请在下面给我留言。</p>
<p><strong>1、Rewrite规则简介：</strong></p>
<p>Rewirte主要的功能就是实现URL的跳转，它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块，必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块，别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。</p>
<p>基于服务器级的(httpd.conf)有两种方法，一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明，需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。</p>
<p>基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。</p>
<p><strong>2、举例说明：</strong><br />
<span id="more-211"></span><br />
例一.下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.kiya.cn和70.40.213.183都跳转到主机前缀为http://www.kiya.cn，避免相同内容的网页有多个指向的域名，如http://kiya.cn。</p>
<blockquote><p>NameVirtualHost 70.40.213.183:80<br />
ServerAdmin slj@kiya.cn<br />
DocumentRoot &#8220;/web&#8221;<br />
ServerName kiya.cn</p>
<p>RewriteEngine on #打开rewirte功能<br />
RewriteCond %{HTTP_HOST} !^www.kiya.cn [NC] #声明Client请求的主机中前缀不是www.kiya.cn，其中 [NC] 的意思是忽略大小写<br />
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #声明Client请求的主机中前缀不是70.40.213.183，其中 [NC] 的意思是忽略大小写<br />
RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空<br />
RewriteRule ^(.*) http://www.kiya.cn/ [L] #含义是如果Client请求的主机中的前缀符合上述条件，则直接进行跳转到http://www.kiya.cn/,[L]意味着立即停止重写操作，并不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符，()括号的功能是把所有的字符做一个标记，以便于后面的应用.就是引用前面里的(.*)字符。</p></blockquote>
<p>例二.将输入 en.sicasoft.com 的域名时跳转到www.sicasoft.com</p>
<blockquote><p>RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^en.sicasoft.com [NC]<br />
RewriteRule ^(.*) http://www.sicasoft.com/ [L]</p></blockquote>
<p>例三.赛卡软件近期更换了域名，新域名为www.sicasoft.com, 更加简短好记。这时需要将原来的域名ss.kiya.cn, 以及论坛所在地址ss.kiya.cn/bbs/定向到新的域名，以便用户可以找到，并且使原来的论坛 URL 继续有效而不出现 404 未找到，比如原来的http://ss.kiya.cn/bbs/tread-60.html, 让它在新的域名下继续有效，点击后转发到http://bbs.sicasoft.com/tread-60.html，而其他网页，如原先的http://ss.kiya.cn/purchase不会到二级域名bbs.sicasoft.com/purchase上，而是到www.sicasoft.com/purchase<br />
按照这样的要求重定向规则应该这样写：</p>
<blockquote><p>RewriteEngine On<br />
RewriteCond %{REQUEST_URI} ^/bbs/<br />
RewriteRule ^bbs/(.*) http://bbs.sicasoft.com/$1 [R=permanent,L]<br />
RewriteCond %{REQUEST_URI} !^/bbs/<br />
RewriteRule ^(.*) http://www.sicasoft.com/$1 [R=permanent,L]</p></blockquote>
<p><strong>3.Apache mod_rewrite规则重写的标志一览</strong></p>
<blockquote><p>1) R[=code](force redirect) 强制外部重定向<br />
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定，将用缺省的302 HTTP状态码。<br />
2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。<br />
3) G(force URL to be gone) 强制URL为GONE，返回410HTTP状态码。<br />
4) P(force proxy) 强制使用代理转发。<br />
5) L(last rule) 表明当前规则是最后一条规则，停止分析以后规则的重写。<br />
6) N(next round) 重新从第一条规则开始运行重写过程。<br />
7) C(chained with next rule) 与下一条规则关联</p>
<p>如果规则匹配则正常处理，该标志无效，如果不匹配，那么下面所有关联的规则都跳过。</p>
<p>8) T=MIME-type(force MIME type) 强制MIME类型<br />
9) NS (used only if no internal sub-request) 只用于不是内部子请求<br />
10) NC(no case) 不区分大小写<br />
11) QSA(query string append) 追加请求字符串<br />
12) NE(no URI escaping of output) 不在输出转义特殊字符<br />
例如：RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo<br />
13) PT(pass through to next handler) 传递给下一个处理<br />
例如：<br />
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理<br />
Alias /def /ghi<br />
14) S=num(skip next rule(s)) 跳过num条规则<br />
15) E=VAR:VAL(set environment variable) 设置环境变量</p></blockquote>
<p><strong>4.Apache rewrite例子集合</strong></p>
<p>URL重定向</p>
<p>例子一:<br />
同时达到下面两个要求：<br />
1.用http://www.zzz.com/xxx.php 来访问 http://www.zzz.com/xxx/<br />
2.用http://yyy.zzz.com 来访问 http://www.zzz.com/user.php?username=yyy 的功能</p>
<blockquote><p>RewriteEngine On<br />
RewriteCond %{HTTP_HOST} ^www.zzz.com<br />
RewriteCond %{REQUEST_URI} !^user.php$<br />
RewriteCond %{REQUEST_URI} .php$<br />
RewriteRule (.*).php$ http://www.zzz.com/$1/ [R]<br />
RewriteCond %{HTTP_HOST} !^www.zzz.com<br />
RewriteRule ^(.+) %{HTTP_HOST} [C]<br />
RewriteRule ^([^.]+).zzz.com http://www.zzz.com/user.php?username=$1</p></blockquote>
<p>例子二：</p>
<p>/type.php?typeid=* &#8211;&gt; /type*.html<br />
/type.php?typeid=*&amp;page=* &#8211;&gt; /type*page*.html</p>
<blockquote><p>RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]<br />
RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&amp;page=$2 [PT]</p></blockquote>
<p><strong>5.使用Apache的URL Rewrite配置多用户虚拟服务器</strong></p>
<p>要实现这个功能，首先要在DNS服务器上打开域名的泛域名解析（自己做或者找域名服务商做）。比如，我就把 *.kiya.us和 *.kiya.cn全部解析到了我的IP地址70.40.213.183上。</p>
<p>然后，看一下我的Apache中关于*.kiya.us的虚拟主机的设定。</p>
<blockquote><p>ServerAdmin webmaster@kiya.us<br />
DocumentRoot /home/www/www.kiya.us<br />
ServerName dns.kiya.us<br />
ServerAlias dns.kiya.us kiya.us *.kiya.us<br />
CustomLog /var/log/httpd/osa/access_log.log&#8221; common<br />
ErrorLog /var/log/httpd/osa/error_log.log&#8221;<br />
AllowOverride None<br />
Order deny,allow</p>
<p>#AddDefaultCharset GB2312</p>
<p>RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$<br />
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]<br />
RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/www.kiya.us/sylvan$3?un=$1&amp;%{QUERY_STRING} [L]</p></blockquote>
<p>在这段设定中，我把*.kiya.cn和*.kiya.us 的Document Root都设定到了 /home/www/www.kiya.us</p>
<p>继续看下去，在这里我就配置了URL Rewrite规则。</p>
<blockquote><p>RewriteEngine on #打开URL Rewrite功能<br />
RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$ #匹配条件，如果用户输入的URL中主机名是类似 xxxx.kiya.us 或者 xxxx.kiya.cn 就执行下面一句<br />
RewriteRule ^(.+) %{HTTP_HOST}$1 [C] #把用户输入完整的地址（GET方式的参数除外）作为参数传给下一个规则，[C]是Chain串联下一个规则的意思<br />
RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/dev.kiya.us/sylvan$3?un=$1&amp;%{QUERY_STRING} [L]<br />
# 最关键的是这一句，使用证则表达式解析用户输入的URL地址，把主机名中的用户名信息作为名为un的参数传给/home/www/dev.kiya.us目录下的脚本，并在后面跟上用户输入的GET方式的传入参数。并指明这是最后一条规则（[L]规则）。注意，在这一句中指明的重写后的地址用的是服务器上的绝对路径，这是内部跳转。如果使用http://xxxx这样的URL格式，则被称为外部跳转。使用外部跳转的话，浏览着的浏览器中的URL地址会改变成新的地址，而使用内部跳转则浏览器中的地址不发生改变，看上去更像实际的二级域名虚拟服务器。</p></blockquote>
<p>设置后重启Apache服务器就大功告成了！</p>
<h2><span style="color: #ff0000;">Update May 1, 2009</span></h2>
<p>今天上网看到了有人提一个问题：</p>
<blockquote><p>求Rewrite 防盗链正则<br />
不允许www.im286.com  www.chinaz.com 这两个网站盗链 , 其它的网站都可以盗链的规则怎么写.</p></blockquote>
<div>论坛中的答案是：</div>
<blockquote><p>RewriteEngine On<br />
RewriteCond %{HTTP_REFERER} chinaz.com  [NC]<br />
RewriteCond %{HTTP_REFERER} im286.com [NC]<br />
RewriteRule .*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/fuck.png [R,NC,L]</p></blockquote>
<h2><span style="color: #ff0000;">Update May 7, 2009</span></h2>
<p>介绍一篇文章：<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html" target="_blank">http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html</a></p>
<blockquote></blockquote>
<h2><span style="color: #ff0000;">Update May 24, 2009</span></h2>
<p>一、关于是否需要使用完全转义，比如在 RewriteCond %{HTTP_REFERER} chinaz.com  [NC] 中 把 chinaz.com 改成 chinaz\.com<br />
答案是，两者都是可以的。</p>
<p>二、今天在做 YOURcaddy.com （就是我去年做的PlanetCoachella的变形）的时候，在 GoDaddy 主机上无法正常转向，后来找到了问题：<br />
在HostMonster以及我自己的机器上，是用<br />
RewriteRule ^business/([^\.]+)$ biz/detail.php?name=$1  [L]<br />
达到改写的。而在Godaddy主机上，是这样：<br />
RewriteRule ^business/([^\.]+)$ /biz/detail.php?name=$1  [L]<br />
目标文件前多了一个/<br />
现在想想，可能是因为没有指定RewriteBase，至于到底是不是我改日再验证一下。</p>
<p>三、添加两个关于判断 USER AGENT 例子和自动添加.php扩展名及自动换.html到.php扩展名的例子：<br />
1</p>
<blockquote><p>RewriteEngine on<br />
RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]<br />
RewriteRule ^.* &#8211; [F,L] 这里”-”表示没有替换，浏览器为IE和Opera的访客将被禁止访问。
</p></blockquote>
<p>2</p>
<blockquote><p>
RewriteEngine On<br />
RewriteBase /test<br />
RewriteCond %{REQUEST_FILENAME}.php -f<br />
RewriteRule ([^/]+)$ /test/$1.php<br />
#for example: /test/admin => /test/admin.php<br />
RewriteRule ([^/]+)\.html$ /test/$1.php [L]<br />
#for example: /test/admin.html => /test/admin.php</p>
<p>限制目录只能显示图片<br />
< IfModule mod_rewrite.c><br />
RewriteEngine on<br />
RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$<br />
RewriteRule .*$ &#8211; [F,L]<br />
< /IfModule>
</p></blockquote>
<h2><span style="color: #ff0000;">Update Jun 10, 2009</span></h2>
<p>补充，关于特定文件扩展名的重写。</p>
<blockquote><p>
重写有某些扩展名的文件：<br />
RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]<br />
如果要排除一些扩展名：<br />
RewriteRule !\.(js|ico|gif|jpg|JPG|png|PNG|css|pdf|swf)$ index.php
</p></blockquote>
<h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2010/12/centos-apache-firewall-settings/" title="CentOS 安装 Apache 后其他机器无法访问的解决方法">CentOS 安装 Apache 后其他机器无法访问的解决方法</a></li><li><a href="http://slj.me/2009/12/ssh-restart-apache/" title="用SSH重启Apache">用SSH重启Apache</a></li><li><a href="http://slj.me/2009/05/book-beginingphpandmysql/" title="好书推荐-《PHP与MySQL程序设计（第3版）》">好书推荐-《PHP与MySQL程序设计（第3版）》</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2009/04/apache-rewrite-regular/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

