Reader's Digest

Digest your Internet

《MySQL权威指南》读书笔记

Written By: dch1 - May• 01•08
第一章,MySQL和SQL入门(一,对数据库的理解)

这一章共78页,我看了两周。

很少有技术类书籍一开篇就讨论SELECT语句的,这是此书给我的第一个印象,本章把这个语句讲解得十分详细。我觉得第一章主要是讨论两个问题:1,通过两个样板数据库讲解对数据库理论的理解;2,基本命令的使用。比较高深的东西好像不多。

一,对数据库的理解

为什么要使用数据库呢,我们都看过许多说法,不外于其提供了强大的数据处理能力,如果仅仅是简单的数据列表,电子表格就完全胜任了。在数据的世界里,MySQL被划分为关系数据库管理系统的范畴内,我们可以把这个短语划分为以下几个部分:
数据库:存放信息的的资料库,其构造既简单又遵守一定的规律
数据库内的数据都存放在数据表(table)里
数据表是由数据行(row)和数据列(colume)构成的
一个数据行就是数据表内的一条记录(record)
一个记录一般包含多个信息,数据表中的每一个数据列都对应着一个信息
关系:把存放在某个数据表内的信息和存放在另一个数据表内的信息通过某种方式关联起来,而这种关联就是通过查找两个数据表有无共同的元素来实现的。

先看一个简单的例子:

你的站点上有大量的广告,每当客户浏览你的网页时,一旦点击你的广告,你就需要做记录来计算自己得到了多少广告费。从数据库的角度来说,你应该建立三个数据表。

1,各个广告的来源company表
Company Company_num Address phone
SONY 13 马家沟 0451-21
CANON 14 新阳路 0451-22
2,各个广告的数据ad表
Company_num Ad_num Hit_fee
12 48 001
13 49 003
14 50 004
3,每个广告的点击率hit表
Ad_num Date
48 3.12
49 3.14
48 3.12
50 3.14

看看我们能通过这三个数据表查询到什么信息?

1,你为多少家公司做广告?
查一查company表有多少行就知道了
2,你一共有多少个广告?
查一查ad表有多少行就知道了
3,在3.12这一天,你一共显示了多少个广告?
查一查hit表里面Date数据列的值是3.12的数据行共有多少?
4,在3.14这一天,CANON的广告被点击了几次?
首先在company表中找到CANON公司的公司代码(14),根据这个代码在ad数据表中找到CANON公司的广告代码(50实际上可能是很多个),然后分别在hit表中找到3.12日这个代码的点击率。

看到这里我们就能明白,为什么要费力气地把数据“分散”到多个表里面,而不是放到一个大表格中,数据库的非凡能力就表现在这里,把分散在多个数据表中的数据用一种相互匹配的方式迅速地搜集到一起得出结果,这就是数据库式的思维方式。我们必须慢慢习惯,然后自觉运用。是不是很简单?

如何让读者更好地理解这种“关系”的概念,书中给了两个样板数据库,听我慢慢道来:
1,你现在是美国历史研究会的秘书,这个协会是由一些对美国历史感兴趣的人自发地组织起来的,由于各人的爱好,他们将定期地交纳一定的会费来维持其会员资格,交上来的会费主要用于支付研究会的各种开支,如印刷会员刊物等。这个研究会目前建有一个小型的互联网站点,但这个站点还没有得到充分的开发利用,如果你的主要工作是用字处理来打印会员名录的话,数据库就没有必要的,但是许多的工作要求很复杂的操作:如,你希望能够根据不同的情况把会员名录输出为其它格式的资料;根据特定的条件来查询会员;能够根据某种限制得到统计数字,等等,如果把研究会的会员资料放到网站上,那么对会员自己来说,以在线方式修改自己的资料,查询其他人的资料就会容易得多。甚至会员们可以互相发布消息,写电子邮件,等等。
2,你是一名教师,在每学期中,你负责考试和测验,记录各种分数,期末时,你要对学生们的成绩进行总评。并把学生们的总评成绩和出勤情况上报给校方,如果不使用数据库,你就必须每学期都手工完成这些工作。

如果用传统方法,手工来统计考试积分表,你的表格可能就会是这样:

学生

ID 姓名 分数
Q Q T Q Q T
9/3 9/6 9/9 9/16 9/23 10/1 …
1
2
3
4
… 李寻欢
荆无命
吕奉先
王怜花
… 14
17
15
14
… 10
10
10
13
… 73
68
78
85
… 14
17
12
13
… 15
14
17
19
… 67
73
82
79
… …



