使用PHP本身的对话
PHP4.0中最令人兴奋的特性应该是对对话的支持,PHP3.0的用户必须使用第三方的软件否则就不能使用对话,不支持对话一直是PHP培训最大的缺憾之一。
只要用户在浏览你的网站,你就可以利用对话维护与特定用户有关的变量,而无需建立多个cookie、使用隐藏表格字段或将信息存储在数据库中。
在一个网页上启动一个对话,就会使PHP引擎知道你想启动一个对话(如果还没有启动)或者继续当前的对话:
session_start();
启动一个对话将通过cookie向用户发送一个识别字符串(例如940f8b05a40d5119c030c9c7745aead9),在服务器端,会创建一个与识别字符串匹配的临时文件,例如sess_940f8b05a40d5119c030c9c7745aead9,这个文件中包含的对话变量以及它们的值。
用来显示对话的作用的最常见的例子是访问计数器。启动PHP模块,确保PHP代码是文件的第一行,在PHP代码之前不要有空格、HTML代码和其他的代码。因为对话会发送一个头部,因此如果在session_start()之前有空格和HTML代码,就会得到一个出错信息。
<?
//如果还不存在一个针对某用户的用户,则启动一个对话:
session_start();
然后一个名字为count的变量:
session_reGISter(&39;count&39;);
一个对话变量后,只要对话存在,名字为count的变量也就存在。现在,count变量还没有被赋值,如果对它执行加1操作,它的值就变为了1。
$count++;
把上述内容综合在一块儿,如果还没有启动一个对话,就会启动一个对话;如果不存在一个对话id,就为用户指定一个好了,一个名字为$count的变量,对$count执行加1操作表示用户已经首次访问了该网页。
要知道用户在当前的对话中访问本页面的次数,只要显示$count变量的值即可:
echo"<PYou&39;vebeenhere$counttimes.</p";
全部的访问计数器代码如下所示:
<?
session_start();
session_register(&39;count&39;);
$count++;
echo"<PYou&39;vebeenhere$counttimes.</p";
?
如果重新加载上述的代码文件,就会发现变量count的值增加了1,很酷吧。
还可以在对话中一个数组变量,假设我们了一个名字为$faves的变量:
$faves=array(&39;chocolate&39;,&39;coffee&39;,&39;beer&39;,&39;Linux&39;);
可以象一个简单变量那样一个数组变量:
session_register(&39;faves&39;);
引用数组变量与引用简单变量没有什么二样,如果一个用户在网页上指出在生活中的爱好时,可以把他的爱好到一个被称作$faves的数组变量中,然后可以在另一个网页中很方便地把这些爱好显示出来:
<?
session_start();
echo"Myuserlikes:
<ul";
while(list(,$v)=each($faves)){
echo"<li$v";}
echo"</ul";
?
然后你就得到了一个关于用户爱好的清单。
对话变量不能被查询字符串覆盖,也就是说我们不能输入yourdomain/yourscript.php?count=56给变量$count指定一个新值,这一点对于安全很重要:只能在服务器端的代码中删除一个没有的对话变量。
如果要完全删除一个对话变量,首先需要从系统中注销它:
session_unreGISter(&39;count&39;);
要完全删除一个对话变量的代码是非常简单,如下所示:
session_destroy();
使用对话变量可以减少访问数据库的频率,使代码更加清晰,而且可以减少对用户发送的cookie的数量,它是最简单的方法了。
三、文件是我们的朋友
无论你在开发的网站规模的大小,都应该意识到代码重用的重要性,无论这些代码是HTML、还是PHP代码。例如,你必须至少每年改变一次包含版权信息的页脚,如果你的网站含有1000个页面,每年修改一次也是个很烦人的事儿。
在PHP中,至少有几个函数可以帮助你实现代码重用的目的,所使用的函数取决于你所重用的代码,主要的函数有:
*include()andinclude_once()
*require()andrequire_once()
include()函数包含并对给定的文件进行计算,例如:
include(&39;/home/me/myfile&39;);
在include文件中的任何代码都在include()出现的代码范围内执行,你可以通过联合使用include()和fopen()在自己的服务器上包含静态文件,在另一台服务器上包含目标文件。
include_once()的功能与include()相同,二者之间的区别在于它会检查一个文件中的代码是否已经包含在现有的代码中,如果代码已经存在,则不会再次包含它。
require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。
为也了解其内容,在版权信息、静态文字和其他不包含变量的元素或者依赖其他正在执行的代码的元素中我更趋向于使用require函数。例如:
<HTML
<HEAD<TITLESomething</TITLE</HEAD
<BODY
[alotofcontent]
<?
//insertcopyright
require(&39;/home/me/mycopyright&39;);
?
</BODY
</HTML
另一方面,我经常在文件的开始使用include()来控制许多的函数:
<?
//得到函数库
include(&39;/home/me/myfunctions&39;);
//doPHPthingswithmyfunctions?
<HTML
<HEAD<TITLESomething</TITLE</HEAD
<BODY
[alotofcontent]
</BODY
</HTML
下一个问题就该是“include和require文件在哪里?”,对这个问题简单的回答是,“系统中的任意地方。”如果你的代码中包含有带有用户名和口令的数据库连接,你肯定不会将它们都放在文档根目录中向所有的人都开放。