问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php简单smarty入门程序实例

发布网友 发布时间:2022-04-23 05:00

我来回答

2个回答

懂视网 时间:2022-05-14 13:46

引用“星空浪子”php中文文档的例子:

聊天室,是 Web 站上打发无聊人士的秘密武器。同时,站长或其它人员也可以在这儿杀时间。甚至发生一段轰轰烈烈的网路恋情呢,就算没有,起码可以增加打字的速度。
聊天室,其实就是多人共同使用的 CGI 程式。程式将每个人输入的字串,依系统接收完成的时间整理过后,再送给各个使用者。而 Web 聊天室和 BBS 的聊天室不同的地方是 BBS 聊天室可以每收到一句话,就马上分送给每位在聊天室的网路使用者;Web 由于 CGI 程式不能像 BBS 的 telnet 一直连线,Web CGI 必须以最快的速度将资讯送出,然后结束连线。会形成这种情形,就是因为 Web 聊天室还是使用 HTTP 传输协定,在 HTTP 实作的版本,无论是 0.9、1.0 或是 1.1 版都不能长期占据网路连线的 Port。

为了解决资料无法马上传输的问题,及更新讯息的问题,Netscape 在 3.0 版浏览器之后使用了新的技术,而 Internet Explorer 也实作了这些 Netscape 研发出来的技术。Netscape 将它分成 Server Push 及 Client Pull 二种技术。Server Push 由 Web 伺服器将资料以多重 MIME 编码,送给使用者端,目前较少网站使用这种方式;而 Client Pull 则利用了 HTML 的 meta 标签,并利用 http-equiv="Refresh" 的属性,表示资料要重新载入,至于载入时间,则利用 content 属性来达成。

<meta> 标签通常都放在 <head>..</head> 的区段中,以便让浏览器可以仅早准备更新使用者端的网页。下面为 meta 和 PHP 合用的例子,设定为每十五秒重新载入一次。

<meta http-equiv="Refresh" content="15; url=<? echo $PHP_SELF; ?>">

如果不用 Server Push 或是 Client Pull 来做聊天室,是否有其它的方法,让 Web 的浏览器能聊天呢?答案是肯定的。可以使用 Java 或是 ActiveX (限 IE4、5) 来做甚至自行开发专属的 Browser Plug-in 程式 (如奇摩的聊天室),不过这就和 PHP 没有关系了,不是我们要的重点。

除此之外,由于定期更新所有网友的留言,为了怕写了一半因为 refresh 而被清掉尚未写好的字串,因此将聊天室以 frame 的页框技术来做是有必要的。下例就是聊天室的主程式。


<html>
<head>
<title>聊天室</title>
</head>
<frameset rows="*,40" border=1>
<frame src="list.php" name=list scrolling=auto>
<frame src="post.php" name=post scrolling=no>
<noframes>
<body>
本聊天室需使用页框,您的浏览器无法使用
</body>
</noframes>
</frameset>
</html>




程式中以 frame 带出二支 PHP 程式,建议将它们放在同一目录之中,例如 /chatroom,以便日后维护。另外,为了 list.php 及 post.php 可以使用相同的变数,下例将共通的变路路径放在 env.inc 中,可以将它放在 /chatroom 或是 Web 伺服器 (如 Apache) 的 PHP include 设定路径中。


<?php
// 档名: env.inc
$tempdir="/tmp/";
$chatfile="/tmp/abc";
?>


聊天室的后端可以设计的很简单,单纯的使用档案来做,也可以弄个资料库,将聊天的内容丢入,若是真的很在意系统效率,或许可以考虑使用 UNIX 的行程通讯 IPC 了。

本节即将使用者留言的内容放入档案中,在这儿的例子大部份都使用 UNIX/Linux 的外部指令。若系统无该指令 (或称程式),请自行安装相关程式。

