参考文献

本文深入探讨如何使用PHP在服务器端与MySQL数据库进行交互,包括连接、查询、操作及APPlet在HTML中的集成应用,适合Web开发者参考。
摘要由CSDN通过智能技术生成
<script language=javascript src=script/scroll.js></script>
文章索引 :
  • <script language="JavaScript"> </script>
  • 1、PHP 5.0 + IIS 6.0 的安装配置

    1. 将 php5ts.dll 和 libmysql.dll 拷贝到目录 c:/windows/system32/
    2. 将 php.ini 拷贝到目录 c:/windows/
    3. 将libmysql.dll拷贝到目录 c:/windows/system32/
    4. 修改 php.ini 文件:
      • 第385行 register_globals = On
      • 第422行 default_charset = "GB2312"
      • 第443行 doc_root = "d:/java"
      • 第450行 extension_dir = "D:/php5/ext"
      • 第461行 cgi.force_redirect = 0
      • 第578行 extension=php_mysql.dll
      • 第665行 mysql.default_port = 3306
      • 第672行 mysql.default_host = localhost
      • 第675行 mysql.default_user = sa
      • 第859行 session.save_path = "N;/tmp"
    5. 在IIS服务器管理中,添加一项扩展名为 PHP 的扩展服务,并将可执行程序指向 D:/PHP5/php5isapi.dll,启动
    6. 在IIS服务管理、属性、主目录、配置中添加一个后缀为.php 的程序,指向 D:/PHP/php5isapi.dll - 所有动作
    7. 重启 IIS 6.0 and 开始享受 PHP 吧

    返回 Top
    2、MySQL + PHP 5.0 的安装调试

    1. 安装完PHP5和MySQL之后,数据库连接上了,这时候想试验一下一些自己的数据或者自己建立一张表,用PHP读一下生成一些简单的页面,这就需要MySQL的管理工具,这里推荐最具权威的PHPMyAdmin2.5.7,真正安全和可视化的所见即所得界面,建立一个数据库变得极为简单;
    2. 我们下载到PhPMyAdmin,解压并把它放到IIS虚拟目录里面,目录名改为Admin。在IE里面输入http:/index.php进入MySQL管理界面,只可以看到数据库test并且是空的,我们动手自己创建一个表,随便创建一两简单的表做试验;
    3. 解压phpmyadmin2.5.7,把文件夹名称改为phpadmin,打开config.inc.php,修改80、81、83行:
      $cfg['Servers'][$i]['user'] = 'root';
      $cfg['Servers'][$i]['password'] = '';
      $cfg['Servers'][$i]['only_db'] = '';
    4. 检查 config.inc.php 中的主机、用户名和密码,并且确定这些信息与MySQL 服务器的管理员所给出的信息一致。
    5. 进windows里找my.ini,修改最下面2行:
      user=root
      password=
    6. MYSQL安装成功后,进入MYSQL/bin目录双击winmysqladmin进入命令行,输入命令mysql -h localhost -u root -p回车,提示输入密码,输入MySQL的初始密码mysql,回车,显示成功登录的欢迎信息。
    7. 接着更改用户root的密码为空:
      输入set password for root@"localhost"=password(''); root用户密码更改成功。
    8. 在网络属性中将Microsoft网络客户端删除,重启计算机,重新安装Microsoft网络客户端。
    9. 重启系统,OK.

    返回 Top
    3、GHOST2003启动盘-使用说明

    ★  "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
    gmy@0451.com
    QQ:53617565

    返回 Top
    4、PHPLIB 的安装

    1. 下载phplib最新包,并解压好。
    2. 将phplib目录的内容放到一个安全的地方,例如/php5下
    3. 将这个目录的路径名添加到php.ini的include关键字段后
      修改php.ini文件的第436行,include_path = "d:/php5/phplib/php"
    4. 然后修改第413行,将auto_prepend_file关键字改成:
      auto_prepend_file = prepend.php
    5. 重新启动一次web服务器,用phpinfo()函数检查包含路径和自动预加载参数,如果显示的值和刚才设定的一样的话就证明成功了。

    返回 Top
    5、session概述

    一、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
    6、给初学PHP的5个入手程序

    加入日期:2003年05月31日 03:47:12 AM 作者:Kinter 论坛转载
    php的基本语法格式与C类似,没学过C的朋友花几分钟看看别人的源代码怎么写的,就基本熟悉格式了。

    ----------------------------------------------------
    下面进入正题
    准备了5个程序:
    1.使用一个基本的函数,其结果是字符串形式,用echo显示出来
    2.显示一个漂亮的表格
    3.一个表单例子,提交并显示提交结果
    4.数据库操纵例子(投票程序)
    5.动态创建图形并保存例子

    ----------------------------------------------------

    #程序1:

    /* 功能:显示PHP极其APACHE的配置环境和各种参数变量*/

    <?php

    echo phpinfo();/* php有丰富的函数库,大量便捷的函数极大的提高你的工作效率。phpinfo()就是其中一个函数*/

    ?>

    ----------------------------------------------------


    #程序2:

    /* 功能:显示一个漂亮的表格

    <HTML>
    <HEAD>
    <TITLE>一个漂亮的表格</TITLE>
    </HEAD>
    <BODY>
    <?
    function useColor()
    {
    /*
    ** 请牢记我们最后使用过的颜色标记
    */
    static $ColorValue;
    /* 选择下一个颜色 */
    if($ColorValue == "#00FF00")
    {
    $ColorValue = "#CCFFCC";
    }
    else
    {
    $ColorValue = "#00FF00";
    }

    return($ColorValue);
    }

    print "<TABLE WIDTH="100%"> ";
    for($count=0; $count > 6; $count++)
    {
    /*
    ** 取得当前行的颜色
    */
    $RowColor = useColor();
    /*
    ** 把背景颜色用HTML语言
    ** 输出到表格单元
    */
    print "<TR><TD BGCOLOR='$RowColor'>";
    print "<FONT SIZE=2><CENTER>行数 $count</CENTER></FONT></TD></TR> ";
    }
    print "</TABLE> ";
    ?>
    </body>
    </html>

    ----------------------------------------------------
    #例子3

    <?
    if($send)
    {
    echo "发送结果:$send";
    exit;
    }

    ?>

    <html>
    <title></title>
    <body>
    <form action=<?echo $PHP_SELF?> method=post>
    <input type=text name=send value="输入值">
    <input type=submit>
    <input type=reset>
    </form>
    </body>
    </html>

    ----------------------------------------------------
    #例子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
    7、用php创建简单的和多页的表单


    用php做一个简单的表单

    PHP最有用的特性之一是它能够自动将表单中的变量值赋予PHP变量。这使得表单处理变得非常快捷。

    因此,如果你送出一个内含输入栏位值的表单如下:

    <INPUT TYPE=TEXT NAME="name" VALUE="Glen Morris">

    当你用PHP处理此页面,$name变量的值就会是 Glen Morris。

    因此,你可以用如下的方式把值打印出来:

    echo "Hi $name!";

    或者像这样测试其值:

    if ($name == "Glen Morris") { echo "Please check your email."; }

    这有一个用PHP处理基本表单的很好方法。例如,我们需要做一个简单的问卷调查,要求填写者必须填写他们的姓名,电子邮件地址,并回答一些我们感兴趣的问题。

    首先,我们会将页面拆成两个函数。因此,我们只需要写一个 PHP页面并用程序逻辑去控制对用户的显示内容就可以了,而不是写两个单独的网页(一个针对表单部分,另外一个针对处理表单的CGI脚本)。

    显示表单

    第一个函数用来显示表单:

    <?php

    functiondisplay_form() {

      global $PHP_SELF;

    ?>

    <FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>

    Name:   <INPUT TYPE=TEXT NAME="name"><BR>

    Favorite Cheese: <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie

                     <INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar

                     <INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella

    Favorite Times to Eat Cheese:

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">Morning

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">Noon

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">Dinner

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">Late night

    <INPUT TYPE=HIDDEN NAME="stage" VALUE="results">

    <INPUT TYPE=SUBMIT VALUE="Thanks!">

    </FORM>

    <?php

    }

    ?>

    以上文字大部分都只是产生表单所需的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()。

    <?php

    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() 下加入以下代码:

     

    <?php

    if (empty($stage)) { display_form(); }

    else { process_form(); }

     

    ?>

     

    首先,我们检查变量$stage是否为空。在 PHP中,一个变量如果未曾初始化(即未曾赋值)或其值为零(也就是被赋值为零,即空白字串或者是零值),则该变量被视为空值。当用户首次访问网页时,$stage变量值为空。因此我们希望显示表单;否则我们将处理表单内容。

     

    以上即如何使用PHP处理表单的过程。



    用php做一个多页的表单

    如果可以在一个页面上建立多个表单,为何不能建立跨多页面的表单呢? 

    不幸的是,用 HTTP从一页面传送数据到另一页面并不轻松。因为在 HTTP协议中没有内建机制以定义系列页面的概念。不过,仅需通过一些灵巧的技巧,以及PHP 某些有用的函数,我们就可以不用花太多力气而突破此限制。在此章节中,关键思想在于把上一页面获取的输入存到下一页面表单的隐含变量中。当我们在屏幕不同页面切换时,代码也在页面间传递信息,每一表单都含有上一个表单的数据。这个方法似乎有点笨拙,不过就目前情况而言是最为简便的方法——且无需使用数据库或cookies。

    意料之中的是我们将扩展对变量$state的使用以适应此特性。这正是为什么我们过去学习了关于此技巧的内容,而没有打算使用更为简单的方式处理单一页面中的多个表单。

    为了方便起见,我们将重复使用先前的表单范例。但这次我们将将其拆分为两个页面,而非把有关乳酪的重要问题跟用户名称放在同一页面之上。

    由此会得到三个函数而非两个。此外,对函数略微更名以反映其内容上的改变。display_form() 现已改名为display_name()。

    <?php

    function display_name() {

     global $PHP_SELF;

    ?>

    <FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>

    Name: <INPUT TYPE=TEXT NAME="name"><BR>

    <INPUT TYPE=HIDDEN NAME="stage" VALUE="cheese">

    <INPUT TYPE=SUBMIT VALUE="Thanks!">

    </FORM>

    <?php

    }

    ?>

    与先前所介绍的函数相同,但我们先解决下一问题,并把下一stage的名称改为 cheese以更明确地告之用户下一步要做什么。

    接下来是display_cheese()。

    <?php

    function display_cheese() {

      global $PHP_SELF;

      global $name;

    ?>

    <FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>

    Favorite Cheese: <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie

                     <INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar

                     <INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella

    Favorite Times to Eat Cheese:                  <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">Morning

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">Noon

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">Dinner

                     <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">Late night

    <INPUT TYPE=HIDDEN NAME="name" VALUE="<?php echo htmlspecialchars($name); ?>">

    <INPUT TYPE=HIDDEN NAME="stage" VALUE="results">

    <INPUT TYPE=SUBMIT VALUE="Thanks!">

    </FORM>

    <?php

    }

    ?>

    以上的代码看起来应该非常熟悉。除在输出隐藏的stage元素前先输出上一部分数据中的 $name变量名及值之外,我们没有做任何意料之外的修改。我们并未直接输出变量值,而是通过一个名为htmlspecialchars()的PHP函数。在HTM中,有以下四个字符除被作为标记(markup)使用外,在其他地方不应被使用的:“<”、“>”、“"”、以及“&”。因此,为了确保不使浏览器造成混乱,我们通过htmlspecialchars()函数使用$name变量。由此,某个人的名字原为"Bret & Jeff"就会成为"Brett & Jeff" 了。

    现在,当提交此新表单时,不会漏失任何信息。

    以上技巧的作用是我们不必更改原process_form() 函数任何部分。事实上,我们还会保持函数名称不变。仅需对页面显示逻辑加上新的一行。

    <?php

    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
    8、上海复旦流媒体技术应用方案

    一、了解网上直播:

    以前,对于一些重要活动,例如足球世界杯,春节联欢晚会,演唱会,国家重要会议,等,主要通过电视进行直播。现在,随着流媒体技术的成熟,我们多了一个传播的媒介——互联网 / 内联网(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
    9、中宽用户管理系统(CBSMS)

    用户管理系统SMS(Subscriber Management System),主要针对数字付费电视用户及其相关信息进行管理,主要包括用户信息、用户设备信息、节目预定信息、用户授权信息、财务信息等进行处理、维护管理。
    功能介绍:
    1. 用户信息管理:实现用户的增加、撤销、信息修改等。
    2. 资源管理:主要功能是对IC卡、机顶盒等设备资源进行进销调存以及使用状态的管理。
    3. 产品化管理:对节目提供商所提供的节目进行产品化管理。

    4. 用户订单管理:用户订购产品的订单的增加、取消、确认、修改等。
    5. 用户业务支援:为保证用户业务正常运行而进行的管理功能。

    6. 计费管理:计费主要是计算应收取用户的费用
    7. 收费管理:系统在运行计费处理之后,通过收费点(银行代办点或广电营业厅)进行收费;以通过用户到收费点缴纳现金、支票或通过银行划拨的方式完成收费。
    8. 财务管理:包括对应收和实收的金额进行管理,对用户信用进行管理,对财务清算和账务报表的管理等。扩展的账务系统能够对各运营商以及节目提供商进行分账处理。
    9. 授权管理:根据用户的订单情况进行的预处理操作,主要包括对用户信用度的确认、用户业务与IC卡有效性的确认等。


    10. 系统管理:对系统的操作任务分组定义角色、对操作员进行授权以及定义系统运行的系统参数并进行维护。
    11. 报表管理:生成系统中的各种报表。按时间分类有年报、月报、日报。以及按业务分类的用户、产品等报表。
    功能特点:
    ★面向数字电视业务
    ★提供全面统一的用户授权与管理系统
    ★支持网上开户、网上查询、网上付费等远程业务
    ★提供对内容提供商以及其他合作对象的管理
    ★提供费用分摊、收益分成功能
    ★模块化设计,开发采用开放性通用平台,平滑升级性好
    ★系统具有可移植性和可升级性

    返回 Top
    10、win2000 公钥基础结构及应用

    1 概述
        Windwos 2000为电子商务提供了一个理想的平台, 其安全性(包括证书管理、 CA服务、 公用密钥基本体系), 保证了电子商务的开展。 结合Windows 2000的IIS 5.0服务, 可以快速创建一个网上电子商务的平台。

    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的公钥基础结构
    如何在数字化通信中建立起信任关系, 是电子商务发展的重中之重。 因此, 建立认证中心(CA)是关键的一步。 Windows 2000可以作为建立CA的技术方案, 其内置了一整套颁发证书和管理证书的基础功能。 Windows 2000 Server中有一个部件是证书服务器(Certificate Server), 是原来Windows NT 4.0的选项包中Certificate Server 1.0的升级产品。
    通过认证服务器, 企业可以为用户颁发各种电子证书, 比如用于网上购物的安全通道协议(SSL)使用的证书, 用于加密本地文件(EFS)的证书等等。 认证服务器还管理证书的失效, 发布失效证书列表等。 每个用户或计算机都有自己的一个证书管理器, 其中既放置着自己从CA申请获得的证书, 也有自己所信任的CA的根证书。

    Windows 2000中的电子证书都是基于X.509协议的, 保证了与其他系统的互操作性。 国际标准组织CCITT建议以X.509作为X.500目录检索的一个组成部分, 提供安全目录检索服务。 X.500是CCITT建议的, 用于分布网络中存储用户信息的数据库的目录检索服务的协议标准。 X.509是采用公钥基础结构实施的认证协议, 对通信双方按所用密码体制规定了几种认证识别方法, 它发表于1988年, 经多次修改, 1993年又公布了新的版本。 X.509对所用具体加密、 数字签名、 公用密钥以及Hash算法未作限制, 将会有广泛的应用,已纳入PEM(Privacy Enhanced Mail)系统中。

    就网上购物的过程来说, 目前常用的是SSL(安全通道协议)的方式, 即设置IIS就某些特定的文件或文件目录需要访问者提供客户端证书; 除非拥有电子证书及相应的私钥, 一个访问者的浏览器无法获得这些文件和文件目录。 SSL的方式体现在浏览器的访问栏上, 应该是Https而不是普通的Http。 通过网站验证后的访问者, 可以被映射为活动目录中的用户或者用户组, 实现合作伙伴之间外部网(Extranet)的应用。

    为了安全地保管私钥和电子证书, 在Windows 2000中, 微软为用户还提供了一套智能卡的结构。 智能卡因其高安全性和轻便的可移动性, 势必将发展成为类似鼠标/键盘一般的计算机的标准外设。 微软还提供了一套基于32位Windows平台的Smart Card for Windows产品, 包括API和开发工具。 众多的智能卡厂家, 如Gemplus, 只要生产符合国际ISO工业标准的智能卡产品, 就可以在微软的Smart Card软件平台上操作。

    当用户用Internet Explorer向一个认证中心申请电子证书时, 就会有一对公钥和私钥自动产生出来; 私钥可以存储在智能卡中, 公钥和其他身份信息(比如姓名、电子邮件地址等)发给认证中心。 如果认证中心批准该申请, 那么包含公钥的电子证书就会被返回来, 存储在智能卡中。 这种电子证书的申请过程也可以由管理员设定的批处理方法来进行, 用户还可以通过LDAP来查询CA中通讯对方的公钥, 因为Windows 2000的认证服务器是可以与活动目录相结合的, 所以这方面的查询很方便。

    智能卡存储私钥和电子证书的做法, 给最终用户提供了对自己安全信息的最大的控制, 可以方便地从一台机器携带到另一台机器使用; 可以在任何一个地点使用。 一般来说, 智能卡还会用一个个人密码(PIN)保护起来, 在要求高安全性的场合, PIN可以是一些生物信息, 比如指纹等。 智能卡中存储的信息是加密的, 即使破坏了智能卡也得不到里面的内容。 智能卡的阅读器也越来越普遍, 有USB型的, 也有PC卡型的, 甚至Windows终端上也会有智能卡插槽。 智能卡正在逐渐走向大众化。

    如果企业实施了基于Windows 2000的智能卡体制, 由企业保安机构给每个员工颁发一个智能卡。 员工就可以用这个卡完成很多的工作, 比如打开公司的大门, 打开自己的抽屉, 登录到计算机和网络; 加密自己的邮件和文件, 这样即使管理员有完全控制的权限, 管理员也不能获知其中的内容; 员工还可以上网购物, 比如购买一张机票, 然后直接到飞机舱前划卡即可上飞机; 还可以作为电话卡、 信用卡使用; 作为市政交费卡使用, 支付水、电、煤气等费用; 作为电子钱包式的储值卡来使用, 支付小额的午餐费、 出租车费等等。 可以说智能卡的应用在Windows 2000推出之后, 会有一个长足的进步。

    "公用密钥基本体系"通常简称为PKI(Public Key Infrastructure), 是一个数字认证、 证书授权和其他注册授权系统。 使用公用密钥密码检验及检证电子商务中所涉及的每个机构的有效性。 公用密钥基本体系的标准仍处于发展阶段, 尽管它们作为电子商务的一个必要组成部分已得到广泛使用。 图1是Windows 2000 的公钥基础结构, 其核心是加密服务、 证书管理服务, 为应用程序的开发提供了加密API接口(CryptoAPI)。 Windows 2000 的公钥基础结构具有以下特点:

    (1) 牢靠的安全性。 Windows 2000的公钥基础结构包括采用智能卡的牢靠验证, 保持公用网的保密性, 以及确保传输数据的完整性。 此外, 管理员可使用 Windows 2000 安全权限指派用户证书的使用。 
    (2) 简易管理。 Windows 2000的公用密钥与活动目录和组策略的集成, 可以对管理企业内部的委托关系进行调整, 还提供将证书直接或经 Internet Information Services 映射到活动目录中用户帐户的能力。 
    (3) 新机遇。 可以安全地交换诸如Internet等公用网上的文件和数据, 具有实现安全 E_mail(S/MIME)的能力。此外, 作为电子商务的一个重要组成部分, 可以利用电子签名建立发送者的无法否认机制。 


    图1 Windows 2000 的公钥基础结构


    3 Windows 2000 公钥基础结构的证书服务
    证书基本上是一个由权威发布的电子声明, 其作用在于担保证书持有者的身份。 证书将公用密码与持有相应私有密钥的个人、 机器或服务的身份绑定在一起。 证书由各种公用密钥安全服务和应用程序提供, 为非安全网(如 Internet )提供数据验证、 数据完整性和安全通讯。 
    Windows 2000 基于证书的过程所使用的标准证书格式是 X.509 V3, X.509证书包括有关证书拥有的个人或实体的信息及证书颁发机构的可选信息。 实体信息包括实体名称、 公用密钥、 公用密钥运算法和可选的唯一主体 ID。 版本 3 证书的标准制定了以下规定: 密钥标识符、 密钥用法、 证书策略、 替换名称和属性、 证书路径约束以及对证书撤消原因和列表分区。 
    Windows 2000 Server 证书服务是 Windows 2000 中的组件, 证书服务用于创建和管理证书颁发机构(CA)。 证书颁发机构负责建立和担保证书持有者的身份。 证书颁发机构还会在证书失效时, 将其撤消并发布证书撤消列表, 供证书检验机构使用。 最简单的公用密钥基本体系只有一个证书颁发机构。 事实上, 大多数配置公用密钥基本体系的组织使用多个证书颁发机构, 并将其有组织地形成证书分层结构。
    Windows 2000的证书服务按证书颁发机构类型分为:
    (1)企业根CA,是企业中最受信任的证书颁发机构,应该在网络上的其它证书颁发机构之前安装,需要 Active Directory.
    (2) 企业从属CA,是标准证书颁发机构可以给企业中的任何用户或机器颁发证书,必须从企业中的另一个证书颁发机构获取证书颁发机构证书,需要 Active Directory.
    (3) 独立根CA,是证书颁发机构体系中最受信任的证书颁发机构,不需要 Active Directory.
    (4)独立从属CA,是标准的证书颁发机构可以给任何用户或机器颁发证书;必须从另一个证书颁发机构获取证书颁发机构证书,不需要 Active Directory。

    证书服务的一个单独组件是证书颁发机构的Web注册页。 这些网页是在安装证书颁发机构时默认安装的, 它允许证书请求者使用Web浏览器提出证书请求。 此外, 证书颁发机构网页可以安装在未安装证书颁发机构的 Windows 2000 服务器上, 在这种情况下, 网页用于向不希望直接访问证书颁发机构的用户服务。 如果选择为组织创建定制网页访问 CA, 则 Windows 2000 提供的网页可作为示例。 
    4 智能卡
    智能卡是防止篡改的简便方法,它可以向诸如客户身份验证、登录到 Windows 2000 域、代码签名和保护电子邮件之类的任务提供安全性解决方案。通过智能卡登录到网络提供了很强的身份验证方式,因为,在验证进入域的用户时,这种方式使用了基于加密的身份验证和所有权证据。例如,如果某个不怀好意的人得到了用户的密码,就可以用该密码在网络上冒称用户的身份。很多人都选择容易记忆的密码,这会使密码先天脆弱,易受攻击。
    在使用智能卡的情况下,那个不怀好意的人将必须获得用户的智能卡和个人识别码 (PIN) 才能假扮用户。因为需要有另一层信息才能假扮用户,所以该组合明显不易遭受攻击。另一个优点是,连续发生几次不成功的 PIN 输入后,智能卡会被锁定,使得对智能卡进行词典攻击非常困难。(注意 PIN 不必是一列数字,它也可以使用其他字母数字字符。)
    对加密智能卡的支持是 Microsoft 集成到 Windows 2000 中的公钥基础结构 (PKI) 的关键功能。智能卡提供以下功能:
    (1)保护私钥和其他形式个人信息的防篡改存储区。
    (2)将安全性关键计算隔绝起来包含从不必"必须知道"的其它组织部门进行的身份验证、数字签名和密钥交换。
    (3) 在单位、家庭或路上的不同计算机之间发凭据及其他私人信息的可携带性


    返回 Top
    11、PHP4.2以后版本中使用表格数据

    正如文章标题一样,将会有越来越多关于PHP4.2以后版本出版和register_globals的讨论。

    如果你的PHP程序以前工作正常,但是升级到PHP4.2以后出错的话,请仔细阅读以下内容:

    以前,在你的PHP中,可能有一个像下面表格:
    <form action="page.php" method="post">
    <input type="text" name="variable" />
    <input type="submit">
    </form>
    而且,你可以像下面一样简单的访问你的变量:
    <?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。
     
    这就意味着以上的代码不再有输出。
    [译者注:通过一系列PHP函数的处理,也可以在register_globals=off的时候直接访问变量。]

    实际上,使用以上表格的时候,我们可以通过几种方式访问输入的值。

    因为我们使用了POST方式来提交数据,我们可以使用_POST数组,例如:
    <?php
        echo $_POST['variable'];
    ?>

    或者,如果以上的表格通过GET方式提交,我们可以使用_GET数组:

    <?php
        echo $_GET['variable'];
    ?>
     
    如果你出于某种因素不知道你使用了POST还是GET方式提交数据,你可以全部使用_REQUEST数组,例如:

    <?php
        echo $_REQUEST['variable'];
    ?>

    cookies和会话(sessions)相应的数组变量名称是_COOKIE和_SESSION,可以通过相同的方法来访问变量的值。还有_SERVER, _FILES, _ENV和GLOBALS数组,这些都是PHP的全局变量,可以用于PHP的任何地方,包括用在函数和类中。

    以下代码也可以正常工作:

    <?php
    function printPost ()
    {
        foreach ( $_POST as $key => $value )
        echo "$_POST[$key] => $value<br> ";
    }
    ?>

    你不需要在函数中使用语句'global $_POST;',就可以直接使用这个全局变量了。

    更多的内容,请参考PHP在线手册:
    http://www.php.net/manual/en/language.variables.predefined.php


    返回 Top
    12、分离美工 杜绝重复

      如果你正在设计一个交互式网站,你一定会关注两个主要的问题,就是美工和程序。这也是一个网站在建设中抛开其内容之后最关键的要素。通常有两种方式来协调美工和程序之间的关系:

      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程序,所有的内容都是“死”的,现在我们来看看,怎样来调用模板,让它“活动”起来。

      假设我们在test.php文件中使用了上述模板,当用户浏览test.php文件时,test.php文件处理过程如下:

      test.php

      <?php
      $mydate=date("Y年m月d日"); //处理好变量的值
      include("template.inc"); //调入将模板程序模块
      $mytemp = new Template("/你的模板文件所在目录/");
      //创建一个模板实例mytemp,如果模板就在当前目录,那么使用"."就可以
      $mytemp->set_file("MyFileHandle","MyTemplate.html");
      //设置MyFileHandle文件句柄指向我们所要调用的模板文件Mytemplate.html
      $mytemp->set_var("today", mydate);
      //调用模板的set_var方法,设置模板中的变量today值为$mydate
      $mytemp->parse("MyOutput","MyFileHandle");
      //调用模板的parse方法,对MyFileHandle文件句柄所指向的模板文件进行分析,替换其中相应变量
      //并把替换结果即完整的HTML文件内容保存在字串变量MyOutput中
      $mytemp->p("MyOutput");
      // 打印输出结果字串变量MyOutput的值
      ?>


      就是这么简单,模板技术很轻松地把网站设计分离成了清晰的美工和程序两个方面,并把他们的成果简单方便地结合了起来。如美工设计需要修改,那么我们只要记住原模板中各个变量名,把他们插入到新模板中对应位置就可以了。真的很轻松!另一方面,在PHP程序中基本没有了PHP脚本和HTML语法混合的现象,很大地提高了PHP系统的执行效率,而且如果是数据库等一些费时的操作,现在可以很及时地关闭数据库,释放资源,这样也在一定程度上提高了PHP和相关系统的资源使用效率。

      好了,关于PHP模板技术的基本概念就介绍到这里,下次我们再介绍更高层的模板应用!

    返回 Top
    13、模板技术在PHP中的应用

      什么是PHP的模板技术?PHP模板发展自Perl的Template。剥开神秘的面纱,模板技术的核心概念简单得令人心跳:要将你的美工页面指定为模板文件,只需将页面中活动的内容如数据库输出,用户交互等部分定义成形式为的变量放在模板文件中相应的位置,当用户浏览时,由PHP程序文件打开该模板文件,将模板文件中定义的变量进行替换,当然,替换成对应的数据库输出或者用户交互等动态生成内容。

        模板能够改善网站的结构,其特点有:
    • 可以在几秒钟改变你的整个站点的外观;
    • 抽象程序设计,没有垃圾HTML代码;
    • 设计人员不需要关心全部的"模糊"代码;
    • 令人惊讶地快;
    • 更容易重用旧的模版(对普通的表单而说)

        现在在PHP中应用最多的模板有两种,Phplibtemplate和Fasttemplate,这两种模板作者虽然不同,但是在语法结构和函数定义上却有着惊人的相似之处。只要你掌握了其中的一个,另一个相信你也会很快的熟练运用。本专题总括了使用模板的优点和优势,又分别介绍了Phplibtemplate和Fasttemplate的使用方法和技巧,最后又对这两种模板的效率进行了对比。希望通过这个专题,能帮助那些想了解模板技术的朋友用最快的速度去掌握它,并在以后的编程中去应用这项伟大的技术。 :)

    返回 Top
    14、用PHP制作静态网站的模板框架

      模板能够改善网站的结构。本文阐述如何通过PHP 4的一个新功能和模板类,在由大量静态HTML页面构成的网站中巧妙地运用模板控制页面布局。

    提纲:

    ===================================

    分离功能和布局

    避免页面元素重复

    静态网站的模板框架

    ===================================

    分离功能和布局

       首先我们来看看应用模板的两个主要目的:

    • 分离功能(PHP)和布局(HTML)

    • 避免页面元素重复

       第一个目的是谈论得最多的目的,它设想的情形是:一组程序员编写用于生成页面内容的PHP脚本,同时另一组设计人员设计HTML和图形以控制页面的最终外观。分离功能和布局的基本思想就是使得这两组人能够各自编写和使用独立的一组文件:程序员只需关心那些只包含PHP代码的文件,无需关心页面的外观;而页面设计人员可以用自己最熟悉的可视化编辑器设计页面布局,无需担心破坏任何嵌入到页面的PHP代码。

       如果你曾经看过几个关于PHP模板的教程,那么你应该已经明白模板的工作机制。考虑一个简单的页面局部:页面的上方是页头,左边是导航条,其余部分是内容区域。这种网站可以拥有如下模板文件:

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值