棣栧厛澹版槑,鍐欐鏂囨椂,鎴戝杩欎釜涔熶笉鎳?鍙槸鑷繁浠巔hp.net涓婁笅浜嗕緥瀛?璇曠潃鍋氫簡涓€涓?鑰屼笖鏄湪 win2000 apache php4p12閰嶇疆涓? 鍏蜂綋姝ラ濡備笅锛 涓€銆佸畨瑁呭ソJVM(java virtual machine)(鎴戠敤鐨勬槸jdk122)
褰撶劧锛屾偍涓嶄竴瀹氳鐢╦dk122,鐢氳嚦涓嶇敤jdk,鐢ㄥ叾瀹冪殑,姣斿:
JVM=Kaffe 1.0.4 (as delivered with OS), OS=Redhat Linux 6.1
JVM=Kaffe 1.0.5 (built from source), OS=Redhat Linux 6.1
JVM=IBM 1.1.8, OS=Redhat Linux 6.1
JVM=Blackdown 1.2.2 RC4, OS=Redhat Linux 6.1
JVM=Sun JDK 1.1.8, OS=Windows NT 4/win2000
浣嗘槸,鍦ㄨ繖閲屾垜鍙鎴戠殑鍋氭硶,鍏跺畠鐨勬垜娌℃湁璇曡繃,涓嶈闂垜,杩欓噷瑕佺壒鍒敞鎰忕殑鏄? 鏍规嵁php瀹樻柟绔欑偣鐨勮鏄?绔熺劧涓嶆敮鎸乯dk122 linux
浜屻€佽缃幆澧冨彉閲
鍦╳in2000涓?鎴戠殑鐢佃剳->灞炴€?->楂樼骇->鐜鍙橀噺
璁剧疆JAVA_HOME
涓国jdk璺緞,姣斿鎴戠殑jdk122瑁呭湪e:jspjdk122涓?閭d箞灏辫缃负e:jspjdk122
涓夈€佷笅杞界浉鍏虫枃浠?濡傛灉鎮ㄦ病鏈夌殑璇?
涓嬭浇鍦板潃:http://www.php.net/downloads.php
鎴戜笅杞戒簡:php-4.0.1-Win32-java-jdk122.zip鏂囦欢,瑙e帇鍚庢湁鍑犱釜渚嬪瓙,骞朵笖鏈堹php_java.dll鍜宲hp_java.jar鏂囦欢.
鍥涖€侀厤缃畃hp.ini鏂囦欢
[java]
java.class.path=E:PHP4php_java.jar
java.home=E:jspjdk122in
extension=php_java.dll
java.library.path=E:PHP4ext
java.library=E:Program FilesJavaSoftJRE1.2inclassicjvm.dll
浠ヤ笂鏄垜鐨勯厤缃?璇存槑涓€涓?鎴戠殑php4鍦╡:php4鐩綍涓?鎴戠殑鎵€鏈夋墿鍏呯殑dll鏂囦欢 鏀惧湪e:php4ext鐩綍涓?褰撶劧php_java.dll涔熷氨搴旇copy鍒拌繖涓洰褰曚簡.鏈€鍚庣‘璁や綘鐨 win2000涓嬫湁jvm.dll鏂囦欢,濡傛灉娌℃湁,瀹夎涓€涓媣isual studio灏卞彲浠ヤ簡(鎴戠敤瑁呬簡涓猇C 6,鎵€浠ヤ笉鐢ㄨ€冭檻浜?
浜斻€佹祴璇
杩愯phpinfo()灏卞彲浠ョ湅鍒版湁java浜?濡傛灉娌℃湁锛岃鏄庝綘娌℃湁鎴愬姛.瀹冪殑鏄剧ず濡備笅:
java
Directive Local Value Master Value
java.class.path
E:PHP4php_java.jar E:PHP4php_java.jar
java.home
E:jspjdk122in E:jspjdk122in
java.library
E:Program FilesJavaSoftJRE1.2inclassicjvm.dll jvm.dll
java.library.path
E:PHP4ext no value
鍏€佹祴璇曚緥瀛
鎴戠敤鐨勬槸涓嬭浇鐨勬枃浠朵腑鍖呭惈鐨勪緥瀛忷jver.php,濡傛灉鎴愬姛,灏嗘湁濡備笅缁撴灉:
Java version=1.2.2
Java vendor=Sun Microsystems Inc.
OS=Windows NT 5.0 on x86
鏄熸湡涓? 涓冩湀 19, 2000 at 10:32:53 涓嬪崍 GMT 08:00
如何将PHP的结果输出到非PHP页面中
这个问题是当我自已实现了统计计数之后,我想将它的输出用在我的不支持PHP功能的页面中,那么应该如何做呢?主要的解决办法是输出一段javascript脚本即可。这个是很有用的,比如实现动态新闻, 广告轮询,当然这里是讲如何把某个程序的下载计数输出到非PHP页面中去。
先让我们设想一下:我已经有了一个程序下载计数文件在我的网站上,如../count/download.db。
文件格式为:
索引|文件名提示|链接|计数
注意,这里用|线分隔。我采用的是文本文件进行处理。里面可能某一行数据为:
file1|测试文件1|../download/file1.zip|10
可以看到,下载次数可能已经是10次了。现在我就想把这个10次输出到其它的页面中。
第一步:写Javascript脚本
很简单:
<script language=javascript src=../bin/output.php?id=file1></script>
是不是!src后面是指输出的脚本程序,?后面是传入脚本的参数。那么output.php应该输出什么数据
才能被执行呢?应该输出javascript语句,如document.write()之类的语句。这样,浏览器就会把output.php
的输出结果看成一段javascript程序再进行处理,就好象直接写的脚本一样,只不过这段脚本是从别的地方
得到的。
好了,知道应该输出什么样的内容了,就可以写php程序了。
第二步:输出结果
<?
$fp=fopen(../count/download.db, r);
$flag=FALSE;
while(!feof($fp))
{
$line=fgets($fp, 256);
list($index, $title, $url, $count)=split(|, $line);
if (strtolower($index)==strtolower($id))
{
$flag=TRUE;
break;
}
}
fclose($fp);
if ($flag)
{
echo document.write($count);;
}
else
echo document.write(not found);;
?>
这段代码也很简单,但是有几点要说明。先打开一个文件。$flag表示是否找到指定索引的文件记录,
首先置为FALSE。再是一个循环,条件是文件没有结束。
然后是循环体:取出一行文本,长度最好长点。进行字段分割,以|为分割符。注意,使用的split函
数是正则表达式,|是一个特殊符号用以用号。然后分别放入相应的变量中。在这里我们真正关心的是
$index和$count。比较输入的参数$id与取出的索引($index)是否相等,如果相等,则将找到标志设为TRUE,
退出循环。否则查找下一行数据。
结束时,关闭文件,根据是否找到标志输出相应的javascript脚本即可。
对于$id的使用,是PHP自动将调用的URL处?id=xxx进行了处理,可以直接使用。也可以使用
$HTTP_GET_VARS[id]。
谈汉字转换类型及解决方案
●简繁转换有四种情况
汉字转换,分为内码转换和简繁转换。
内码转换属于简繁转换,但是他主要是在GB码和BIG5码之间转换。
另外一种简繁转换是在GB码内部的转换。GB码扩展集包含两万多个汉字,自然也存在简繁转化问题。例如,大陆网友从BIG5码繁体字网页用“复制--粘贴”的方法虽然得到的是繁体字文件,但他已经不是BIG5码的字体了。尽管页面的内码是BIG5码,但是经过复制--粘贴,已经变成了GB内码的繁体字,粘贴到“笔记本”时不是乱码,要知道,大陆简体windows系统的笔记本,是不能识别BIG5码的。若要把这繁体字变为简体字,用一般的方法可就不行了。
所以,不要以为繁体字就都是BIG5码。因此,汉字转换分为四种情况:
1。GB转BIG5
2。BIG5转GB
3。简体字转繁体字(在GBK大陆内码中转换)
4。繁体字转简体字(同上)
●网页“另存为”的转换特点。利用网页“另存为”转换汉字内码。
当我们把某个BIG5的网页用“另存为”的方式保存时,你注意看,“保存WEB页”窗口最下方有个“编码”栏,里面至少有三种选择:Unicode(UTF-8),繁体中文(BIG5),简体中文(GB2312)。
本网页的内码是Unicode(UTF-8),所以能够同时显示GB码和 BIG5码汉字。你选择不同的内码保存,就已经进行了内码转换。利用这个特点,我们可以用网页“另存为”转换汉字内码。
●网上在线汉字转换,大多是内码转换。若想把复制下来的GB码繁体字转换为同内码的简体字,或者相反,网上的转换功能显然不足。
●《金山快译》包含两个文件:KConvert.exe和Cjktab32.dll,总共大小才484K,压缩成RAR文件後仅仅235K。可以直接提取出来单独使用。他可以进行上述四种汉字的任意转换。
我已将金山快译的这两个文件上传,要用的网友可以下载。
金山快译的内码转换(解压可用,无须安装)
■http://202.202.4.200/upload/upfile/gb-big5.rar■
●手工修改个别字
不过,绝大多数汉字转换软件有个小问题,简体到繁体自动转换时,个别字转换有毛病(一对多的毛病),姓范的范,会转换成模
用php读取xml数据
摘要: 今天工作上碰到一个问题 由于我们的项目数据太少 所以需要从web search那边借调数据,他们只给我们提供了一个xml的接口。因此,我们需要把xml的数据转化成html呈现给大家。由于项目是基于php的,所以就摒弃了用js来读取xml选择了继续使用php。不过,我以前从来没有做过此类的尝试 所以找了很多网上资料同时参照了php的工作手册,发现在php4的环境下 用parser函数是一个比较好的选择(当然也可以用dom 但是需要对服务器重新进行配置 php5对dom支持得比较好)。
虽然以前没有接触过此类问题,但是还是很快就解决了,不过在解决和摸索的过程中发现网上关于此类的资料虽然不少,但是参差不齐,很多描述不是很详细,还是操作手册比较管用。
好了,言归正传:
parser是php内置的一个用来处理xml的解析器,它的工作由三个事件组成:起始标签、 读取数据、结束标签。
也就是说在对xml进行处理的时候每当遇到起始标签、数据和结束标签的时候函数会做相应的动作来完成对xml数据的转换。
php中对xml读取的相关函数的介绍:
引用:
--------------------------------------------------------------------------------
对象 XML解析函数 描述
元素 xml_set_element_handler() 元素的开始和结束
字符数据 xml_set_character_data_handler() 字符数据的开始
外部实体 xml_set_external_entity_ref_handler() 外部实体出现
未解析外部实体 xml_set_unparsed_entity_decl_handler() 未解析的外部实体出现
处理指令 xml_set_processing_instruction_handler() 处理指令的出现
记法声明 xml_set_notation_decl_handler() 记法声明的出现
默认 xml_set_default_handler() 其它没有指定处理函数的事件
--------------------------------------------------------------------------------
下面就给大家举一个小小的例子用parser函数来读取xml数据:
<?php
$parser = xml_parser_create(); //创建一个parser编辑器
xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment
xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数
$xml_file="1.xml";//指定所要读取的xml文件,可以是url
PHP的内码转换函数 mb_convert_encoding()
因为某程序要用输出UTF-8编码..但是原数据是GBK编码的
百度 找了很多有关内码转换的类..但是缺点很多.又不支持GBK TO UTF-8
不过一个一个找还是在PHP官方的FAQ找到了mb_convert_encoding() 该函数要在PHP4.0.6以上才有..听说有的
想关链接: http://cn.php.net/manual/zh/function.mb-convert-encoding.php
做一个GBK To UTF-8
< ?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("
为什么我的 Mysql 不支持中文查询
Q:
我在写一个查询条件时的问题如下:
如我想写一个字段中包含“李”字的所有记录
$str="李";
select * from table where field like %$str% ;
显示的记录中除了包含”李”字的记录,还有不包含“李”字的记录。为什么?
A:
在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。
出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。
方法一:
解决方法是对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。
方法二:
如果你使用源码编译MySQL,可以编译MySQL时使用--with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了。
方法三:
可以使用 Mysql 的 locate 函数来判断。以上述问题为例,使用方法为:
SELECT * FROM table WHERE locate(field,李) > 0;
本站使用的就是这种方法,感觉还不错。:P
方法四:
把您的Select语句改成这样,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY %FIND%即可!
php生成SessionID和图片校验码的思路和实现
做一个后台登陆需要用到校验码,前台的用户跟踪需要用到SessionID,当然,默认的PHP开启了Session以后就有了一个SessionID,但是我需要自己的,并且能够存储进数据库,那么我就尝试了一下,构造了以下的函数。
/****** 产生Session ID ******/
基本的思路: 是把当前微秒的时间获取, 然后产生以个随机数字, 把随机数字和当前时间相加后加密一下, 最后再截取需要的长度
/*
函数名称:create_sess_id()
函数作用:产生以个随机的会话ID
参 数:$len: 需要会话字符串的长度,默认为32位,不要低于16位
返 回 值:返回会话ID
函数heiyeluren
*/
function create_sess_id($len=32)
{
// 校验提交的长度是否合法
if( !is_numeric($len) || ($len>32) || ($len<16)) { return; }
// 获取当前时间的微秒
list($u, $s) = explode( , microtime());
$time = (float)$u (float)$s;
// 产生一个随机数
$rand_num = rand(100000, 999999);
$rand_num = rand($rand_num, $time);
mt_srand($rand_num);
$rand_num = mt_rand();
// 产生SessionID
$sess_id = md5( md5($time). md5($rand_num) );
// 截取指定需要长度的SessionID
$sess_id = substr($sess_id, 0, $len);
return $sess_id;
}
/****** 产生校验码 ******/
思路: 这个思路比较简单,因为考虑独一无二和随机性,我们的校验码就Session ID里面截取一段字符串就可以了,因为我们的SessionID是充分考虑了独一无二的。
/*
函数名称:create_check_code()
函数作用:产生以个随机的校验码
参 数:$len: 需要校验码的长度, 请不要长于16位,缺省为4位
返 回 值:返回指定长度的校验码
函数heiyeluren
*/
function create_check_code($len=4)
{
if ( !is_numeric($len) || ($len>6) || ($len<1)) { return; }
$check_code = substr(create_sess_id(), 16, $len );
return strtoupper($check_code);
}
/****** 生成校验码的图片 ******/
这个就是一些比较简单的PHP图像编程的东西了,我作的图片和简单。
/*
函数名称:create_check_image()
函数作用:产生一个校验码的图片
参 数:$check_code: 校验码字符串,一般由create_check_code()函数来获得
关于PHP模板技术的基本概念
如果你正在设计一个交互式网站,你一定会关注两个主要的问题,就是美工和程序。这也是一个网站在建设中抛开其内容之后最关键的要素。通常有两种方式来协调美工和程序之间的关系:
1.先做好美工页面,然后由程序员直接在美工页面的HTML文件中嵌入ASP、JSP、PHP等程序代码。
2.美工和程序同时进行,但这时因为没有页面框架,程序只能做出一些关键代码,双方完成后再进行一次美工页面和程序代码的嵌入合成。
在实际的网站建设过程中,由于人员、进度等环境的限制,大家通常会混合地使用上面两种协调方式。然而这两种方法都有不足之处:
1. 效率不高。两者协调不好可能产生等待、重复代码调试步骤等现象;
2. 调试不畅。由于程序代码最终需要嵌入在HTML页面中,代码的嵌入、调试、纠错都比较繁琐;
3. 维护不便。一旦美工设计需要修改,如网站改版,那么所有程序和HTML代码混合页面都需要重写;
如果你正在使用PHP程序建设网站,那么恭喜你,PHP的模板技术会比较圆满地解决上述问题。
那么什么是PHP的模板技术?PHP模板即PHPlib的Template技术,是PHPLIB程序库中的一个主要模块之一,发展自Perl的Template。而PHPLIB则是在PHP上的一个扩展,提供了很多类库,能够方便地实现一些基本功能如用户认证,数据库封装等。我们可以在phplib.netuse.de上下载到其最新版本。要使用PHP模板,只需在PHPLIB的程序包中解开template.inc文件,并放到我们的PHP程序能够调用的目录里。
剥开神秘的面纱,模板技术的核心概念简单得令人心跳:要将你的美工页面指定为模板文件,只需将页面中活动的内容如数据库输出,用户交互等部分定义成形式为{variable}的变量放在模板文件中相应的位置,当用户浏览时,由PHP程序文件打开该模板文件,将模板文件中定义的变量进行替换,当然,替换成对应的数据库输出或者用户交互等动态生成内容,举例如下:
定义模板文件:Mytemplate.html
Mytemplte.html的内容为:
<html>
.....
<body>
...
...
</body>
</html>
我们可以看到,事实上模板文件就是一个普通的HTML文件,它包含了你所想要的版面、美工等要素,而内部的活动内容则以变量的形式存在,并等待被替换。显然,模板文件直接被浏览是毫无意义的,因为它不包含任何PHP程序,所有的内容都是“死”的,现在我们来看看,怎样来调用模板,让它“活动”起来。
PHP使用无限生命期Session的方法
在PHP4.0中加入了对Session的支持,方便了我们很多程序,比如购物车等等!
在很多论坛中,Session也用于处理用户的登陆,记录下用户名和密码,使得用户不必每次都输入自己的用户名和密码!但是一般的Session的生命期有限,如果用户关闭了浏览器,就不能保存Session的变量了!那么怎么样可以实现Session的永久生命期呢?
大家知道,Session储存在服务器端,根据客户端提供的SessionID来得到这个用户的文件,然后读取文件,取得变量的值,SessionID可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……
要实现Session的永久生命期,首先需要了解一下php.ini关于Session的相关设置(打开php.ini文件,在“[Session]”部分):
1、session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String来传递;
2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是Query_String来传递,默认值是“PHPSESSID”;
3、session.cookie_lifetime:这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!
4、session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!
还有很多的设置,不过和本文相关的就是这些了,下面开始讲使用永久Session的原理和步骤。
前面说过,服务器通过SessionID来读取Session的数据,但是一般浏览器传送的SessionID在浏览器关闭后就没有了,那么我们只需要人为的设置SessionID并且保存下来,不就可以……
如果你拥有服务器的操作权限,那么设置这个非常非常的简单,只是需要进行如下的步骤:
1、把“session.use_cookies”设置为1,打开Cookie储存SessionID,不过默认就是1,一般不用修改;
2、把“session.cookie_lifetime”改为正无穷(当然没有正无穷的参数,不过999999999和正无穷也没有什么区别);
3、把“session.gc_maxlifetime”设置为和“session.cookie_lifetime”一样的时间;
设置完毕后,打开编辑器,输入如下的代码:
------------------------------------------------------------------------------------
<?
PHP关于简单的页面缓冲技术
其实说它为技术,也许不能说是真正的技术。这只不过是我自已想出来的页面处理的方法,当然与别人的想法可能是一致的。不过我还是想给它一个好听的名字。那么我这里所指的页面缓冲是什么呢?就是指将动态生成的页面保存起来,供下一次的使用。这样下一次访问它可能就不需要动态生成了。就象提供了一个cache 一样。在我的网站上,也许你的网站也是如此,使用了象模板之类的技术,这样用户所看到的页面就是动态生成的。但是一个页面对于你是这样,对于别人可能还是这样,即在一段时间内是不会变化的,如果将上次生成的结果直接返回给下一次访问的用户不是更好吗?减少了生成时间,效率要高一些。我想随着网站的发展,速度与效率问题还是要考虑的。这里我给出我的实现,希望对大家有所帮助。只是一个思路,没有具体的实现。
使用条件
是不是所有的网页最好都使用呢?我想不需要,而且也不可能。之所以能缓冲就是因为下一次访问与上一次访问的内容可能是完全一样的。所以对于经常变化的页面就不合适了。比如页面上要显示计数信息的就不太合适。还有就是如果你的动态页面输出时,没有先输出到变量中,而是直接返回给用户,如使用echo,print ,readfile之类的输出,我个人认为现在还作不到。因为无法将输出结果得到,保存到文件中去(反正我是想了半天没有想出有什么可以将直将输出的东西截下来,重定向到文件中去)。那么比较适的动态页面的处理就是:输出结果应该可以放到一个字符串之中。所以使用条件就是:
页面基本不会变化
动态页面的处理结果可以存放到字符串中
这样使用模板类来处理动态页面就很好了。通过在模板中设置可替换的变量,然后根据实际的值替换相应的模板中的变量,同时可以将结果放到字符串中进行输出,这种模板类的处理非常适合保存处理后的页面。当然不使用模板类,也可以通过字符串的处理来生成输出结果也是可行的。至于怎么做就不讨论了。
实现
如前所述,不是一个真正的实现,而是一个实现的思路。
处理流程:
根据访问的要求,生成缓冲文件名
查看文件名是否存在,如果文件不存在,则生成动态页面,将页面保存,同时输出结果,结束;如果存在,则执行第3步
统计文件的修改时间,及与动态页面生成有关的文件的修改时间
比较缓冲文件的修改时间与其它页面的修改时间,如果其它页面修改时间大于缓冲文件修改时间,认为动态结果可能会发生变化,则重新生成动态页面结果,保存到文件中,且输出结果,结束;否则执行第5步
PHP关于session的问题集锦解决方案
PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。
1.
错误提示
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
分析及解决办法
这一类问题,的原因是你在程序中使用session_start()时,之前已经有实际的html内容输出了。或许你说,我没有啊,我只不过是echo或print一条消息了。很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的session_start()调到程序的第一行。
2.
错误提示
Warning: open(F:/689phpsessiondatasess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed
分析及解决方法
出现这样的错误语句一般是因为你的php.ini中关于session.save_path一项没有设置好,解决的方法是将session.save_path和session.cookie_path 设置置为
session_save_path = c: emp
session.cookie_path = c: emp
然后在c:目录下建立一个temp目录,即可
3.
错误提示
Warning: Trying to destroy uninitialized session in
分析及解决方法
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的。很多的朋友认为session_destroy()函数可以独立的运行,其实不然。解决的方法是在你调session_destroy()函数之前,要用session_start()开启session的功能。
4.问题:怎么获得当前session的id值呢?
最简单的方法是:
echo SID;
你会发现的。
5.问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了session_start()的缘故呢?
答:或许你确实认真的检查了你的php程序,在引用header()之前确实也没有任何的输出,并且在你的include文件中也没有任何的输出!但是你是否用光标键在?>这个PHP代码结束语句后移动检查呢?那么你会发现在?>这个后面,有一个空行或几个空格,你删除了这几个空行或空格,那么问题就解决了。
用PHP制作静态网站的模板框架(一)
模板能够改善网站的结构。本文阐述如何通过PHP 4的一个新功能和模板类,在由大量静态HTML页面构成的网站中巧妙地运用模板控制页面布局。
提纲:
===================================
分离功能和布局
避免页面元素重复
静态网站的模板框架
===================================
分离功能和布局
首先我们来看看应用模板的两个主要目的:
分离功能(PHP)和布局(HTML)
避免页面元素重复
第一个目的是谈论得最多的目的,它设想的情形是:一组程序员编写用于生成页面内容的PHP脚本,同时另一组设计人员设计HTML和图形以控制页面的最终外观。分离功能和布局的基本思想就是使得这两组人能够各自编写和使用独立的一组文件:程序员只需关心那些只包含PHP代码的文件,无需关心页面的外观;而页面设计人员可以用自己最熟悉的可视化编辑器设计页面布局,无需担心破坏任何嵌入到页面的PHP代码。
如果你曾经看过几个关于PHP模板的教程,那么你应该已经明白模板的工作机制。考虑一个简单的页面局部:页面的上方是页头,左边是导航条,其余部分是内容区域。这种网站可以拥有如下模板文件:
<!-- main.htm -->
<html>
<head><title>模板示例</title></head>
<body>
<table><tr><td>{HEADER}</td></tr>
<tr><td>{LEFTNAV}</td><td>{CONTENT}</td></tr>
</table>
</body></html>
<!-- header.htm -->
<img src="sitelogo.jpg">
<!-- leftnav.htm -->
<br><a href="foo">Foo</a>
<br><a href="bar">Bar</a>
可以看出页面如何由这些模板构造而成:main模板控制着整个页面的布局;header模板和leftnav模板控制着页面的公共元素。花括号“{}”里面的标识符是内容占位符。使用模板最主要的好处在于界面设计者能够按照自己的意愿编辑这些文件,比如设置字体、修改颜色和图形,或者完全地改变页面的布局。界面设计者可以用任何普通HTML编辑器或者可视化工具编辑这些页面,因为这些文件都只包含HTML代码,没有任何PHP代码。