毫无疑问,从关系的角度来说,这样的表格是无法直接放到数据库里面的。我们必须对其进行分解。当然,分数表(score表 )是最先必须建立的。最简单的模型可能是这样:

Name Date Score
李寻欢 9.3 14
荆无命 9.3 17
吕奉先 9.3 15
王怜花 9.3 14
李寻欢 9.6 10
荆无命 9.6 10
吕奉先 9.6 10
王怜花 9.6 10
我们很快就能发现这个表的问题:它丢失了一些数据,我们不能知道当天进行的是考试还是测验。看来需要加入一个数据列:
Name Date Score Type
李寻欢 9.3 14 Q
荆无命 9.3 17 Q
吕奉先 9.3 15 Q
王怜花 9.3 14 Q
李寻欢 9.6 10 T
荆无命 9.6 10 T
吕奉先 9.6 10 T
王怜花 9.6 10 T
我们又发现了一个问题,那就是本表的多余数据太多了,同一天里面的Type数据列的值是相同的,这种数据冗余是完全没有必要的。把表拆分一下如何:
score表
Name Date Score
李寻欢 9.3 14
荆无命 9.3 17
吕奉先 9.3 15
王怜花 9.3 14
李寻欢 9.6 10

荆无命 9.6 10
吕奉先 9.6 10
王怜花 9.6 10
event表
date Type
9.3 Q
9/6 Q
9/9 Q
9/16 T
9/23 T
10/1 T
看起来好多了,虽然数据表的数据多了一个,但对数据库来说完全不是问题,我们可以继续考虑我们的成绩表:如果一天内有两场考试怎么办?我们需要在同一天内记录两组分数!既然如此,可以为每一次考试或者测验分配一个独一无二的编号,用这个编号来关联两个表,这样就避开了日期重复的问题了。
score表
Name Event_id Score
李寻欢 1 14
荆无命 1 17
吕奉先 1 15
王怜花 1 14
李寻欢 2 10

荆无命 2 10
吕奉先 2 10
王怜花 2 10
event表
Event_id date Type
1 9.3 Q
2 9/6 Q
3 9/9 Q
4 9/16 T
5 9/23 T
6 10/1 T
这样就完成了数据表的规划吗?好像还不行,考虑一下,如果有重名的学生如何处理呢?看来,用学号来解决这个问题就行了。
1,student表
Name Sex Student_id
李寻欢 F 1
荆无命 F 2
吕奉先 F 3
王怜花 F 4
2,score表
Student_id Event_id Score
1 1 14
2 1 17
3 1 15
4 1 14
1 2 10
2 2 10
3 2 10
4 2 10
3,event表
Event_id Date
9.3 Q
9/6 Q
9/9 Q
9/16 T
9/23 T
10/1 T

终于完成了考试积分表的规划!我们学到了什么呢?数据库应该是什么样子,它应该包含哪些数据表,各个数据表应该有什么内容以及数据应该如何表示?我们看到的许多

PHP初学者头疼问题总结

Written By: dch1 - May• 01•08

【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET[‘foo’],$_POST[‘foo’],$_SESSION[‘foo’]来得到
当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
【2】Win32下apache2 用get方法传递中文参数会出错
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:”test.php?a=”.urlencode(你好).”&b=”.urlencode(你也好)

………….

【3】win32下的session不能正常工作
php.ini默认的session.save_path = /tmp
这显然是linux下的配置,win32下php无法读写session文件导致session无法使用
把它改成一个绝对路径就可以了,例如session.save_path = c:windowstemp
【4】显示错误信息
当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽
例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
【5】Win32下mail()不能发送电子邮件
在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件
修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器
【6】初装的mysql如果没有设置密码,应该使用
update mysql.user set password=”yourpassword” where user=”root”
修改密码
【7】header already sent
这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!
【8】更改php.ini后没有变化
重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置
【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)
PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装
步骤一,先www.php.net下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。 安装好以后,在默认网站–>应用程序配置
步骤二:点击 web服务扩展 –>新建web服务扩展.
步骤三: 扩展名–>php,然后添加
步骤四:找到php.exe的路径添加上去。
步骤五: 确定就可以了!
步骤六: 选择php的服务扩展,然后点击允许。
【10】
有时候sql语句不起作用,对数据库操作失败
最简便的调试方法,echo那句sql,看看变量的值能得到不
【11】include和require的区别
两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出
据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试
如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据
function r($file_name) {
$filenum=@fopen($file_name,”r”);
@flock($filenum,LOCK_SH);
$file_data=@fread($filenum,filesize($file_name));
@fclose($filenum);
return $file_data;
}
function w($file_name,$data,$method=”w”){
$filenum=@fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}

