第四章 - 将PHP嵌入HTML
本章重点
◆ 转入PHP模式
◆ 选择PHP的卷标样式
◆ 使用PHP编写第一个程序「Hello World」
◆ 档案含括的档案请求
经过前面几章的初步介绍,相信你现在就可以一始编写PHP的script了。在本章中我们将进一步了解PHP模式,PHP卷标以及其它相关档案的含括(include)和请求(require)。读者将从这里编写第一个简单的PHP程序。
HTMK与PHP完成兼容
PHP可以和HTML完全地混合运用,实际上PHP通常是必须嵌入在HTML内使用的。你稍后会看到,PHP能够使用HTML标准中一些灵活的语法,例如窗体(form),来处理许多相当好用的性质。
在客户端与HTML兼容的所有一切同样子也和PHP兼容。PHP不会理会其它的JavaScript 程序代码、对音乐和动书的呼叫、apples或客户端上的其它一切。PHP都会忽略它们,这部份会由Web服务器把它们传递到客户端。
其实读者你可以使用任何方法开发Web网页,然后再把PHP程序代码加上去。如果你已习惯是用小组团队的方式工作,并使用大型多媒体绘图套件来开发每个页面,如果你愿意,同样也可以继续延用这种方式。从实用的观点来看,你无须改变工具或工作流程,就按照以往一直使用的方式继续下去,在最后再添加伺服端功能即可。
跳出HTML模式
我们要怎样在HTML中标示出PHP的区段呢?其实透过在每个PHP区段的启始和结尾时使用特殊的PHP标签,就能够做到这一点要求。这个过程就称为「跳出HTML(escaping from HTML)」或是所谓的「跳进PHP(escaping into PHP)」。
我们不是为了要使你混淆,这里的跳(escpae)与一般PHP所使用的eacape不同,那些是在字符串内特殊字符(例如tab或是换行字符)之前使用反斜线的用法。
在这两个PHP标签之间的所有内容都会藉由PHP解析器识别理解为PHP程序代码。这两个标签之外的所有内容就与服务器无关了,就会直接传给客户端,由客户端弄清楚它是HTML、JavaScript或是其它什么内容。
PHP标签有四种类型,在使用它们时分别有不同的原。不过其中一些是因为个人的喜好问题、或者是因为程序设计师用什么会感到比较舒服的问题,或上一个团队自己决定要使用的设定。
标准的PHP标签
最常使用的PHP标签如下:
<?php ?>
如果使用这种格式,就可发十分肯定所用的标签能够被正确地直译。除百非有很好的理由才去选取用其它的写法格式,否则最好就这种标准写法。其它任何PHP tag写法可能在未来都会被取消,这是唯一被认为安全的写法。
简短起始(SGML格式)标签
简短起始标签如下所示:
<? ?>
这是最简单的表示方式。由于这种方式的输入次数较少,会吸引那些在每个script中频繁切换进出HTML的使用者,然而使用这种短标签也是要付出代价的,必须做到下面的三种方式之一来让PHP识别该标签:
1. 在建构PHP时,要记得选择「--enable-short-tags」的设置选项。
2. 在php.ini档案中启用short_open_tag设置。但是在使用这个选项时,必须禁止XML和PHP一并使用,这是因为XML的tag也是使用这种语法。
还有一种可以用来使用简短语法的方式:使用short_open()函式,但是这种用法在PHP 4以后已不再提供使用。
有许多是不要使用简短卷标语法的原因,最主要的原因就是此种语法与XML不兼容,又因为XHTML也是一种XML檔,所以将使得你的PHP程序将无法使用在XHTML档案内。使用简短卷标的PHP程序是比较不空易视觉上的辨识出来,许多程序代码颜色强调的工具并不会支持这种语法,入门的设计者应该在所有可能的地方使用标准的卷标语法。
简短村签过去是许多设计高手习惯以为常用来使用PHP的方式,如今PHP开发团队努力平衡于得供众多使用者安装方式的标准与一致性语法,虽然过去已经有大量的程序代码使用旧式语法,但因为XML已经变成Web开发越来越中心的技术,简短标签将会在未来淡化,所以你必须给自己一个方便马上使用标准的语法。
如果你已经养好习惯要避免使用简短标签格式,记得在你的php.ini档案中取消它,你会在你忘记使用标准格式的地方响应一个错误讯息。
ASP格式的标签
ASP格式的卷标是Microsoft Active Server Pages用来隐藏程序段落和卷标,ASP格式的卷标如下所示:
<% %>
使用FrontPage做为开发工具的使用者最常选择这种格式。如果要使用这种ASP格式的标签,必须在php.ini档案中设定配置该选项。很显然地,如果你使用ASP写法格式的标签和以「.asp 」为扩展名(之前便工作于ASP网站的人可能希望如此),则需要在IIS服务器上先把ASP功能关掉,否则两种程序引擎都会尝试解析相同程序段落而产生不可预期的结果。
HTML的script标签
这种标签的写法如下所示:
<SCRIPT LANGUAGE="PHP"> </SCRIPT>
虽然这样很有效率,并且也以能够回避FrontPage的问题,但在某些情况下还是会很麻烦,例如在迅速蹦现(php-in)变数的替换上就会遇到麻烦。尤其是,如果在网站上使用了很多JavaScript,一定要更加小心,因为结束script的标签很容易造成两种意义的混淆。HTML的script标签最适合用于PHP程序代码区别很大的时候。
第一支程序「Hello World」
现在我们准备编写第一个PHP程序。先在自己喜欢使用的编辑器中打开一个新档案,键入以下内容:
<HTML>
<HEAD>
<TITLE> My first PHP program</TITLE>
</HEAD>
<BODY>
<?php
Print("Hello!!!<BR>\n");
Phpinfo();
?>
</BODY>
</HTML>
在大多数浏览器中,除了PHP这部分,其它内容都不是很需要的。然而还是应该养成使用标准HTML结构一嵌入PHP的好习惯。
如果看不到非常类似图4-1所示的输出,那就是有问题了,很可能是某种安装或设定上出也问题。
回顾第三章的内容即可以了解安癍上的说明,向后翻阅到第三十七章可以找到相关的设定与配置选项。另外在第十五章中分析了一些常见的问题并不提供错误问题相关信息。
进出PHP模式
在PHP的script内任一时刻,你可能是处于PHP模式之中,划是处于PHP模式之外的HTML内。这里没有其它中间的状态,PHP标签内的所有内容就是PHP程序代码,标签外的所有内容都有是普通HTML内容。
可以依自己高兴使用PHP卷标随时转入PHP模式,例如:
请注意在第一个PHP模式实例下发生的情况,这里有个数指定了值,到了第二段PHP程序代码该指定仍属有效。在下一章中你会学到更多进出PHP模式时变量的相关使用情况。在第十四章还会学到使用PHP模式的不同型式风格。
档案含括(include)
把PHP加到HTML中的另一种方法是把PHP程序代码放入单独的档案,然后使用PHP的include 函式呼叫它。共有四种相关的含括函式:
先在前版本的PHP内,include与require函式和功能与速度有显着的差异,这将不再成立,这两类函式只有在错误所时丢出错误讯息的类型不同, include()函式与include_once()函式只会在错误时发出警告,但是require()函式与require_once()函式会发出严重错误而中断程序。
如同函式的命名所提及的,include_once()和require_once()与名称只有include()和require()不同的地方在于它们只会允许每个PHP程序中只含括一次该档案,这在你含括内含PHP函式的档案时是极度有用的。因为重新定义函式将会自动导致严重错误。在大型PHP系统内,常常需要含括一些本身也有含括其它档案的档案,但是要追踪你之前是否已经含括过某特定档案是困难的,但是一但使用include_once()或是 require_once()则不需要如此。
你要如何决定是否使用include()函式呢?基本是你必须决定是否坚持自己撰写好的程序来避免严重错误的痛苦,或是在你的程序中即使出现常见错误仍无访,最严重的方式就是使用require(),它会在你的程序不完善时马是中断程序,最不严谨的就是include_once(),它会自然隐藏你的一些坏的程序习惯。
最常见的PHP include功能就是在网站的所有网页加入首页与页尾。
例如现在有一个简单的页首档案(称为header.inc)如下所示:
显然的,这样单一改变简化了整个网站的维护与规模,现在如果你要使用不同的视觉呈现或是如果你要更新版权说明的话,你只要更改一个档案而不需要更改好几个HTML网页的相同程序片断。
当你要含括档案时,记得在你php.ini档案内的inculde_path指令设定正确,只要藉由使用正确的指令你可以含括来自网站上层次或你的Web结构之外网站的档案,请参阅第37章更详细说明。
如同你可以在上述程序所见一样,PHP的include()函式只会所含括的档案以文字的方式传送,许多人以为由于include()函式是在PHP模式内使用的,所以含括进的部分也会属于PHP模式,这并不是真的,事实上服务器会在含括档案一开始跳回HTML模式,并在含括档案结束后悄悄返回PHP模式,并马上与分号结合。
你永远都要在想要使用PHP程序时使用PHP的起始与结束标签,任何被含括的档案若想要以PHP执行的话都必须加入合法的标签,如果整个档案都属于PHP部分(常见于使用函式的档案),整个档案都必须以PHP标签包住。
现在我们来看底下档案,database.inc:
我们无法充分在此弹调:如果你在含括PHP档案发生问题时,尤其是如果你所看见的结果并非预期或是看不见应该看到的部分时,请绝对小心在你有含括档案内前后都有加上PHP标签。
如果你愚蠢的只将上述片段的档案含括进PHP程序的话,你会看到此数据库变量会变成文字显示在页面上,因为你忽略了使用PHP标签,解析器以为这个段落是HTML,正确database.inc的写法应该如下所示:
对于所有含括其它档案,你必须确保在最后一行没有使用换行,记住任何PHP之外的部分都被看成HTML部分,甚至一个空白行也是如此,PHP标签之外的空白行或是空格符将会被输出,如果你在不能使用输出的时候含括了这个档案,例如在使用HTTP header之前,你的程序会出现一个大大关于输出串流已经在含括档案内使用的错误讯息,请参阅第15章更详细的部分。
摘要
PHP很容易嵌入到HTML中,你可以使用任何一种自己习惯使用的HTML产生方法,然后再添加PHP程序代码区段到其中。加上的PHP程序代码区段可以是只有一点点的注解单一数字,也可以是很长很长的程序代码区段。
每个PHP区块,无论长短都要有PHP标签。虽然本章介绍了几种写法格式的PHP标签,但初学者应该还是要使用标准规范的那一种标签写法。你还可以使用 include()或require()函式,在档案中将PHP档案含括入内,但被含括档案的内容只有围在PHP标签内时才会被识别为PHP程序代码,这一点要特别留意。