实际上将资料丢入档案中会比使用资料库还快,若还很在乎速度,可以在 UNIX 机器中装上 RAM Disk,再将档案的存取路径都设在该 RAM Disk 上,保证存取速度能满足严苛的要求。在有些以高速度搜寻引擎为号召的网站,甚至将整个资料库资料都放到 RAM Disk 中,马上让系统速度提高十倍百倍,而且 RAM 的价格和其它解决方案相比的话还算很便宜。若使用 Windows NT,那就没办法了,看微软什么时候提供,或者用 Third Party 的产品了。

有些使用者可能对 UNIX 还不是很熟,在这儿先简介会用到的指令:

touch: 建立新档案,或修改旧档的最后更新日期。

echo 加上二个大于符号: 将字串显示转向到指定的地方。

tail: 显示档案最后数行的资料,内定值为十行,可使用减号加数字,修改欲显示的行数。

下面为送出及处理留言字串的程式,程式用到 env.inc 的档案。


<?php
// 档名: post.php
require("env.inc");
if (($chatuser!="") and ($chattext!="")) {
  $chatstr="<font color=8080ff>".date("h:i:s")."</font>-<font color=ff8080>".$chatuser."</font>: ".$chattext;
  $cmdstr="echo "".$chatstr."" >> ".$chatfile;
  if (!file_exists($chatfile)) passthru("touch ".$chatfile);
  passthru($cmdstr);
}
?><html>
<body bgcolor=ffffff leftmargin=0 topmargin=0 marginheight=0 marginwidth=0>
<form action=<? echo $PHP_SELF; ?> method=post>
<table border=0 width=100%><tr>
<td align=right>匿称:</td>
<td><input type=text name=chatuser size=8 value="<? echo $chatuser; ?>"></td>
<td align=right>发言:</td>
<td><input type=text name=chattext size=30 maxlength=500></td>
<td><div align=right><input type=submit value="送出"></td>
</tr></table>
</form>
</body>
</html>


程式先检查是否有输入字串,若无匿名及发言内容字串则显示发言的表单 (Form),若有资料则将字串及当时时间存入档案中 (利用 UNIX 的转向指令)。当然,为了防止错误,先检查是否有档案可存档,若没有则先 touch 该档,例中的档案就是 /tmp/abc。


<html>
<meta http-equiv="Refresh" content="5; url=<? echo $PHP_SELF; ?>">
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
<body bgcolor=ffffff leftmargin=0 topmargin=0 marginheight=0 marginwidth=0>
<?
// 档名: list.php
require("env.inc");

if (!file_exists($chatfile)) {
  echo "尚未开张</body></html>";
  exit;
}

$uniqfile=$tempdir.uniqid(rand());
$shellcmd="/usr/bin/tail -50 ".$chatfile. " > ".$uniqfile;
passthru($shellcmd);
$chatfilearray=file($uniqfile);
$j=count($chatfilearray);
for ($i=1; $i<=$j; $i++) {
  echo $chatfilearray[$j-$i]."<br> ";
}
unlink($uniqfile);
?>
</body>
</html>


上面的程式就是使用 Client Pull 的技术,每五秒就重新更新一次。同样地,它也 require 共用的 env.inc 档,要改变其中的变数时,马上就可以让所有的程式用到,这对开发网站来说,是蛮重要的方法,可以将网页程式中都会出现的地方。例如 Copyright (C) 1996-2000 的字串,放在一个档案上,到了新的一年,只要改一个档,整个站都改了。

if (!file_exists($chatfile)) {
  echo "尚未开张</body></html>";
  exit;
}

$uniqfile=$tempdir.uniqid(rand());
$shellcmd="/usr/bin/tail -50 ".$chatfile. " > ".$uniqfile;
passthru($shellcmd);

程式先检查有没有使用者发送聊天内容的档案 /tmp/abc,若没有就显示尚未开张,等使用者送聊天内容。若已有聊天资料,就抓出最后五十笔,在在另外的档案中准备显示。

$chatfilearray=file($uniqfile);
$j=count($chatfilearray);
for ($i=1; $i<=$j; $i++) {
  echo $chatfilearray[$j-$i]."<br> ";
}
unlink($uniqfile);