【12】isset()和empty()的区别
两者都是测试变量用的
但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空
如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示
如果一个变量被赋空值,$foo=””或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
要注销一个变量,可以用 unset($foo)或者$foo=NULL
【13】mysql查询语句包含有关键字
php查询mysql的时候,有时候mysql表名或者列名会有关键字
这时候查询会有错误。例如表名是order,查询时候会出错
简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别
例如select * from `order`
【14】通过HTTP协议一次上传多个文件的方法
有两个思路,是同一个方法的两种实现。具体程序还需自己去设计
1,在form中设置多个文件输入框,用数组命名他们的名字,如下:
<form action=”” method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>
这样,在服务器端做以下测试
echo “<pre>”;
print_r($_FILES);
echo “</pre>”;

1,在form中设置多个文件输入框,但名字不同,如下:
<form action=”” method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>
在服务器端做同样测试:
echo “<pre>”;
print_r($_FILES);
echo “</pre>”;

asp?id=503 width=1 height=1>

PHP教程

Written By: dch1 - May• 01•08
PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。

1.简介

PHP是能让你生成动态网页的工具之一。PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到,也可以查阅网页陶吧的“PHP安装全攻备”专题文章。安装过程很简单。

如果你的机器解决了2000问题,那么PHP也一样没有千年虫问题!

1.1 历史

