文章索引 : 1、PHP 5.0 + IIS 6.0 的安装配置2、MySQL + PHP 5.0 的安装调试3、GHOST2003启动盘-使用说明4、PHPLIB 的安装5、session概述6、给初学PHP的5个入手程序7、用php创建简单的和多页的表单8、上海复旦流媒体技术应用方案9、中宽用户管理系统(CBSMS)10、win2000 公钥基础结构及应用11、PHP4.2以后版本中使用表格数据12、分离美工 杜绝重复13、模板技术在PHP中的应用14、用PHP制作静态网站的模板框架15、网站设计65条原则16、网站策划书参考17、网站规划书浅析18、帮你免于失业的十大软件技术19、使用PHP实现动态网页20、初学入门 PHP 和 MySQL21、河南网站建设技术规划方案22、网站首页的设计23、《成功项目管理训练营》深圳24、Java安全通信、数字证书及数字证书应用实践25、为测试 Java 应用程序生成证书链26、关于配置证书服务器,和自己颁发企业证书27、数字证书的基本概念28、证书是怎样的验证过程29、win2000pro下 openssl安装(入门级)30、在IIS端配置数字证书31、流媒体如何防止盗链32、DRM数字加密技术33、网站规划书写作34、"打开,另存为,属性,打印"等14个JS代码 | ||||||||||||||||
|
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
|
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
★ "GHOST2003英文原版"的使用方法: "GHOST2003英文原版"适用于高级用户,但常用功能所有用户都应熟练掌握. 因篇幅有限,只举一个最常见的例子,其余的大家可以举一反三: 例:如何用GHOST备份和恢复C盘? 1,备份"C盘": 当你的C盘新装(重装)系统后,都要用GHOST备份一下,以防不测: (1)启动GHOST:用本软盘启动电脑,出现主菜单后,选择"1.Ghost"菜单,回车,进入 GHOST界面. (2)选择基本动作:单击Local→Partition→To Image (这步一定不要选错) (3)选择源分区:这里因为是备份C盘,所以在弹出窗口中单击第一行,单击"OK"确定. (4)选择目标分区:这里可以选D盘,E盘...等(任意一个有足够空间的分区均可), 我们选D盘,即在弹出窗口中单击第二行. (5)输入文件名:在弹出的窗口中的上方选择一个文件夹(不选也可,即保存的根 目录里,自己定吧),下方输入备份文件的名称(带有GHO的后缀名),如"C.GHO",单击 "SAVE"(存储). (6)选择压缩比例:有三个可选项,No表示不压缩,速度最快;Fast表示压缩比例小, 速度较快(推荐);High表示压缩比例最高,速度最慢. (7)开始备份:在弹出的窗口中选择第一个按钮就OK了.下面的就是等待了.整个 备份过程一般需要十几分钟(时间长短与C盘数据多少,硬件速度等因素有关),进度条 到100%时,会再弹出一个窗口,单击按钮就OK了. 2,恢复"C盘": 当你的C盘出现严重软件问题时,用以前备份过的GHO文件进行恢复: (1)启动GHOST:用本软盘启动电脑,出现主菜单后,选择"1.Ghost"菜单,回车, 进入GHOST界面. (2)选择基本动作:单击Local→Partition→From Image (这步一定不要选错) (3)选择源分区:这里因为是备份到D盘,所以在弹出窗口中单击第二行,单击"OK"确定. (4)选择文件名:在弹出的窗口中的上方选择"C.GHO",单击"LOAD"(调出). (5)选择目标分区:当然是C盘了,即在弹出窗口中单击第一行. (6)开始恢复:在弹出的窗口中选择第一个按钮就OK了.下面的就是等待了.整个 恢复过程一般需要十几分钟(时间长短与GHO文件大小,硬件速度等因素有关),进度条到 100%时,会再弹出一个窗口,选择第二个按钮(重新启动电脑)就OK了. ★ "GHOST2003中文向导"的使用方法: "GHOST2003中文向导"适于初级用户,只要按提示一步一步操作即可,具体方法:略. 注意:本版"中文向导"暂不支持NTFS等特殊格式的分区. ★ GHOST参数详解: 本盘"中文向导"主要依据"MAFA3光盘11月版"中的DOS批处理编写,本站长作了必要的 修改和优化,其中的"GHOST参数"是批处理的灵魂,以下从网上摘录的文章有助于大家理解 和修正本盘的GHOST_CN.BAT: (一)常用参数: -rb 本次Ghost操作结束退出时自动重启。这样,在复制系统时就可以放心离开了。 -fx 本次Ghost操作结束退出时自动回到DOS提示符。 -sure 对所有要求确认的提示或警告一律回答“Yes”,和-CLONE选项一起使用来 避免提问。此参数有一定危险性,只建议高级用户使用。 -fro 如果源分区发现坏簇,则略过提示强制拷贝。此参数可用于试着挽救硬盘 坏道中的数据。 @filename 在filename中指定txt文件。txt文件中为Ghost的附加参数,这样做 可以不受DOS命令行150个字符的限制。 -f32将源FAT16分区拷贝后转换成FAT32(前提是目标分区不小于2G)。WinNT4和 Windows95、97用户慎用。 -bootcd 当直接向光盘中备份文件时,此选项可以使光盘变成可引导。此过程 需要放入启动盘。 -fatlimit 将NT的FAT16分区限制在2G。此参数在复制Windows NT分区,且不想 使用64k/簇的FAT16时非常有用。 -span 分卷参数。当空间不足时提示复制到另一个分区的另一个备份包。 -auto 分卷拷贝时不提示就自动赋予一个文件名继续执行。 -crcignore 忽略备份包中的CRC ERROR。除非需要抢救备份包中的数据,否则不 要使用此参数,以防数据错误。 -ia 全部映像。Ghost会对硬盘上所有的分区逐个进行备份。 -ial 全部映像,类似于-ia参数,对Linux分区逐个进行备份,对其它分区则用 正常方法。 -id 全部映像。类似于-ia参数,但包含分区的引导信息。 -quiet 操作过程中禁止状态更新和用户干预。 -script 自动按照脚本文件中的命令来运行程序,可以执行多个Ghost命令行, 命令行存放在指定的文件中。 -span 启用映像文件的分卷功能。 -split=x 将备份包划分成多个分卷,每个分卷的大小为x兆。这个功能非常 实用,用于大型备份包复制到移动式存储设备上,例如将一个1.9G的备份包复制到 3张刻录盘上。 -z 将磁盘或分区上的内容保存到映像文件时进行压缩。-z或-z1为低压缩率 (快速);-z2为高压缩率(中速);-z3至-z9压缩率依次增大(速度依次减慢)。 -clone 这是实现Ghost无人备份/恢复的核心参数。 使用语法为: -clone,MODE=(operation),SRC=(source),DST=(destination),[SZE(size), SZE(size)......] 此参数行较为复杂,且各参数之间不能含有空格。 其中operation意为操作类型,值可取:copy:磁盘到磁盘;load:文件到磁盘; dump:磁盘到文件;pcopy:分区到分区;pload:文件到分区;pdump:分区到文件。 Source意为操作源,值可取:驱动器号,从1开始;或者为文件名,需要写绝对路径。 Destination意为目标位置,值可取:驱动器号,从1开始;或者为文件名,需要写 绝对路径;@CDx,刻录机,x表示刻录机的驱动器号,从1开始。 下面举例说明: 命令行参数:ghostpe.exe-clone,mode=copy,src=1,dst=2 完成操作:将本地磁盘1复制到本地磁盘2。 命令行参数:ghostpe.exe-clone,mode=pcopy,src=1:2,dst=2:1 完成操作:将本地磁盘1上的第二分区复制到本地磁盘2的第一分区。 命令行参数:ghostpe.exe-clone,mode=load,src=g:/3prtdisk.gho,dst=1, sze1=450M,sze2=1599M,sze3=2047M 完成操作:从映像文件装载磁盘1,并将第一个分区的大小调整为450MB, 第二个调整为1599MB,第三个调整为2047MB。 命令行参数:ghostpe.exe-clone,mode=pdump,src2:1:4:6,dst=d:/prt246.gho 完成操作:创建仅具有选定分区的映像文件。从磁盘2上选择分区1、4、6。 了解了这些参数后,我们就可以轻松地实现Ghost的无人备份/复制/恢复了。 冲杯咖啡吧。 注意事项 1.在备份系统时,单个的备份文件最好不要超过2GB。 2.在备份系统前,最好将一些无用的文件(如win386.swp)删除以减少Ghost文件的 体积。通常无用的文件有:Windows的临时文件夹、IE临时文件夹、Windows的内存 交换文件。这些文件通常要占去100多兆硬盘空间。 3.在备份系统前,整理目标盘和源盘,以加快备份速度。 4.在备份系统前及恢复系统前,最好检查一下目标盘和源盘,纠正磁盘错误。 5.在恢复系统时,最好先检查一下要恢复的目标盘是否有重要的文件还未转移, 千万不要等硬盘信息被覆盖后才后悔莫及啊。 6.在选择压缩率时,建议不要选择最高压缩率,因为最高压缩率非常耗时,而 压缩率又没有明显的提高。 7.在新安装了软件和硬件后,最好重新制作映像文件,否则很可能在恢复后出现 一些莫名其妙的错误。 (二)不常用参数: -IR:和ID一样,但不将分区调整为扇区界限。 -IB:只复制磁盘的启动扇区。 -OR:覆盖空间并进行完整性检查。 -NOLILO:复制后不要试图去修正LILO启动调入器。 -FDSZ:清除目标磁盘上的标志性字节。 -FDSP:保留目标磁盘上的标志性字节。(优先级高于-FSSZ) -LPM:LPT主并行连接模式。 -LPS:LPT从并行连接模式。 -TCPM:TCP/IP主连接模式。 -TCPS:TCP/IP从连接模式。 -USBM:自动进入USB主模式。 -USBS:自动进入USB从模式。 -JL:记录多点传送会话诊断消息到文件。 -JS:设置最大的多点传送值。 -JA:设置多点传送会话的名称。 -CHKIMG:检查映象文件的完整性。 -PWD:指定密码。 -SKIP:指定需要跳过的FAT文件系统中的文件或目录。 -PMBR:当进行任何磁盘复制操作时,保留目标磁盘中的主引导记录。 -F64:当调入旧映象文件时允许64K的簇大小。 -FATLIMIT:防止FAT分区大小超过2兆。 -NTD:允许NTFS内部诊断检查。 -NTC-:禁止NTFS连续簇分配。 -NTCHKDSK:强制CHKDSK在下一个NTFS卷启动。 -NTIC:忽略NTFS卷上的CHKDSK位。 -NTIL:忽略非空的NTFS日志文件检查位。 -NTIID:忽略分区系统标识符的复制。 -TAPEBUFFERED:默认的磁带模式。 -TAPESAFE:当使用旧的或不可靠的磁带时有用。 -TAPESPEED:允许控置磁带速度。 -TAPEUNBUFFERED:强制非缓冲的磁带输入输出。 -TAPEEJECT:强制磁带操作完后弹出。 -TAPEBSIZE:磁带块大小。 -NOFILE:禁止文件询问。 -DL:指定存在的硬盘号。 -FIS:使用检测出的硬盘最大值。 -FNX:禁止扩展13号中断支持。 -FFX:使用扩展13号中断。 -FNI:禁止直接IDE硬盘存取支持。 -FFI:使用直接IDE硬盘存取。 -FNS:禁止直接ASPI/SCSI硬盘存取支持。 -FFS:使用直接ASPI/SCSI硬盘存取。 -NOSCSI:禁止使用ASPI存取SCSI设备。 -BFC:处理坏的FAT簇。 -VDM:写入前使用使用磁盘校验命令来检查磁盘上的每个扇区。 -CRC32:使用CRC32校验。 -FCR:当建立文件时创建校验文件。 -AFILE:使用指定的中止记录文件。 -DI:显示诊断。 -MEMCHECK:诊断内存。 -DD:记录磁盘信息到GHSTSTAT.TXT -DFILE:使用指定的信息日志文件。 -FINGER:显示详细的指纹信息。 -VER:显示程序版本号。 声明:由于以上参数所依据的版本可能是GHOST7.0或更早的版本,有些参数可能已经过时; 又由于本盘采用的是GHOST2003是个人版,所以有些参数(如部分与网络相关的参数)无法使用. 总之一句话,请大家多提意见和建议,以有利用本盘的不断改进。 DOS之家 葛明阳(gmy)制作 http://doshome.com [email protected] QQ:53617565 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
|
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
一、session概述 session是什么,刚开始我也不明白,非专业词典翻译为会议,会议期。作个不太恰当的比喻吧(虽然不恰当,但意义却是一样的),,session是你和网站之间的感情。 session在WEB技术中占有非常重要的份量。由于网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。因此我们必须 通过session记录用户的有关信息,以供用户再次以此身份对web服务器提供要求时作确认,例如,我们在某些网站中常常要求用户登录, 但我们怎么知道用户已经登录了呢,如果没有session的话,登录信息是无法保留的,那岂不要让用户在每一页网页中都要提供 用户名和密码。 当然,session不光用于用户身份认证功能,还可能用于其它方面,以后我们会提到的。 session用中文来解释就是会话期。一个会话期开始于用户输入一个站点的网址时,结束于他离开这个站点时。 session最早出现在动态脚本语言Active Server Pages中,它的功能之强大,是一句话无法说清楚的。 当php还在3.0版本时,session是它永远的痛。虽然php具有执行速度快,使用灵活,功能强大等优点,但因为session的问题,使 很多站点的开发放弃了php,至少我的老板是这样认为的。当时有很多php免费函数库提供在php3上实现session的方案,但都让人感觉不正宗。 就好象你花好几千大洋买的手机却配置一个很粗糙的草作的袋子一样,虽然功能是一样的,但总让人觉得别扭。php4的出现让php在session问题上 有了翻身的机会。虽然它的session实现还不是很理想(主要是效率问题),但毕竟是它自己实现的,而且可以实际使用了。 那我们用session干什么呢,你说了半天,我用不上的话,你岂不有卖纸张之嫌。OK,我们来看看session有什么用:作过网站的人都有 这样的体会,在一页页面中的变量(在本章都指服务器端变量,下同)是不能在下一页中用的,虽然有一些办法可以实现,比如用form,urlstring等等 但有些对于用户来说是不方便的,即使让form自动提交,但其中的延时在现今的网络状况下足以让人窒息,而这两种方法都明显加大程序员的负担。如果你 正在开发一个大型项目,那这些额外的负担是不能忽略的。而有了session就好办了,session中注册的变量可以作为全局变量使用。什么,全局变量? 好极了。这样一来,你知道有什么用了吧:最主要的用于用户身份认证,程序状态记录,页面之间参数传递。 说了它这么半天的好处,你已经动心了吧,先别高兴,它还有缺点呢:它是用文件保存的变量(当然效率不高了,虽然可以用别的方式,但 很麻烦的),不能保存对象。与之相对的是,asp中的session可以保存对象变量,用内存变量来保存session变量。但为什么我们还选用php呢,呵呵, 为什么,你能从本书的开始看到这章,想必你也应该明白了吧,你还不明白,Faint,你再从头看起吧,我保证你成为PHP专家^_^。 session是怎样实现的呢?呵呵,你一定以为很高深吧,我来告诉你它的秘密。如果说只保存变量的话,很多读者都明白,这是很简单的, 但前面我们说过,http协议是一种无状态的连接,你怎么知道那个变量是谁的,这个变量又是谁的呢?在session实现中用cookie实现的。cookie 存在于客户端,也就是用户的机器中,里面保存着用户的session ID,也就是session号码,当用户的浏览器请求服务器时把session ID也一起送到 服务器,这样服务器就可以识别你是谁,也就可以把变量识别开了。这样我们就不难理解了,为什么有时session会失效了。不信的话,你可以试试: 在IE的"工具"菜单上有"Internet选项"菜单,打开后再选"安全"->"自定义级别",将安全设置中的"允许使用每个对话cookies"设为禁用,再看看 session能不能用。这下明白了吧!不过php4在linux/unix平台上可以自动检查cookies状态,当cookies 不可用时,自动会把session ID 附带在url上进行传递。这是它在session方面比asp多的唯一的优点了。 二、php3,4中session的实现 在php3中是没有session这种东东的,但我们又需要,怎么办呢?别急,有很多人替你做了这些,这其中最有名的要算phplib了。你可以去国外下 载,也可以上国内大部分php站点下载。我们要做的第一件事是让phplib和php3结合在一起使它能工作。为了能实现这方面的功能,我们需要先安装phplib。 跟着我来做,很容易的(以下方法在win2000+php3.0.16+apache1.3.12+phplib7.2c+mysql3.23.21 for win32 上通过) phplib最基本的功能包括用户认证,Session管理,权限及数据库的抽象化。 怎样使用phplib来实现session功能呢? 一、首先你将phplib解开,里面有一个目录叫"php",将这个目录拷贝到apache的安装目录下。以下以笔者的机器为例: 我的apache安装在d:apache 目录下,我将上面的"php"目录拷贝到d:apache,并将phplib下的pages目录下的文件和目录一起拷贝到 d:apachehtdocs下,注意不带目录本身。 phplib的类库需要根据系统进行初始化,你可以修改local.inc文件,其中包含着一些基本参数,你可以根据自己机器的实际情况来进行修改。 将d:apachephpprepend.php3文件中的一段程序改为如下样子: if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { $_PHPLIB["libdir"] = "d:/apache/php/"; //这儿改为你放phplib下php目录的路径 } 然后将d:apachephplocal.inc文件改如下: class DB_Example extends DB_Sql { var $Host = "localhost";//你的mysql数据库所在主机名 var $Database = "test";//数据库名 var $User = "root";//数据库用户名 var $Password = "";//数据库用户口令 } 最后一步执行解开的phplib目录中的stuff目录下的create_database.mysql文件,生成初始表。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
加入日期:2003年05月31日 03:47:12 AM 作者:Kinter 论坛转载 php的基本语法格式与C类似,没学过C的朋友花几分钟看看别人的源代码怎么写的,就基本熟悉格式了。 ---------------------------------------------------- 下面进入正题 准备了5个程序: 1.使用一个基本的函数,其结果是字符串形式,用echo显示出来 2.显示一个漂亮的表格 3.一个表单例子,提交并显示提交结果 4.数据库操纵例子(投票程序) 5.动态创建图形并保存例子 ---------------------------------------------------- #程序1: /* 功能:显示PHP极其APACHE的配置环境和各种参数变量*/ echo phpinfo();/* php有丰富的函数库,大量便捷的函数极大的提高你的工作效率。phpinfo()就是其中一个函数*/ ?> ---------------------------------------------------- #程序2: /* 功能:显示一个漂亮的表格 function useColor() { /* ** 请牢记我们最后使用过的颜色标记 */ static $ColorValue; /* 选择下一个颜色 */ if($ColorValue == "#00FF00") { $ColorValue = "#CCFFCC"; } else { $ColorValue = "#00FF00"; } return($ColorValue); } print "
?> ---------------------------------------------------- #例子3 if($send) { echo "发送结果:$send"; exit; } ?> ---------------------------------------------------- #例子4 :投票程序 在这里:http://www.21php.com/forums/showthread.php?s=&threadid=524 #例子5: 动态创建并保存图形 //必须有GD库支持 Header("Content-type:image/jpeg"); $im=imagecreate(400,30); $black=ImageColorAllocate($im,0,0,0); $white=ImageColorAllocate($im,255,255,255); ImageTTFText($im,20,0,10,20,$white,"c:windowsfontsRaavi.ttf","i am kinter"); ImageJpeg($im,"hello.jpeg"); ImageDestroy($im); ?> |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
PHP最有用的特性之一是它能够自动将表单中的变量值赋予PHP变量。这使得表单处理变得非常快捷。 因此,如果你送出一个内含输入栏位值的表单如下: 当你用PHP处理此页面,$name变量的值就会是 Glen Morris。 因此,你可以用如下的方式把值打印出来: echo "Hi $name!"; 或者像这样测试其值: if ($name == "Glen Morris") { echo "Please check your email."; } 这有一个用PHP处理基本表单的很好方法。例如,我们需要做一个简单的问卷调查,要求填写者必须填写他们的姓名,电子邮件地址,并回答一些我们感兴趣的问题。 首先,我们会将页面拆成两个函数。因此,我们只需要写一个 PHP页面并用程序逻辑去控制对用户的显示内容就可以了,而不是写两个单独的网页(一个针对表单部分,另外一个针对处理表单的CGI脚本)。 显示表单第一个函数用来显示表单:
functiondisplay_form() { global $PHP_SELF; ?>
} ?> 以上文字大部分都只是产生表单所需的HTML代码,然而,我们必须对一些复杂的地方加以说明的。 首先是变量$PHP_SELF。$PHP_SELF是一个很方便的参考变量——其值就是当前页面的 URL。因为要让该网页处理此表单,我们把这个表单的TARGET设为$PHP_SELF。通过使用$PHP_SELF变量而非该页面实际的实际路径,我们可以对此脚本任意重命名或移动位置,而不必担心每次重用此段代码时,都要重新详细定位页面。 顺带提一下,以下这一行 global $PHP_SELF; 表明我们要获取全局变量$PHP_SELF。不同于函数,变量在其声明范围具有局部生存期,即可以与在函数外声明的同名函数有不同的值。如果我们没有明确告之PHP我们需要的是全局变量$PHP_SELF,我们就会发现,$PHP_SELF为空。 再者,可以注意到我们甚至在函数内部出入PHP模式。这是完全合法的语法。PHP 能智能化地自动忽略其中所有的HTML代码,只寻找下一段PHP代码的起始位置。这甚至比起一直处于PHP模式中用echo输出HTML码还要快。 来看单选按钮及勾选框中的 NAME 属性,你会注意到times[]在变量名后面跟著一对括弧,而cheese后却没有。这是因为单选按钮只让你选择一个正确的答案,因此cheese的值只会有一个字符串。相反,勾选框可以让你选择多个答案。PHP要存放这些答案必须将其放到一个数组中。在times变量名后面加上[],就可以让PHP知道它是一个数组而非标量。 最后,我们还有一个隐藏变量stage。我们用$stage来判断是否要显示表单还是要计算处理结果。 表单处理接下来是处理表单的函数,process_form()。
functionprocess_form() { global $name; global $cheese; global $times; if ($cheese == 'brie') { $cheese_message = 'I love brie.'; } elseif ($cheese == 'cheddar') { $cheese_message = 'Cheddar is awesome!'; } else { $cheese_message = 'Fresh mozzarella is divine.'; } $favorite_times = count($times); if ($favorite_times <= 1) { $times_message = 'You should eat cheese more often.'; } elseif ($favorite_times > 1 && $favorite_times < 4) { $times_message = 'Those are good times to eat cheese.'; } else { $times_message = 'You are eating too much cheese.'; }
echo "Hello $name."; echo "$cheese_message $times_message"; } ?> 首先,如同我们处理$PHP_SELF一样,我们获取表单里面的全局变量。然后检查cheese选项中哪一个被选中以按选择创建回应。 下面,我们使用count()函数,以计算被选为喜好时段的时段数。在过去,必须通过检查$cheese每一个可能的值来实现,而现在我们只要利用大于、小于来比较$favorite_times的大小就可以了。如果你希望知道“$favorite_times > 1 && $favorite_times < 4” 中“&&”的含义,它表示“and”。因此,$favorite_times必须大于一而且小于四,此条件才能成立。 在代码最后,我们输出用户名以及我们提供给他的信息。当然,你也可以实现各种各样有趣的变化,例如,将信息存在数据库中,或通过查询数据库中信息并以适当格式返回结果。 组合表单现在我们已得到此二函数,接着只需要再放入一小段代码,就可以把二者连接一起,并建立代码所需的逻辑关系。在display_form() 以及process_form() 下加入以下代码:
if (empty($stage)) { display_form(); } else { process_form(); }
?>
首先,我们检查变量$stage是否为空。在 PHP中,一个变量如果未曾初始化(即未曾赋值)或其值为零(也就是被赋值为零,即空白字串或者是零值),则该变量被视为空值。当用户首次访问网页时,$stage变量值为空。因此我们希望显示表单;否则我们将处理表单内容。
以上即如何使用PHP处理表单的过程。
如果可以在一个页面上建立多个表单,为何不能建立跨多页面的表单呢? 不幸的是,用 HTTP从一页面传送数据到另一页面并不轻松。因为在 HTTP协议中没有内建机制以定义系列页面的概念。不过,仅需通过一些灵巧的技巧,以及PHP 某些有用的函数,我们就可以不用花太多力气而突破此限制。在此章节中,关键思想在于把上一页面获取的输入存到下一页面表单的隐含变量中。当我们在屏幕不同页面切换时,代码也在页面间传递信息,每一表单都含有上一个表单的数据。这个方法似乎有点笨拙,不过就目前情况而言是最为简便的方法——且无需使用数据库或cookies。 意料之中的是我们将扩展对变量$state的使用以适应此特性。这正是为什么我们过去学习了关于此技巧的内容,而没有打算使用更为简单的方式处理单一页面中的多个表单。 为了方便起见,我们将重复使用先前的表单范例。但这次我们将将其拆分为两个页面,而非把有关乳酪的重要问题跟用户名称放在同一页面之上。 由此会得到三个函数而非两个。此外,对函数略微更名以反映其内容上的改变。display_form() 现已改名为display_name()。
function display_name() { global $PHP_SELF; ?>
} ?> 与先前所介绍的函数相同,但我们先解决下一问题,并把下一stage的名称改为 cheese以更明确地告之用户下一步要做什么。 接下来是display_cheese()。
function display_cheese() { global $PHP_SELF; global $name; ?>
} ?> 以上的代码看起来应该非常熟悉。除在输出隐藏的stage元素前先输出上一部分数据中的 $name变量名及值之外,我们没有做任何意料之外的修改。我们并未直接输出变量值,而是通过一个名为htmlspecialchars()的PHP函数。在HTM中,有以下四个字符除被作为标记(markup)使用外,在其他地方不应被使用的:“<”、“>”、“"”、以及“&”。因此,为了确保不使浏览器造成混乱,我们通过htmlspecialchars()函数使用$name变量。由此,某个人的名字原为"Bret & Jeff"就会成为"Brett & Jeff" 了。 现在,当提交此新表单时,不会漏失任何信息。 以上技巧的作用是我们不必更改原process_form() 函数任何部分。事实上,我们还会保持函数名称不变。仅需对页面显示逻辑加上新的一行。
if (empty($stage)) { display_name(); } elseif ($stage == 'cheese') { display_cheese(); } else { process_form(); } ?> 看到了吗?我们只需在先前的两个声明中加入elseif。这正是使用变量$stage的巧妙之处。如果我们要再添加几个页面,只需写一个新函数以显示所要的内容,并当其显示时加入一行代码对其进行控制即可。 本文作者:David Sklar是Student.Net Publishing的首席信息官。 Adam Trachtenberg是Student.Net Publishing产品副主管。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
一、了解网上直播: 以前,对于一些重要活动,例如足球世界杯,春节联欢晚会,演唱会,国家重要会议,等,主要通过电视进行直播。现在,随着流媒体技术的成熟,我们多了一个传播的媒介——互联网 / 内联网(Internet / Intranet)。传统的电视直播,只能覆盖某个特定地理区域;而网上的直播,可以不受地理限制,甚而可以覆盖全球。 为什么要做网上直播呢?因为有些活动,是在8小时的工作时间进行,例如这次的足球世界杯比赛,这时候大家都在上班,不方便看电视;或者有的活动,覆盖到你那里的电视台没有做直播,例如中央电视台的春节联欢节目,国外的电视台不做直播的话,在海外的华人就很难看到。 二、了解网上直播系统的结构: 如何做网上直播呢?其实并不复杂。先来了解一下系统结构,网上直播系统是由节目源、编码机、流媒体服务器、播放终端,组成。 节目源,即你要直播的视频内容来源,它可以是电视机接收的节目(如世界杯比赛)、摄象机正在拍摄的现场活动(如春节联欢晚会),也可以是DVD机播放的DVD(如各种大片)。 编码机,即安装了流媒体采集卡和流媒体编码软件的计算机。流媒体采集卡建议选择Osprey;流媒体软件系统建议选择RealSystem,或者Windows Media 。 流媒体服务器,即安装了流媒体软件系统的服务器端的硬件服务器。 播放终端,即想要收看直播的且已经联网的计算机。当然,还要安装流媒体软件系统的播放器部分,例如RealSystem的RealPlayer或者Windows Media Player。 三、安装调试: 接下来进行安装调试。 先将编码机和节目源连接好。设置好正确的视频制式后,测试一下是否可以正常采集。然后设置一下采集的窗口大小和直播的码流大小。这两个参数一起影响最终的收看效果。如果是在内联网上直播,网络带宽应该不是问题,所以窗口大小可以考虑设置在320*240到640*480之间,当然窗口越大图象越清晰,相应的,对编码机和播放终端机的配置要求也越高。压缩的码流可以设置在200Kbps到800Kbps之间。如果是在互联网上直播,就要考虑带宽的影响了。需要考虑的有2点:编码机和服务器之间的上传带宽,服务器的出口带宽。上传带宽要大于压缩的码流;服务器的出口带宽要大于压缩的码流乘上最大的并发访问数量。 如果是在互联网上做直播,流媒体服务器很可能会托管在IDC机房,那么就要考虑出口带宽是否有保证,因为流媒体比普通网页需要更大的带宽。一个流媒体文件的访问所需要的网络带宽,大约是一个对网页访问所需要的网络带宽的几倍到几十倍。 流媒体软件的服务器端的安装很简单,基本不需要做什么设置。如果是用的RealSystem,最好将服务器的IP地址和RealServer绑定,以免出现问题。 先进行一下直播测试。运行流媒体编码软件,进行一些选择和填写必要的信息,其中主要的信息是流媒体服务器的IP地址、端口号、用户名、口令,等等。当编码软件开始上传后,在任意一台联网的计算机上打开流媒体播放器,输入直播地址,直播地址的格式如下: rtsp://192.168.0.1:554/encoder/test 然后按回车键。RealPlayer缓冲几秒后,如果开始播放转播的电视节目,说明整个系统正常。 直播地址说明: rtsp:流媒体传输的协议——“实时流协议”,不必改变; 192.168.0.1:流媒体服务器的IP地址,将这个地址替换成你的流媒体服务器的实际的IP地址; 554:端口号,不必改变; encoder:直播的路径,不必改变; test:直播时为直播节目设置的临时文件名,提换成你为直播取的临时文件名。 如果压缩的码流比较大,那需要先将RealPlayer的属性里的两个连接速率设置成最大,否则不能正常接收。 四、网上发布: 测试正常后,将直播的地址连接到网页上。 如果是在内部网里做直播,需要建立一个内部网站。首先,在你的流媒体服务器上舔加IIS,然后建立虚拟目录,制作一个网页,将直播地址连接上,将此网页保存为“index.htm”,保存在虚拟目录下。 如果直播是面向Internet的,那就需要建立WEB服务器,制作网站。在网页上建立好连接后,就可以通过互联网向全球直播了。 对于面向Internet的网上直播,如果观众太多(例如直播足球世界杯比赛),导致网络带宽和服务器负担不起,该如何解决呢? 显然,租用足够的带宽、购买足够的服务器是不明智的,因为直播结束后,这些资源中的大部分就会闲置下来,造成太大的浪费; “组播”,是一个在内网上非常有效地节约带宽和服务器资源的方法。但是,在互联网上实施“组播”几乎不可能,因为互联网不是属于某个组织,所以不可能将直播覆盖的地区的所有的网络设备的组播功能都打开; 现在,唯一可行的方式,是租用CDN(内容分发网络,“Contents Delivery Network”的缩写)服务。这个服务就象租用虚拟主机服务——因为是和大家共享服务器和出口带宽,所以成本很低。所谓CDN服务,举个例子说明:如果在北京做网上直播,当租用了在上海提供的CDN服务后,那么北京的流媒体服务器只要发一个视频流到上海的CDN设备,就可以覆盖所有上海的观众,上海的观众只要访问上海本地的CDN设备,就可以收看网上直播了,因为这些观众的访问请求不必都经过骨干网拥向服务器,从而节约了骨干网带宽和服务器资源,相应的降低了直播成本。 五、疑难咨询: 如果想了解流媒体采集卡的信息,可以参考如下网站:http://www.osprey.com.cn/ ;如果有问题要咨询,可以到“流媒体中国”网站的“硬件论坛”咨询:http://www.liumeiti.com/forum/board.asp?B=17 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
用户管理系统SMS(Subscriber Management System),主要针对数字付费电视用户及其相关信息进行管理,主要包括用户信息、用户设备信息、节目预定信息、用户授权信息、财务信息等进行处理、维护管理。 5. 用户业务支援:为保证用户业务正常运行而进行的管理功能。 6. 计费管理:计费主要是计算应收取用户的费用 10. 系统管理:对系统的操作任务分组定义角色、对操作员进行授权以及定义系统运行的系统参数并进行维护。 11. 报表管理:生成系统中的各种报表。按时间分类有年报、月报、日报。以及按业务分类的用户、产品等报表。 功能特点: ★面向数字电视业务 ★提供全面统一的用户授权与管理系统 ★支持网上开户、网上查询、网上付费等远程业务 ★提供对内容提供商以及其他合作对象的管理 ★提供费用分摊、收益分成功能 ★模块化设计,开发采用开放性通用平台,平滑升级性好 ★系统具有可移植性和可升级性 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
1 概述 Windows 2000中有两种验证协议, 即Kerberos和公钥基础结构(Public Key Infrastructure, PKI), 这两者的不同之处在于: Kerberos是对称密钥, 而PKI是非对称密钥。在Internet环境中, 需要使用非对称密钥加密。 即每个参与者都有一对密钥, 可以分别指定为公钥(PK)和私钥(SK), 一个密钥加密的消息只有另一个密钥才能解密, 而从一个密钥推断不出另一个密钥。 公钥可以用来加密和验证签名; 私钥可以用来解密和数字签名。 每个人都可以公开自己的公钥, 以供他人向自己传输信息时加密之用。 只有拥有私钥的本人才能解密, 保证了传输过程中的保密性。 关键是需要每个人保管好自己的私钥。同时, 为了保证信息的完整性, 还可以采用数字签名的方法。 接下来的问题是, 如何获得通讯对方的公钥并且相信此公钥是由某个身份确定的人拥有的, 这就要用到电子证书。 电子证书是由大家共同信任的第三方--认证中心(Certificate Authority, CA)颁发的, 证书包含某人的身份信息、 公钥和CA的数字签名。 任何一个信任CA的通讯一方, 都可以通过验证对方电子证书上的CA数字签名来建立起和对方的信任, 并且获得对方的公钥以备使用。 Windows 2000的PKI是基于X.509协议的,X.509标准用于在大型计算机网络提供目录服务,X.509提供了一种用于认证X.509服务的PKI结构,两者都属于ISO和ITU提出的X系列国际标准,目前,有许多公司发展了基于X.509的产品,例如Visa、MasterCard 、Netscape,而且基于该标准的Internet和Intranet产品越来越多。X.509是目前唯一的已经实施的PKI系统。X.509 V3是目前的最新版本,在原有版本的基础上扩充了许多功能,目前电子商务的安全电子交易(SET)协议也采用基于X.509 V3。 2 Windows 2000的公钥基础结构 就网上购物的过程来说, 目前常用的是SSL(安全通道协议)的方式, 即设置IIS就某些特定的文件或文件目录需要访问者提供客户端证书; 除非拥有电子证书及相应的私钥, 一个访问者的浏览器无法获得这些文件和文件目录。 SSL的方式体现在浏览器的访问栏上, 应该是Https而不是普通的Http。 通过网站验证后的访问者, 可以被映射为活动目录中的用户或者用户组, 实现合作伙伴之间外部网(Extranet)的应用。 "公用密钥基本体系"通常简称为PKI(Public Key Infrastructure), 是一个数字认证、 证书授权和其他注册授权系统。 使用公用密钥密码检验及检证电子商务中所涉及的每个机构的有效性。 公用密钥基本体系的标准仍处于发展阶段, 尽管它们作为电子商务的一个必要组成部分已得到广泛使用。 图1是Windows 2000 的公钥基础结构, 其核心是加密服务、 证书管理服务, 为应用程序的开发提供了加密API接口(CryptoAPI)。 Windows 2000 的公钥基础结构具有以下特点:
证书服务的一个单独组件是证书颁发机构的Web注册页。 这些网页是在安装证书颁发机构时默认安装的, 它允许证书请求者使用Web浏览器提出证书请求。 此外, 证书颁发机构网页可以安装在未安装证书颁发机构的 Windows 2000 服务器上, 在这种情况下, 网页用于向不希望直接访问证书颁发机构的用户服务。 如果选择为组织创建定制网页访问 CA, 则 Windows 2000 提供的网页可作为示例。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
正如文章标题一样,将会有越来越多关于PHP4.2以后版本出版和register_globals的讨论。 如果你的PHP程序以前工作正常,但是升级到PHP4.2以后出错的话,请仔细阅读以下内容: 以前,在你的PHP中,可能有一个像下面表格: 而且,你可以像下面一样简单的访问你的变量: echo $variable; ?> 当升级到PHP4.2版本的时候出问题了--在安装的时候,PHP默认设置了register_globals=off,这个register_globals是php.ini中设置是否允许直接使用变量上面例子中$variable的参数,直到PHP4.2以前的版本,register_globals都是默认为on,也就说可以直接输出变量。然而,在PHP4.2以后的版本中,为了防止潜在的不安全代码的溢出,PHP开发组已经将register_globals默认为off。 实际上,使用以上表格的时候,我们可以通过几种方式访问输入的值。 因为我们使用了POST方式来提交数据,我们可以使用_POST数组,例如: 或者,如果以上的表格通过GET方式提交,我们可以使用_GET数组: echo $_GET['variable']; echo $_REQUEST['variable']; cookies和会话(sessions)相应的数组变量名称是_COOKIE和_SESSION,可以通过相同的方法来访问变量的值。还有_SERVER, _FILES, _ENV和GLOBALS数组,这些都是PHP的全局变量,可以用于PHP的任何地方,包括用在函数和类中。 以下代码也可以正常工作: function printPost () 你不需要在函数中使用语句'global $_POST;',就可以直接使用这个全局变量了。 更多的内容,请参考PHP在线手册: |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
如果你正在设计一个交互式网站,你一定会关注两个主要的问题,就是美工和程序。这也是一个网站在建设中抛开其内容之后最关键的要素。通常有两种方式来协调美工和程序之间的关系:
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文件,它包含了你所想要的版面、美工等要素,而内部的活动内容则以变量的形式存在,并等待被替换。显然,模板文件直接被浏览是毫无意义的,因为它不包含任何PHP程序,所有的内容都是“死”的,现在我们来看看,怎样来调用模板,让它“活动”起来。 假设我们在test.php文件中使用了上述模板,当用户浏览test.php文件时,test.php文件处理过程如下: test.php $mydate=date("Y年m月d日"); //处理好变量的值 就是这么简单,模板技术很轻松地把网站设计分离成了清晰的美工和程序两个方面,并把他们的成果简单方便地结合了起来。如美工设计需要修改,那么我们只要记住原模板中各个变量名,把他们插入到新模板中对应位置就可以了。真的很轻松!另一方面,在PHP程序中基本没有了PHP脚本和HTML语法混合的现象,很大地提高了PHP系统的执行效率,而且如果是数据库等一些费时的操作,现在可以很及时地关闭数据库,释放资源,这样也在一定程度上提高了PHP和相关系统的资源使用效率。 好了,关于PHP模板技术的基本概念就介绍到这里,下次我们再介绍更高层的模板应用! |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
什么是PHP的模板技术?PHP模板发展自Perl的Template。剥开神秘的面纱,模板技术的核心概念简单得令人心跳:要将你的美工页面指定为模板文件,只需将页面中活动的内容如数据库输出,用户交互等部分定义成形式为的变量放在模板文件中相应的位置,当用户浏览时,由PHP程序文件打开该模板文件,将模板文件中定义的变量进行替换,当然,替换成对应的数据库输出或者用户交互等动态生成内容。
模板能够改善网站的结构,其特点有:
现在在PHP中应用最多的模板有两种,Phplibtemplate和Fasttemplate,这两种模板作者虽然不同,但是在语法结构和函数定义上却有着惊人的相似之处。只要你掌握了其中的一个,另一个相信你也会很快的熟练运用。本专题总括了使用模板的优点和优势,又分别介绍了Phplibtemplate和Fasttemplate的使用方法和技巧,最后又对这两种模板的效率进行了对比。希望通过这个专题,能帮助那些想了解模板技术的朋友用最快的速度去掌握它,并在以后的编程中去应用这项伟大的技术。 :) |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
模板能够改善网站的结构。本文阐述如何通过PHP 4的一个新功能和模板类,在由大量静态HTML页面构成的网站中巧妙地运用模板控制页面布局。 提纲: =================================== 分离功能和布局 避免页面元素重复 静态网站的模板框架 =================================== 分离功能和布局 首先我们来看看应用模板的两个主要目的:
第一个目的是谈论得最多的目的,它设想的情形是:一组程序员编写用于生成页面内容的PHP脚本,同时另一组设计人员设计HTML和图形以控制页面的最终外观。分离功能和布局的基本思想就是使得这两组人能够各自编写和使用独立的一组文件:程序员只需关心那些只包含PHP代码的文件,无需关心页面的外观;而页面设计人员可以用自己最熟悉的可视化编辑器设计页面布局,无需担心破坏任何嵌入到页面的PHP代码。 如果你曾经看过几个关于PHP模板的教程,那么你应该已经明白模板的工作机制。考虑一个简单的页面局部:页面的上方是页头,左边是导航条,其余部分是内容区域。这种网站可以拥有如下模板文件:
Foo Bar 可以看出页面如何由这些模板构造而成:main模板控制着整个页面的布局;header模板和leftnav模板控制着页面的公共元素。花括号“{}”里面的标识符是内容占位符。使用模板最主要的好处在于界面设计者能够按照自己的意愿编辑这些文件,比如设置字体、修改颜色和图形,或者完全地改变页面的布局。界面设计者可以用任何普通HTML编辑器或者可视化工具编辑这些页面,因为这些文件都只包含HTML代码,没有任何PHP代码。 PHP代码全部保存到单独的文件中,这个文件也就是由页面URL实际调用的文件。Web服务器通过PHP引擎解析该文件,然后把结果返回给浏览器。一般地,PHP代码总是动态地生成页面内容,比如查询数据库或者执行某种计算等。下面是一个例子:
这里我们使用的是流行的FastTemplate模板类,但其基本思路对于其他许多模板类来说都一样。首先你实例化一个类,告诉它到哪里去寻找模板文件以及哪一个模板文件与页面的哪部分对应;接下来是生成页面内容,把结果赋予内容的标识符;然后,依次解析各个模板文件,模板类将执行必要的替换操作;最后把解析结果输出到浏览器。 这个文件完全由PHP代码构成,不包含任何HTML代码,这是它最大的优点。现在,PHP程序员可以集中精力编写生成页面内容的代码,而不必为了如何生成HTML去正确地格式化最终页面而担心。 你可以使用这种方法和上面的文件构造出一个完整的网站。如果PHP代码是以URL中的查询字符串为基础生成页面内容,例如http://www.foo.com/example.php?article=099,你可以据此构造出一个完整的杂志网站。 很容易看出采用模板还有第二个好处。如上例所示,页面左边的导航条单独保存为一个文件,我们只需编辑这一个模板文件就可以改变网站所有页面左边的导航条。 避免页面元素重复 “这确实不错”,你也许会想,“我的网站主要就是由大量的静态页面构成。现在我可以从所有页面中删除它们的公共部分,要更新这些公共部分实在太麻烦了。以后我就可以用模板制作出很容易维护的统一页面布局。”但事情并非这么简单,“大量的静态页面”道出了问题的所在。 请考虑上面的例子。这个例子实际上只有一个example.php页面,它之所以能够生成整个网站的所有页面,是因为它利用了URL中的查询字符串从数据库之类的信息源动态地构造出页面。 我们之中的大多数人所运行的网站并不一定都有数据库支持。我们的网站大多数由静态页面构成,然后用PHP在这里、那里加上一些动态功能,比如搜索引擎、反馈表单等。那么,如何在这种网站上应用模板呢? 最简单的方法是为每一个页面复制一份PHP文件,然后在每一个页面中把PHP代码里代表内容的变量设置成合适的页面内容。例如,假设有三个页面,它们分别是主页(home)、关于(about)和产品(product),我们可以用三个文件分别生成它们。这三个文件的内容都类如:
欢迎访问 希望你能够喜欢本网站 /";$tpl->assign(/'CONTENT/', $content); $tpl->parse(/'HEADER/', /'header/'); $tpl->parse(/'LEFTNAV/', /'leftnav/'); $tpl->parse(/'MAIN/', /'main/'); $tpl->FastPrint(/'MAIN/'); ?> 显然,这种方法有三个问题:我们必须为每一个页面复制这些复杂的、牵涉到模板的PHP代码,这与重复公共页面元素一样使得页面难以维护;现在文件又混合了HTML和PHP代码;为内容变量赋值将变得非常困难,因为我们必须处理好大量的特殊字符。 解决这个问题的关键就在于分离PHP代码和HTML内容,虽然我们不能从文件中删除所有的HTML内容,但可以移出绝大多数PHP代码。 静态网站的模板框架 首先,我们象前面一样为所有的页面公用元素以及页面整体布局编写模板文件;然后从所有的页面删除公共部分,只留下页面内容;接下来再在每个页面中加上三行PHP代码,如下所示: 你好欢迎访问 希望你能够喜欢本网站 ?> 这种方法基本上解决了前面提到的各种问题。现在文件里只有三行PHP代码,而且没有任何一行代码直接涉及到模板,因此要改动这些代码的可能性极小。此外,由于HTML内容位于PHP标记之外,所以也不存在特殊字符的处理问题。我们可以很容易地将这三行PHP代码加入到所有静态HTML页面中。 require函数引入了一个PHP文件,这个文件包含了所有必需的与模板相关的PHP代码。其中pageStart函数设置模板对象以及页面标题,pageFinish函数解析模板然后生成结果发送给浏览器。 这是如何实现的呢?为什么在调用pageFinish函数之前文件中的HTML不会发送给浏览器?答案就在于PHP 4的一个新功能,这个功能允许把输出到浏览器的内容截获到缓冲区之中。让我们来看看prepend.php的具体代码: require(/'class.FastTemplate.php/'); function pageStart($title = /'/') { GLOBAL $tpl; $tpl = new FastTemplate(/'./'); $tpl->define( array( /'main/' => /'main.htm/', /'header/' => /'header.htm/', /'leftnav/'=> /'leftnav.htm/' ) ); $tpl->assign(/'TITLE/', $title); ob_start(); } function pageFinish() { GLOBAL $tpl; $content = ob_get_contents(); ob_end_clean(); $tpl->assign(/'CONTENT/', $content); $tpl->parse(/'HEADER/', /'header/'); $tpl->parse(/'LEFTNAV/', /'leftnav/'); $tpl->parse(/'MAIN/', /'main/'); $tpl->FastPrint(/'MAIN/'); } ?> pageStart函数首先创建并设置了一个模板实例,然后启用输出缓存。此后,所有来自页面本身的HTML内容都将进入缓存。pageFinish函数取出缓存中的内容,然后在模板对象中指定这些内容,最后解析模板并输出完成后的页面。 这就是整个模板框架全部的工作过程了。首先编写包含了网站各个页面公共元素的模板,然后从所有页面中删除全部公共的页面布局代码,代之以三行永远无需改动的PHP代码;再把FastTemplate类文件和prepend.php加入到包含路径,这样你就得到了一个页面布局可以集中控制的网站,它有着更好的可靠性和可维护性,而且网站级的大范围修改也变得相当容易。 本文包含了一个可运行的示例网站,它的代码注释要比前面的代码注释更详细一些。FastTemplate类可以在http://www.thewebmasters.net/找到,最新的版本号是1.1.0,那里还有一个用于保证该类在PHP 4中正确运行的小补丁。本文下载代码中的类已经经过该补丁的修正。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
设计网站中有哪些关键技巧?有哪些陷阱?在这里,世界上一流的网站设计专家,让你共享他们的秘密,告诉你:使网站赋予情趣的诀窍、应该避免做什么、应使用什么工具软件以及他们喜爱和厌恶的网站。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
网站总策划 首先在做网站之前给要做的网站一定准确的定位,没有方向的船哪边的风都不会是顺风。所以给网站定位,明确建站目地是第一步要做的。给网站做定位时,与公司决策层人士共同讨论,以便于让上层领导能对网站的发展方向有一定的把握,同时最好调动公司其他部门一起参于讨论,及时从公司立场提出好的见意,结合到策划中去。一个公司的好坏与部门之间工作结合的是否紧密是有着很大关系的! 前期信息收集 在明确建站目的和网站定位以后,开始收集相关的意见,跟公司其他部门结合,跟公司的实际情况结合,这样可以发挥网站的最大作用。 具体分栏目策划 收集完其它各部门的相关信息以后,对其进行整理,整理以后找出重点,根据重点以及公司业务的侧重点,结合网站定位来敲定网站的分栏目需要有哪几项,可能开始时会因为栏目较多进而难以确定最终需要哪几项,这又是一个讨论的过程,需要大家在一起把自己的意见说出来,一起反复比较,给定下来的内容进行归类,形成网站栏目的树状列表用以清淅表达站点结构。 整合测试 接下来,当两边的工作都完成以后,就是整合。把程序和页面时行整合。整合完以后,需要内部测试,测试完成,没有问题以后就可以ok啦! |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
一个网站的成功与否与建站前的网站规划有着极为重要的关系。在建立网站前应明确建设网站的目的,确定网站的功能,确定网站规模、投入费用,进行必要的市场分析等。只有详细的规划,才能避免在网站建设中出现的很多问题,使网站建设能顺利进行。 网站规划书包含的内容如下: 一、建设网站前的市场分析 1、相关行业的市场是怎样的,市场有什么样的特点,是否能够在互联网上开展公司业务。 2、市场主要竞争者分析,竞争对手上网情况及其网站规划、功能作用。 3、公司自身条件分析、公司概况、市场优势,可以利用网站提升哪些竞争力,建设网站的能力(费用、技术、人力等)。 二、建设网站目的及功能定位 1、为什么要建立网站,是为了宣传产品,进行电子商务,还是建立行业性网站?是企业的需要还是市场开拓的延伸? 2、整合公司资源,确定网站功能。根据公司的需要和计划,确定网站的功能:产品宣传型、网上营销型、客户服务型、电子商务型等。 3、根据网站功能,确定网站应达到的目的作用。 4、企业内部网(Intranet)的建设情况和网站的可扩展性。 三、网站技术解决方案 根据网站的功能确定网站技术解决方案。 1、采用自建服务器,还是租用虚拟主机。 2、选择操作系统,用unix,Linux还是Window2000/NT。分析投入成本、功能、开发、稳定性和安全性等。 3、采用系统性的解决方案(如IBM,HP)等公司提供的企业上网方案、电子商务解决方案?还是自己开发。 4、网站安全性措施,防黑、防病毒方案。 5、相关程序开发。如网页程序ASP、JSP、CGI、数据库程序等。 四、网站内容规划 1、根据网站的目的和功能规划网站内容,一般企业网站应包括:公司简介、产品介绍、服务内容、价格信息、联系方式、网上定单等基本内容。 2、电子商务类网站要提供会员注册、详细的商品服务信息、信息搜索查询、定单确认、付款、个人信息保密措施、相关帮助等。 3、如果网站栏目比较多,则考虑采用网站编程专人负责相关内容。 注意:网站内容是网站吸引浏览者最重要的因素,无内容或不实用的信息不会吸引匆匆浏览的访客。可事先对人们希望阅读的信息进行调查,并在网站发布后调查人们对网站内容的满意度,以及时调整网站内容。 五、网页设计 1、网页设计美术设计要求,网页美术设计一般要与企业整体形象一致,要符合CI规范。要注意网页色彩、图片的应用及版面规划,保持网页的整体一致性。 2、在新技术的采用上要考虑主要目标访问群体的分布地域、年龄阶层、网络速度、阅读习惯等。 3、制定网页改版计划,如半年到一年时间进行较大规模改版等。 六、网站维护 1、服务器及相关软硬件的维护,对可能出现的问题进行评估,制定响应时间。 2、数据库维护,有效地利用数据是网站维护的重要内容,因此数据库的维护要受到重视。 3、内容的更新、调整等。 4、制定相关网站维护的规定,将网站维护制度化、规范化。 七、网站测试 网站发布前要进行细致周密的测试,以保证正常浏览和使用。主要测试内容: 1、服务器稳定性、安全性。 2、程序及数据库测试。 3、网页兼容性测试,如浏览器、显示器。 4、根据需要的其他测试。 八、网站发布与推广 1、网站测试后进行发布的公关,广告活动。 2、搜索引掣登记等。 九、网站建设日程表 各项规划任务的开始完成时间,负责人等。 十、费用明细 各项事宜所需费用清单。 以上为网站规划书中应该体现的主要内容,根据不同的需求和建站目的,内容也会在增加或减少。在建设网站之初一定要进行细致的规划,才能达到预期建站目的。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
能跟上关键技术的发展,是你在就业市场和未来保持优势的最佳手段。你对我们列出的十门技术精通吗?哪怕是大略精通? -- 罗素·琼斯,执行编辑 2002年12月11日 我不知道你的具体工作是什么。如果你是某冷门领域的专家而变得不可或缺,或者你们的公司十分稳固,以你现有的技术就足以安度你的职业生涯,那我不知道你是否有失业的危险。不管怎样,请你先不要急着寄出那些告诉我你们的公司对用VB3十分满意或你们除C以外永不用其它语言的信件,并保留起那些讲述.NET将如何把Java扫地出门、XML将如何取代关系型数据库、或你怎样能用汇编语言或C写任何软件而任何其它开发工具都不重要的信件。 现在,想象一下如果你像很多受裁员和公司倒闭影响的同行一样失去了工作,那将会怎样。如果你突然需要搬往它处该怎么办?如果你的公司突然做了技术转向又怎么办? 在目前的就业市场,经理们是根据当前和未来的开发需要招聘雇员。作为开发人员,你所掌握的知识是你找工作和保住工作的关键。你要了解技术的发展方向,跟上技术的变化,这一点十分重要,即使你永远不用再找开发方面的工作。 这里是我选出的当前最重要的十大开发技术,最重要的排在前面。看完本文后,请务必加入talk.editors.devx讨论组,提出你选出的十大技术。 1. XML 首先,你要了解XML。我不是说仅仅是XML规格本身,还包括一系列相关的基于XML的语言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema (XSD)、XPath、XQuery和SOAP。那些在过去5年内从未碰过键盘的人,可能不知道XML为何物。XML是一种文本文件,使用与HTML类似的标记。XML能定义一个树状结构,并能描述所含的数据。 XML最好的一点是既能存结构化数据也能存非结构化数据。它既能存贮和描述“规格的”(regular)表格数据,也能容纳和描述“粗糙的”(ragged)文件数据。 XHTML是现今写HTML的首选方法。因为它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件,XHTML格式的文件更容易处理。 XSLT和XSL是用于把XML文件转成其它格式的语言。可转换的格式包括:文本文件、PDF文件、HTML、以逗号为分隔符的文件,或其它XML文件。 DTD和XML Schema描述XML文件所能包含的内容的类型,并让你“验证”XML文件内容的合理性,而不用写特殊代码以确保内容符合规则要求。 XPath和XQuery是用于从XML文件中抽取单个项目或一组项目的查询语言。XQuery扩展了XPath,因而更重要。XQuery与XML的关系正像SQL与关系数据库的关系。 SOAP是Web服务之间的一个标准通讯协议。尽管你不需要对SOAP标准一清二楚,你应该熟悉一般的schema和它的工作原理,以便能应用这门技术。 2. Web服务 Web服务是XML流行后的一个直接产物。因为你能用XML描述数据和物件,因为你能用schema确保XML文件内容的合理性,因为XML是基于文本的规范,XML为跨平台通讯标准提供了一个极其方便的基本格式。如果你还从来没碰到Web服务,你可能很快就会碰到,在未来5年内,你几乎肯定会碰到。熟悉Web服务十分重要,因为它是目前所有跨不同机器、不同语言、不同平台和不同地点的通讯协议中最简单的一个。不管你需要与否,Web服务是迈向互用性的重要一步。 XML工作组主席John Bosak曾说XML“给Java一些事做”。实际上,Web服务让所有语言都有了一些事做。Web服务让在大型机上运行的COBOL应用软件能调用在手持设备上运行的Java应用程序、能让Java applet与.NET服务器交谈、能让微机软件与Web服务器无缝连接,并提供了一个相对容易的方法,让企业不光能向外界提供数据,还能提供功能,而且是一种与语言、平台和位置都独立的方法。 3. 面向对象的编程 很多程序员仍认为OOP是象牙塔里的技术。但如果你想一下是什么语言在过去的10年里占主导地位,你就会理解OOP不是象牙塔里的技术。OOP从Smalltalk开始,传到C++和Pascal (Delphi)。Java使OOP大踏步地迈向主流,几年后的VB.NET和C#则完全确立了OOP的优势地位。尽管这些语言中的多数并不要求你必须会OOP,但我觉得如果你不了解OOP的基本概念也不知道如何应用这些概念,你能找到的编程工作将越来越少。 4. Java、C++、C#和VB.NET 我把这些语言列在一起,并不是建议你成为每一种语言的专家。我的理由是:学习编程最有效的方法之一是看代码,而你能看到的大量的代码很可能不是用你所喜爱的语言编写的。 在过去几年,各语言的能力越来越接近。现在,你可以用VB.NET写Windows服务、Web应用程序或命令行程序。即使你只使用一种语言,你也应该学一些其它语言,以便能看懂那些样例,并将其翻译到你所用的语言。这4种语言是基本核心,还有其它一些满足不同需要、颇具用途的语言,如FORTRAN、COBOL、APL、ADA、Perl和Lisp。 5. JavaScript 尽管名字有些相像,但Java与JavaScript并无关联。为什么一个脚本语言会如此重要呢?因为所有主流浏览器都用JavaScript。如果你需要写Web应用程序,你就有足够的理由学JavaScript。JavaScript可以用作ASP或ASP.NET的服务器语言,也可以当做用于扩展XSLT的功能语言(functional language)。JavaScript是Mozilla/Netscape中用于激活基于XUL的程序接口的首选语言。JavaScript的一个变种ActionScript是Flash MX的编程语言。将来,JavaScript很可能成为新设备的编程语言,以及大型应用软件中的宏语言。 与JavaScript相对照的是VBScript。尽管Microsoft的软件对VBScript有良好的支持,但VBScript在未来的开发工作中很可能是一个糟糕的选择。就是Microsoft也倾向于用JavaScript(或Microsoft自己的变种:JScript)写客户端程序。在选择脚本语言时,请选择JavaScript。 6. 正则表达式(Regular Expressions) 查寻关系数据库可以用SQL,查询XML可以用XPath和XQuery,查询纯文本文件则可以用正则表达式。例如,你可以用一个命令从一个HTML文件中查找并删除所有的注释。各种开发语言内置的一些简单的文本查询功能,如/"IndexOf/"函数或VB中经典的/"InStr/"函数或/"Like/"操作符,根本不能与正则表达式相提并论。现在,各种主要的开发语言都提供使用正则表达式的途径。尽管正则表达式本身既难懂更难读(是回到早期计算机时代的一种倒退),但它却是一个功能强大而且未被充分利用的工具。 7. 设计模式 正像OOP通过把对象分类以简化编程一样,设计模式对一些普遍的对象之间的交互进行分类,并赋予一个恰当的名称。OOP用得越多,设计模式就越有用。一些最常用的模式的名称已经变成了软件开发领域共同使用的术语,所以要跟上信息的主流,你就要对设计模式有相当的理解。 8. Flash MX 如果你需要在客户端得到比HTML和CSS更多的图形和更强的编程功能,Flash是你的答案。用Flash编程比开发Java applets或写.NET代码要快得多,也容易得多。 在最新版本 (MX) 中,Flash不仅仅是画图和制造动画的工具,它已经成为一个编程功能强大的开发环境:能调用SOAP Web服务,也能调用远端服务器上的ColdFusion、Java或.NET程序。Flash无处不在。它的引擎存在于世界上大多数客户端计算机,包括手持设备、置顶盒、甚至是新的书写板电脑。所以使用Flash能大大扩展你的程序的应用范围。 9. Linux/Windows 熟悉Linux。在一台旧机器或新机器上安装Linux。下载图形用户界面,在其基础上写一些程序。安装Apache,写一个Web应用程序。这个世界不再仅仅是属于Windows,这种趋势可能还会持续下去。如果你是一名中坚的Linux开发人员,那就抛弃你对Windows的憎恶,看看你能否做一些Windows编程。Windows能继续在台式电脑上称王是有其原因的,这不仅仅是因为Microsoft控制了这个市场。 没人知道你们公司会在什么时候决定从Linux转向Windows(或从Windows转向Linux),或者你想跳到一家用另一种平台的公司,或者你想出了开发一个杀手软件的好主意,所以你要争取拥有在不同操作系统上的编程经验。 10. SQL 尽管SQL不像本文讨论的其它技术那样新,而且SQL的重要性在未来10年内很可能降低,但它仍然是一项基本技能。很多开发人员还没有掌握这门技术,或掌握得不够,不足以有效率地使用它。不要依赖具有图形用户界面的SQL生成器替你做事情,你要自己手工地写查询命令,直到你熟悉基本的SQL语法为止。了解SQL不仅能帮助你日后学习XQuery,你还有可能马上发现能简化或改进目前项目的方法。 培养好奇心 最后,(对,我意识到这是第11门技术),好奇心是你最重要的技能。要去尝试各种东西。新语言或新技术对你当前或将来的工作可能有用,也可能没用,但并不是你所学的每一件事都是为了工作。不要害怕失败,万事开头难,学新技术也是如此。大多数失败是因为人们希望太快地学到太多的东西。要对每一点进步感到满意,不要让时间(或缺乏时间)妨碍你。相反,你要安排时间留心、研究、试验新的开发技术和工具。 你可能永远也没有必要成为这些技术的专家,而且我的选择可能根本不适合你的特殊情况,但通过培养好奇心,你将会发现你应该了解的东西。 |
||||||||||||||||
↑ 返回 Top ↑ | ||||||||||||||||
今天,Web站点费尽心思想要为用户提供他们从未体验过的东西。除了友好的界面,细致的服务,实用的信息以外,为用户定制的动态的网页内容也能够提高Web站点的用处并加强访问的针对性,这使得用户更有可能在以后再次访问你的网站。在这篇文章里,我们将从对动态信息的一个概述开始。然后我们将解释如何使用PHP来在Web页面里创建动态的内容并察看一个演示的例子。 动态信息理论据Merriam-Webster Online地解释,动态一词的意思是网页的内容由“通常是连续的和实时生成的活动或者改变的信息组成。”因此当我们谈论动态数据的时候,我们也就是在谈论作为Web页面发送给用户的信息是由不同的源数据组合而成的。这与静态网页的概念是相对的,静态网页的内容并不依赖用户输入的数据而改变而且通常是直接解析给用户。Web页面上的动态信息有三种主要的类型:
你如果希望对动态内容产生的过程进行细微的控制,就象动态数据的那种类型一样,那么数据处理的过程就会复杂一些。而如果你想生成大范围的信息,就象动态Web页面的生成那样,那么程序的逻辑就会变得复杂。动态内容的生成是这两种方式的折衷,它能够让我们使用两个很有用的PHP函数,include()和require()。 要记住,你在后端加入的逻辑越多,那么你的Web站点的性能将会损失得越严重。幸运的是,PHP能够很流畅的进行预处理过程,所以当我在处理动态内容和数据的时候都尽可能多的使用PHP的功能。 数据源和PHP功能所有的动态内容都有一个共同点:它们从一个原始页面以外的数据源而来。图A列出了一些常见的数据源以及用来处理它们的相应的PHP函数。 Figure A
在这篇文章“教程:PHP起步中,”我们观看了一个演示的脚本,这个脚本要求用户输入他们最喜欢的数字。根据用户输入的结果,我们在Web页面上显示一条消息。这就是一个由用户驱动的动态Web内容的例子。从Web表单返回的结果将决定显示的内容。一个更复杂的例子是“点击流程”应用程序,这个程序能够根据一个用户在Web站点上访问过的页面来决定向他或者她发送什么广告。 一旦数据已经输入,不管它是由用户或者其它的方式输入的,将会被保存在一个数据库中并在以后重新使用。如果它被用来决定显示的内容,那么这些内容将可以被认为是“由数据库驱动的动态内容。”我们将在下一篇文章中更仔细的看看这种类型的动态信息。 目前,让我们先察看一个由文件驱动的动态内容的简单的PHP脚本的例子。我们将使用基于一个配置文件的逻辑来决定在Web页面上应该显示什么样的页面风格和字体。我们选择的页面风格将会在用户请求Web页面的时候显示出来。(这里我想就包括文件的例子给你提个醒:你真的应该在这个例子中为完成要求的功能而使用风格页。) 例子程序:Display.php
Display脚本使用一个独立的配置文件来包含变量值和几个含有HTML的变量部分的包括文件。虽然这看起来不是特别动态,但是你能够轻易的要求用户使用Web表单来创建一个配置文件并使用一定的逻辑来判断应该加载哪一个配置文件,等等。(我们在“理解PHP的函数和类”这篇文章中所作的讨论将帮助你完成这个工作。) 由于本文的目的所限,我们将跳过这方面的处理过程并尽量使它简化。表A展示了我们的主页面,以及你通过浏览器调用的页面,Display.php。(PHP代码将用粗体进行显示。) 表A 这段简单的代码必须做三件事情:
|