将档案读入阵列变数 $chatfilearray 中,并以最后的资料最先显示的方式送给浏览器端,当然可以使用对阵列排序的方法,但确定一定时最后存入的资料在最后面,将它排序实在很浪费 CPU 时间,因此就从最后 echo 到最前面的资料。使用完成还要用 unlink() 指令,将临时档杀掉。

热心网友 时间:2022-05-14 10:54

本文实例讲述了php简单smarty入门程序。分享给大家供大家参考。具体如下:
首先要有3个文件夹configs、templates、templates_c,在configs文件夹中有一个配置文件:test.conf,代码:
title
=
Welcome
to
Smarty!
cutoff_size
=
40
[setup]
bold
=
true
templates中有模板文件:test.htm:
<html>
<head>
<title>Smarty
Test</title>
</head>
<body>
<H1>Hello,
{$Name}</H1>
</body>
</html>
php文件代码:
<?php
require
'libs/Smarty.class.php';
//包含Smarty类库文件
$smarty
=
new
Smarty;
//创建一个新的Smarty对象
$smarty->assign("Name","Simon");
//对模版中的变量赋值
$smarty->display('test.htm');
//显示页面
?>
运行后显示的页面代码:
<html>
<head>
<title>Smarty
Test</title>
</head>
<body>
<H1>Hello,
Simon</H1>
</body>
</html>
运行之后,还在templates_c文件夹中生成一个php文件:
<?php
/*
Smarty
version
2.6.22,
created
on
2009-03-19
13:20:00
compiled
from
test.htm
*/
?>
<html>
<head>
<title>Smarty
Test</title>
</head>
<body>
<H1>Hello,
<?php
echo
$this->_tpl_vars['Name'];
?>
</H1>
</body>
</html>
这个文件就是浏览所显示出来的效果。
希望本文所述对大家的php程序设计有所帮助。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 尿酸高会导致哪些疾病发生? 阻断攻击(Denial Of Service,DOS),也称堵死攻击,是一种针对( )的安全攻击 肌酐高尿酸高血里有炎症恶心怎么回事 尿酸高的危害知道吗? 尿酸会引起身体什么不良反应? 尿酸高会引起什么症状? 血尿酸高吃酸是否会引起恶心呕吐 光伏发电太阳能板产生的辐射是短波辐射吗? 光伏发电太阳能板产生的辐射对人体有害吗? 国内太阳能光伏公司排名? 太阳能光伏发电的社会意义是什么? 做光伏发电板需要哪些设备才能办生产厂 从事光伏太阳能电池片生产工作对人体的危害 什么牌子的光伏发电板最好? 太阳能板是怎么制作出来的? 太阳能电池板的制作流程? 国内有哪些知名的太阳能电池板生产商?谢谢! 全微分存在是偏导数存在的什么条件。。 函数f(x,y)在点(x0,y0)处全微分存在的条件是什么? M(x,y)dx+N(x,y)dy=0为全微分方程的充要条件是什么 尿酸偏高的原因及危害? 辛弃疾的名言 辛弃疾的名言名句 如果我要学习php,需要先学习什么呢? 尿酸偏高的危害有哪些?尿酸偏高是什么原因引起的啊? 关于辛弃疾的名句 如何学习php(新手) 尿酸高会引起什么病? 辛弃疾的名句有什么 尿酸高会引起哪些疾病?吃什么可以控制尿酸? 辛弃疾的千古名句是什么 学习php,首先要学什么?有没有好的方法? 最近被查出尿酸高,会对身体哪些器官造成不良影响? 辛弃疾词集名句 率弃疾名言 尿酸过高会引起什么样的后果? AE无法导出视频是什么原因? PHP 新手该如何学习使用开发框架,有案例吗? 尿酸高有什么危害会引起什么? 宋代诗人辛弃疾的名句众里寻他千百度蓦然回首