三年前,Rasmus Lerdorf为了创建他的在线简历而创造了”个人主页工具”(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。

PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而PHP4就可以充分利用这个引擎。现在,PHP4正式版已经发布,大家可以到php的官方站点上去下载。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点了解更多。

PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。

1.2 PHP的先进之处

应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点:

– 学习过程

我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。

PHP的语法类似于C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。

你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。

– 数据库连接

PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。

– 可扩展性

就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。

– 面向对象编程

PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。

– 可伸缩性

传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。

– 更多特点

PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能!

PHP站点的在线教程已经很棒了。而本文的该部分将让你对PHP熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP编程。

3.1 首要条件

你首先必须要有一个正在工作着的支持PHP的web服务器。我假定在你的服务器上所有PHP文件的扩展名为.php3。

3.2 PHP的安装

有关PHP的安装配置,可以查阅网页陶吧上的“PHP安装全攻略”专题文章。

3.3 语法

从语法上看,PHP语言近似于C语言。可以说,PHP是借鉴C语言的语法特征,由C语言改进而来的。我们可以混合编写PHP代码和HTML代码,不仅可以将PHP脚本嵌入到 HTML 文件中,我们甚至还可以把 HTML 标签也嵌入在 PHP 脚本里。以下是你可以采用的几种方法。你可以选用其中一种你最适合的并且就这样坚持这种方法!

从HTML中分离

以下是可以使用的方法:
<? . . . ?>
<?php . . . ?>
<script language=”php”> . . . </script>
<% . . . %>

注:当你使用“<? . . . ?>”将PHP代码嵌入于HTML文件中时,可能会同XML发生冲突,同时,能否使用这一缩减形式还取决于PHP本身的设置。为了可适应XML和其它编辑器,你可以在开始的问号后面加上“php”使PHP代码适应于XML分析器。如:“<?php. . . ?>”。也可以像写其它脚本语言那样使用脚本标记,如:“<script language=”php”> . . . </script>”。

语句

与Perl和C一样,在PHP中用“;”来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。

注释

PHP支持C,C++和Unix风格的注释方式:

/* C,C++风格多行注释 */
// C++风格单行注释
# Unix风格单行注释

echo 和 print

PHP 和 HTML 最简单的交互是通过 print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。让我们来看看下面这一实例:

<?
$a=”hello”;
$b=”world”;
echo “a”,”b”;
print “a”,”b”;
?>

用浏览器观看这段代码的运行情况后,你会看到这样的运行结果:
aba
Parse error: parse error in d:adminmyphphometest.php3 on line 5
这说明这段代码并不能完全通过解释,发生错误的地方就在代码的第五行:“print “a”,”b”;”。

3.4一个简单的实例

通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语
<HTML>
<HEAD>
<TITLE>
<?
echo “Hello World!”;
?>
</TITLE>
</HEAD>
<BODY>
<H1>
First PHP page
</H1>
<HR>
<?
// Single line C++ style comment
/*
printing the message
*/
echo “Hello World!”;
# Unix style single line comment
?>
</BODY>
</HTML>

PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。

5.1 计划一个站点

一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。

5.2 用include和require进行模块化

我们看一些用PHP构架的网站,几乎网站每一个页面的PHP文件里都会有include和require嵌入其间。这是因为使用include和require不但可增强代码的可读性,而且可将站点分成模块来管理。一般来说,对于一个网站上的每个页面肯定会有重复的内容。例如:页面头部的导航条、广告图标、或边部导航等。可能还在每页的页脚即页面的底部有著作权或一些基于文本的导航条。如果我们要修改一个包含成千上百个页面的大网站上的导航条或是徽标之类的内容,用我们以往的方法,我们只能遂一对每一页面进行更改。不用我说,大家也能想像到这是一件多么艰巨而痛苦的差事。那么,我们到底有没有更好的解决方法呢?答案是肯定的。我们可以将重复的内容都放到一个文件中,然后在每一个需要这些内容的页面上用PHP的include和require函数动态地调用该文件。这样,以后如果我们想对所有页面上的这些复用内容做修改时,就只需要更改包含了这些重复内容的文件。

为了便于大家理解,让我们先来看看include和require的一个简单应用:

HTML的页面开始,也许你会在站点的每页的头部包含它(head.htm)。
<HTML>
<HEAD>
<TITLE> 我的个人主页 </TITLE>
</HEAD>
<BODY>

页面内容(content.htm)。
<H1>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</H1>

HTML的页面的结束(trail.htm)
</BODY>
</HTML>

用include和require函数把HTML从PHP中分离出来,将HTML和PHP分成模块:
<?
/*
调用HTML页面的头部
*/
require(“head.htm”);
/*
调用HTML页面的内容
*/
require(“centent.htm”);
/*
调用HTML页面的尾部
*/
require(“trail.htm”);
?>

5.3 让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的、通用的页面头部和底部。

标题页面–front.htm
这里我们有一个非常简单的html文件:
<HTML>
<HEAD>
<TITLE>
我的个人主页–欢迎
</TITLE>
</HEAD>
<BODY>
<H1>
我的个人主页
</H1>
<H2>
欢迎
</H2>
<HR>
<>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</P>
<>
不过我希望马上就可以多起来。
</P>
<HR>
< ALIGN=”CENTER”>
<SMALL> <I>
Copyright ? 我自己,1999
</I> </SMALL>
</P>
</BODY>
</HTML>

联系信息页面–count.htm
同样我们又有了一个简单页面:
<HTML>
<HEAD>
<TITLE>
我的个人主页–联系信息
</TITLE>
</HEAD>
<BODY>
<H1>
我的个人主页
</H1>
<H2>
联系信息
</H2>
<HR>
<P>
你可以通过1-800-PHP-INFO联系我
</P>
<HR>
<P ALIGN=”CENTER”>
<SMALL> <I>
Copyright ? 我自己,1999
</I> </SMALL>
</P>
</BODY>
</HTML>

5.4 从HTML到PHP

从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。在include和require函数中都包含一个PHP代码的文件,不管该文件的扩展名是什么,它都被当作是PHP文件。我们将把这些include文件放在一个叫include的子目录下,并取成以.inc为后缀的文件。下面我们就把这些站点的通用内容写进文件中。

全站通用变量设定:common.inc
<?
// 全站通用变量
$MyEmail = “[email protected]“;
$MyEmailLink = “<a href=’mailtoMyEmail’>$MyEmail</a>”;
$MyName = “PHP Talk”;
$MySiteName = $MyName.”‘s Home Page”;
?>

通用页面头部:header.inc
<?
// 定义通用页面头部
?>
<HTML>
<HEAD>
<TITLE>
<? echo “$MySiteName – $title”; ?>
</TITLE>
</HEAD>
<BODY>
<H1>
<? echo “$MySiteName”; ?>
</H1>
<H2>
<? echo “$title”; ?>
</H2>
<HR>

通用页面底部:footer.inc
<?
// 通用页面底部
?>
<HR>
<P ALIGN=”CENTER”>
<SMALL> <I>
Copyright ? by
<? echo “$MyName ($MyEmailLink)”; ?>
, 1999
</I> </SMALL>
</P>
</BODY>
</HTML>

新的页面front.php3:
<?
include(“include/common.inc”);
$title = “Welcome”;
include(“include/header.inc”);
?>
<P>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</P>
<P>
不过我希望马上就可以多起来。
</P>
<?
include(“include/footer.inc”);
?>

新的count.php3:
<?
include(“include/common.inc”);
$title = “Contact Information”;
include(“include/header.inc”);
?>
<P>
你可以通过1-800-PHP-INFO联系我
</P>
<?
include(“include/footer.inc”);
?>

现在你可以体会一下这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。