网站
PHP
实现
技术
网站的PHP实现技术,PHP是一种服务器端解释执行的脚本语言。如果用户接触过ASP的话,那么对于在HTML页面中嵌入代码应该是比较熟悉了。PHP代码在服务器一端被解释转变成普通的HTML页面内容,送给浏览器一端。这种模式可以用来完成相当复杂的功能。PHP是编程语言和应用程序服务器的结合。它和其他编程语言类似,使用变量存储临时数值,使用操作符处理变量。PHP的真正价值在于它常用于网站的应用程序服务器。,1 PHP概述,PHP(原意为Personal Home Page),是一种跨平台的服务器端嵌入式脚本技术。PHP页面是一种文本文件,是在普通HTML页面文件中嵌入PHP脚本语句,由服务器解释和翻译成普通的HTML文件,然后传送给客户端浏览器,这一点和ASP一样。PHP是用C语言编写而成,可运行于Unix/Linux和Windows 9x/NT下。目前最新的版本为PHP 4.0,而常用的版本为PHP 3.0。,1 PHP概述,PHP的网上资源如下:(1)官方网站:http:/www.PHP.net/(2)说明手册:可在官方网站上查阅或下载说明文件。或者在安装完成后,在PHP的目录底下的子目录./doc中取得,该手册为html格式,可用浏览器直接浏览。,1.1 网站的PHP实现技术的特点,在网站的实现技术方面,PHP具有四个主要的特点。1.快速PHP是一种非常强大的CGI脚本语言,其语言特点基本上源于C语言,实现方式更像PERL,而其对数据库的内在支持更使之成为ASP的强大对手。同时,PHP是一种服务器内置式的Script语言,语法上混合了C、Java、Perl等语言的、以及PHP式的新语法,执行动态网页比CGI或者Perl更快,这是它的第一个突出的优点。它的出现使得在Unix上更快速地开发动态Web成为现实。它与Javascript等语言的一个区别就是PHP是在服务器执行,客户机所看到的是其在服务器上运行的结果。,1.1 网站的PHP实现技术的特点,2.适合于网络开发领域对于网络开发领域,PHP是最合适的。因为PHP是被设计用来编写Web应用程序的语言,所以对于为它度身量作的任务Web站点的开发,无疑最能胜任。按照David Medinets的说法:PHP是编程语言和应用程序服务器的结合。PHP和其他的编程语言类似,使用变量存储临时数值,使用操作符处理变量。PHP的真正价值在于它是一个应用程序服务器。所谓的应用程序服务器,是指一个把几项不同的技术组合为一个完整套件的程序。这些技术包括:,1.1 网站的PHP实现技术的特点,(1)一个功能强大的编程语言。(2)存取数据库中存储的资料。(3)支持Internet协议,尤其是电子邮件和HTTP协议。PHP在Internet上,支持了许多的通信协议(Protoco1),包括了与电子邮件相关的IMAP、POP3、网管系统SNMP、网络新闻NNTP、账号共享NIS、全球网HTTP及Apache服务器、目录协定LDAP以及其他网络的相关函数。,1.1 网站的PHP实现技术的特点,3.跨平台PHP具有在不同操作平台下适用的版本,也提供源代码版本。PHP可支持多种主流与 非主流数据库,包括常用的DBA、dbase、dbm、filePro、Informix、InterBase、mSQL、Microsoft SQL Server、MySQL、Solid、Sybase、ODBC、Oracle 8、Oracle、Postgre SQL等。用PHP写出来的Web后端CGI代码,可以很轻易地移植到不同的平台上。例如,用 Linux架构的网站,在系统负荷过高时,可以快速地将整个系统移到SUN工作站上,不用重新编译CGI程序。面对快速发展的Internet,这是长期规划的最好选择。,1.1 网站的PHP实现技术的特点,4.功能全面PHP的功能非常全面,包括英文拼写检查、BC高精确度计算、西洋历法、PDF文件格式、Hyperwave服务器、图形处理、编码与解码功能、杂凑处理、WDDX功能、qmail系统、压缩文件处理、XML解析,除此之外,对于一般语言有的数学运算、时间处理、文件系统、字符串处理、行程处理等功能,它也同样擅长。PHP支持HTTP的身份认证、Cookie、GIF图像创建,其最有代表性的特点是它的数据库层,这使得编写基于数据库的网页变得非常简单。PHP也支持POP3、HTTP、SNMP、NNTP、IMAP等协议,并可采用它们的服务进行网络编程。,1.2 PHP运行环境,PHP具有跨平台特性,可以与多种数据库连接,其中:Linux+Apache+MySQL是它的最佳组合,效率也是最高的。1.MySQLMySQL是一个小巧灵珑的数据库服务器软件,对于小型系统是非常理想的。除了支持标准的ANSI SQL语句,它还支持多种平台,而且在Unix系统上该软件支持多线程运行方式,因此性能相当好,所以它与类Unix的Linux配合十分默契。而对于不使用Unix/Linux的用户,它可以在Windows NT/2000系统上以系统服务方式运行,或者在Windows 9x系统上以普通进程方式运行。MySQL的组合可以跨平台运行,这就意味着可以在Windows上开发,然后在Unix/Linux平台上运行。另外,PHP也能作为标准的CGI进程来运行,此时它是一个独立的脚本解释器,或者是Apache的一个嵌入模块。,1.2 PHP运行环境,2.LinuxLinux是一套免费使用和自由传播的类Unix操作系统,Linux以它的高效性和灵活性著称。它能够在PC计算机上实现Unix特性,具有多任务、多用户的能力。Linux最大的特点在于它是GNU(Gnus Not Unix)的一员,遵循公共版权许可证(GPL),秉承“自由的思想,开放的源码”的原则,对计算机爱好者完全开放的操作系统。选择Linux有如下几个优点:(1)Linux是“免费”的,包括其附带的的“免费”软件,可以极大 地降低总成本(TCO)。(2)Linux比较稳定而且性能相当地好。,1.2 PHP运行环境,(3)Oracle、Infomix、Sysbase、IBM等许多公司都支持Linux,用它来做数据库平台也非常好。(4)Linux本身就是通过网络来协同开发的,所以非常适合Internet/Intranet。(5)开放的源代码特性使得用户可以根据自己的要求来添加或删除某些功能,其可定制性极为方便。,1.2 PHP运行环境,3.ApacheApache是基于UNIX平台的,它功能强大,安全系数高,而且十分稳定。Apache是目前用来当“虚拟主机”的最热门的后台软件。所谓的“虚拟主机”主要是指“虚拟网络服务”,通过它与真实的服务器配合就可以完成整个服务。,1.2 PHP运行环境,Apache服务器的设计不但与NCSA httpd 1.3相容,并且提供了以下功能:(1)作为身份验证之用的DBM资料库。(2)自定的(Customised)错误与问题回应方式。(3)多重的directoryIndex指令。(4)不限次数的Alias以及Redirect指令。(5)以内容为基础的文件协商。(6)虚拟服务器。,1.2 PHP运行环境,4.PHP的最佳组合及运行环境用户一般可以选用以下环境:(1)服务器端运行平台:Linux(2)后台Web服务器:Apache(3)数据库:MySQL(4)客户端运行平台:Windows 9x、Windows NT或者Windows 2000(5)支持软件:IE浏览器(4.0以上)或其它兼容的浏览器(6)编程软件:Dreamweaver、Flash、FrontPage等。,1.2 PHP运行环境,利用Apache+MySQL+Linux+PHP就可以建立起网站并提供网络服务了。关于Apache、MySQL与Linux其他信息请参考相关书籍。,1.3 PHP访问数据库的机制,PHP访问数据库的工作过程如下:(1)客户在浏览器地址栏目输入要访问的PHP页面的URL,发出一个PHP请求。(2)Web服务器接受该请求,根据扩展名.php识别出PHP文件,并找出相应的PHP文件。(3)Web服务器把PHP文件发送到PHP引擎。(4)PHP引擎将PHP文件从头至尾进行扫描,根据命令连接后台数据库。(5)数据库管理系统对数据库进行操作,并将用户请求数据通过数据库管理系统上传到PHP引擎。,1.4 PHP与其它的网站实现技术的比较,网站实现技术有很多种,而PHP只是其中的一种。下面对目前流行的三种网站实现技术ASP、PHP与JSP技术进行比较。,1.4 PHP与其它的网站实现技术的比较,其中,JSP(Java Server Pages)是一种崭新的动态网页制作技术,它具有跨平台与跨网络服务器支持,以Java为主的技术来产生动态网页。JSP与Microsoft的ASP兼容,但它是使用类似HTML的卷标以及Java程序代码片段而不是VBScript。当用户使用Apache或Netscape服务器时,并不能提供ASP支持,这时可以考虑JSP。虽然也可以取得这些服务器的ASP附加配备模块,但价格相当昂贵,目前Sun并没有对JSP组件收取费用。同时对于Solaris与Linux以及Windows,这些组件也都很容易取得。但请不要将JSP与服务器端的JavaScript混在一起。网络服务器会将用JSP写成的Java程序代码片段自动转换成Java servlets。而先前许多必须以Perl手写的程序或服务器特定的API(如ASP)控制的功能也都可通过JSP来自动化处理,1.4 PHP与其它的网站实现技术的比较,ASP、PHP与JSP技术的平台性能比较见表9-l。,2 PHP的功能特点,PHP是最流行的Web脚本语言之一,它运行在Web服务器端,根据用户请求或服务器端的数据产生动态网页。它功能强大,和HTML脚本融合在一起,并具有内建访问数据库的能力。它能够作为Apache Web服务器的模块执行,也使得它的执行效率要高于普通的CGI程序。,2.1 PHP的HTTP认证功能,HTTP认证功能仅当PHP作为Apache的模块运行时才可用。在一个Apache的PHP解析模块中,可以使用Header()函数发送一个“请进行身份验证”的消息到客户端的浏览器上,这将在客户端弹出一个要求输入用户名和密码的窗口。当用户填入了用户名和密码后,包含该段PHP程序的网页会再次被调用,有三个变量被传入程序,SPHP_AUTH_USER、SPHP_AUTH_PW和SPHP_AUTH_TYPE分别代表用户名、密码和认证类型。(此功能只支持基本身份验证)。,2.1 PHP的HTTP认证功能,下面是一段HTTP认证的程序:?If(!isset($PHP_AUTH_USER)Header(WWW-Authenticate:Basic realm=My Realm);Header(HTTP/1.0401 Unauthorized);echo Text to send if user hits Cancel buttonn;exit;else,2.1 PHP的HTTP认证功能,if(!($PHP_AUTH_USER=tnc,2.1 PHP的HTTP认证功能,elseecho Welcome tnc!;?,2.1 PHP的HTTP认证功能,以上的例子通过用户名称/密码对tnc/nature来验证一名用户的登录,事实上在实际应用中不大可能如上面那样,使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件来存取它们。但是要注意,以上方法不能阻止某些人使用在该服务器上已经获得认证的URL来窃取密码,从而对非授权URL进行控制的情况。,2.2 使用PHP生成动态的GIF图像,PHP不但可以输出HTML,也可以方便地生成动态的GIF图像文件,甚至GIF格式的图像流。为此要将PHP和提供图像函数GDlibrary一起编译。下面是用PHP创建GIF动画的示例程序。?Header(Content-type:image/gif);$string=implode($argv,);$im=imagecreatefromgif(images/buttonl.gift);$orange=ImageColorAllocate($im,220,210,60);,2.2 使用PHP生成动态的GIF图像,px=(imagesx($im)-7.5*strlen($string)/2;ImageString($im,3,$px,9,$string,$orange);ImageGif($im);ImageDestroy($im);?这个文件可以通过网页中类似的语句来调用。上面这段程序button.php3取出字符串“text”并且把它写到背景图上(本例中是“images/buttonl.gif”),然后输出所得到的图像。这样就可以很方便地制作文字不同而样式相同的按钮,而不必去一一重画了。在程序中它们将被动态地生成。,2.3 文件上传支持,利用PHP用户能够从任何兼容RFC-1867标准的浏览器上传文件。这个功能使用户既可以上传文本文件也可以上传二进制文件。结合PHP的认证和逻辑函数,能够完全控制谁可以上传文件,和文件上传后可以干什么。要实现文件上传,需要建立一个特殊的FORM,请看下面的例子:,2.3 文件上传支持,Send this file:其中的URL是一个用于响应的PHP文件,隐藏的MAX FILE-SIZE参数必须写在输入文件字段之前,它指明了可以上传的文件的最大字节数。上载传输成功后,下面的变量将被定义:,2.3 文件上传支持,$userfile:用户上传到服务器上的文件临时存放的名称。$userfile_name:在用户机器上该文件的原始名称。$userfile_size:上传文件的实际字节数。$userfile_type:如果用户的浏览器提供了这个信息的话,它表示MIME的类型。例如“image/gif”。,2.3 文件上传支持,“$userfile”这个变量是上面表单中TYPE=file的字段的名字,在例中称为“userfile”。文件被存储在服务器上默认的临时目录下。用户可通过手工设置PHP运行的环境变量中的TMPDIR来进行设置。该变量不能通过程序中的PutEnv()函数设置。表单中指定的PHP程序,可以控制上传了的文件用来干什么。比如,可以使用Stlle_size 变量来决定抛弃那些太大或太小的文件;可以通过比较Sille_type变量剔除类型不匹配的文件。总之,用户可以决定是把那个文件从临时目录里删除还是移到别的地方去。另外,有一个问题值得注意,CERN的httpd服务器可能删掉content-type中MIME数据头后第一个空白开始的所有数据,因此,CERN的httpd服务器不支持文件上传。,2.4 HTTP Cookie的支持,PHP 支持基于HTTP的Cookies。在需要时可以像使用一般变量一样方便地使用 Cookie。Cookies是浏览器保存于客户端的一些信息片段,由此可以知道某一台某特定PC上的人是否访问过用户的站点及浏览者在网站上的踪迹等。使用Cookies的典型例子就是对浏览者偏好的辨别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容输出到浏览器之前调用。以下是一个简单例子:,2.4 HTTP Cookie的支持,?if(empty($VisitedBefore)/如果没有设定cookie,为cookie赋上当前时间值/函数中的最后一个参数声明了该cookie保存的时间/在这个例子中是1年/time()函数返回自1970年1月1日以来的以秒数计的时间SetCookie(VisitedBefore,time()+(60*60*24*365);,2.4 HTTP Cookie的支持,else/欢迎浏览者再次光临echo Hello there,welcome back;/读取cookie并判断 if(time()-$VisitedBefore)=(60*60*24*7)echo Why did you take a week to come back.You should be here more oftett?;?,