运算符和表达式PHP的基本控制语句PHP与面向对象课件

PPT
  • 阅读 27 次
  • 下载 0 次
  • 页数 324 页
  • 大小 1.438 MB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档50.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
运算符和表达式PHP的基本控制语句PHP与面向对象课件
可在后台配置第一页与第二页中间广告代码
运算符和表达式PHP的基本控制语句PHP与面向对象课件
可在后台配置第二页与第三页中间广告代码
运算符和表达式PHP的基本控制语句PHP与面向对象课件
可在后台配置第三页与第四页中间广告代码
运算符和表达式PHP的基本控制语句PHP与面向对象课件
运算符和表达式PHP的基本控制语句PHP与面向对象课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 324
  • 收藏
  • 违规举报
  • © 版权认领
下载文档50.00 元 加入VIP免费下载
文本内容

【文档说明】运算符和表达式PHP的基本控制语句PHP与面向对象课件.ppt,共(324)页,1.438 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44905.html

以下为本文档部分文字说明:

火龙果整理uml.org.cn本章主要介绍PHP(PersonalHypertextPages)的背景及功能,并将PHP和其他CGI界面进行比较,使大家对PHP有初步的认识。首先介绍PHP的诞生背景以及基本概况,接下来介绍PHP的一些特性,最后通过将PHP与其他脚本语言进行比较,使用

大家进一步了解PHP。学习完本章后,要求大家能对PHP有一个概括的了解。1、简介:PHP是一种服务器端的脚本语言。它和HTML一样,是一种编写网页的脚本语言,只是PHP是一种服务器端的语言,它保存在服务器上,客户端需要浏览器支持,当客户端通过浏览器请求

某个PHP时,首先服务器要对它进行处理,处理完毕后才发送最后的处理结果到客户端浏览器;而HTML则不需要服务器端的解释过程。PHP与ASP相比,PHP开放源代码并可跨越平台,PHP可以运行在Windows及Linux操作系统下,

而ASP只能运行在Windows平台下。PHP不需要任何预先处理就可快速反馈结果,它消耗的资源更少,当PHP作为ApacheWeb服务器的一部分时,运行代码不需要调用外部二进制程序,服务器不需要承担任何额外的负担。1.1PHP简介火龙果整理uml.org.cn2、一个简单的P

HP文件:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body><b>

下面的输出来自于PHP代码</b><?phpecho("helloworld")?></body></html>在这个文档中,大部分都是我们非常熟悉的HTML代码,只是<?phpecho(“hellowo

rld”)?>这一行比较特别,它就是PHP代码。这段程序的执行过程是:当客户端请求这个PHP文档时,服务器端调用这个文件。因为它是.PHP文件,服务器首先调用PHP解释器对这个文件进行处理。处理完毕,把最后的结果HTML页面发送到客户端浏览器中,客户端的

用户就可以看到最后的执行结果了。火龙果整理uml.org.cn输出到浏览器的HTML代码为:<html><head><metahttp-equiv="Content-Type"content="text/htm

l;charset=gb2312"><title>无标题文档</title></head><body><b>下面的输出来自于PHP代码</b>helloworld</body></html>由此可见,PHP利用程序设计的语法来控制HTML代码的生成与输出,从而给网站注入了动态

的成分。PHP提供了许多功能,用于完成功能复杂的动态网站设计与B/S模式软件的开发。PHP的语法格式主要借用于C语言的语法格式。火龙果整理uml.org.cn1、PHP中任何变量不需要事先声明,可以方便的建立数组。2、PHP支持面向对象的

编程。3、PHP有丰富的功能函数库。4、PHP是一个免费的开放源脚本语言。5、PHP支持多种方式代码嵌套<%%><??><?php?><scriptlanguage=php></script>。6、PHP支持多种数据库,PHP特别适合与M

ySql数据库结合架构中小型电子商务网站,PHP支持dBase、Infomix、mSQL、MSSQLSERVER、MySQL、Sybase、Orale、ODBC等数据库。对于每一种数据库,PHP都有相应的函数来处理与数据库的通信和对数据库的操作。7、PHP支持多种通信协

议,支持与电子邮件相关的POP3协议及其他相关网络协议。8、PHP具有极强的兼容性,可以非常轻松的移植到不同的操作系统上。9、PHP还支持图形处理、文件处理等功能。1.2PHP的功能及特点火龙果整理uml.org.cn1.3PHP与ASP脚本语言的比较语言名称PHPASP操作系统均可Win32

Web服务器数种IIS执行效率快快稳定性佳中等开发时间短短修改时间短短程序语言PHPVB网页结合佳佳学习门槛低低函数支持多少系统安全佳极差改版速度快慢火龙果整理uml.org.cn本章主要介绍了PHP5

.0的安装方法。PHP不仅可以在Linux下运行,还可以在Windows下运行,本章对Linux部分的安装简略带过。主要集中在WindowsXP/2003下的安装。Web服务器采用Apache2.0.54服务器进行。(略)2.1Linux系统下安装PHP2.2Window

sXP/2003系统下安装PHP相关文件php-5.0.4-Win32.zip压缩包,apache_2.0.54-win32-x86-no_ssl.msi安装包。2.2.1基于Apache服务器的安装PHP有两种安装模式。一种是CGI模式,主要利用

php-cgi.exe或php-win.exe文件对PHP脚本文件进行解释执行;另一种是SAPI模式,在该模式中将PHP做为模块方式运行,并利用利用php5apache2.dll或php5isapi.dl

l模块对PHP脚本文件进行解释执行。CGI模式的特点是稳定安全;SAPI模式则可以大大提高服务器的效率,并且可以提供一些新的功能。火龙果整理uml.org.cn1、安装PHP:1)、将php-5.0.4-Win32.zip压缩包解压,然后复制到C:\并更名为C:\PHP52

)、拷贝C:\PHP5\php.ini-dist文件到X:\WINNT下,并更名为php.ini3)、打开php.ini进行参数修改,把extension_dir设置为extension_dir="C:/php5/ext"

4)、在php.ini配置文件中选择运行PHP时需要加载的模块。将php.ini文件中下面格式的行前的;去掉以加载相应的模块,注:加载模块不正确将会出错extension=php_bz2.dllextension=

php_cpdf.dllextension=php_crack.dll……2、安装并配置Apache服务器:1)、Apache下CGI模式的安装(CGI模式):火龙果整理uml.org.cna、在安装Apache之前停止IIS的80端口的站点。b、执行a

pache_2.0.54-win32-x86-no_ssl.msi安装包,在安装过程中对domain域名选择为localhost计算机名选择为localhost电子邮箱为任意,并选择安装为80端口的Web站点,并安装在C:\Apache下。c、安装完成重新

启动计算机,找到C:\Apache\Apache2\conf下的httpd.conf文件,打开并修改:在ScriptAlias段,增加以下行ScriptAlias/PHP5/“C:/php5/”在AddType段,增加以下行AddTypeapplication/x

-httpd-php.phpActionapplication/x-httpd-php"/php5/php-cgi.exe“d、然后保存httpd.conf,并重新启动Apache服务器2)、将PHP作为Apache模块的安装(SAPI模式):火龙果整理uml.org.cna、b步骤同CG

I模式的安装。c、安装完成重新启动计算机,找到C:\Apache\Apache2\conf下的httpd.conf文件,打开并修改:在AddType段,增加以下行AddTypeapplication/x-

httpd-php.php找到LoadModule段,增加以下行LoadModulephp5_modulec:\php5\php5apache2.dlld、然后保存httpd.conf,并重新启动Apache服务器3)、Apache配置文

件httpd.conf的其它配置选项:a、增加缺省文档找到DirectoryIndex行,将其修改为:DirectoryIndexindex.htmindex.phpb、修改网站的端口号:找到Listen80行,将其修改为:Listen8080并找到Server

Namelocalhost:80行,将其修改为:ServerNamelocalhost:8080火龙果整理uml.org.cnc、修改网站的根目录:找到DocumentRoot“C:/Apache/A

pache2/htdocs”行,将其修改为:DocumentRoot“D:/myPHP”相关文件php-5.0.4-Win32.zip压缩包。1)、IIS下CGI模式的安装(CGI模式略):a)、在WindowsXP/2003下,双击[控制面板]窗口中的[管理工具]图标,打开[管理工具]窗口。

在窗口中双击[Internet服务管理器]图标,打开[Internet信息服务]窗口。单击服务器左边的节点将其展开,然后右击[相应Web站点]选项,从打开的快捷菜单中选择[属性]命令。b)、在弹出的窗口中选择[主目录]标签,单击配置按钮,在打开的[应用程序配置]窗口中,选择[应用程序

映射]标签c)、单击[添加]按钮,弹出[添加/编辑应用程序扩展名映射]对话框,在[可执行文件]文本框中通过[浏览]按钮选择php-win.exe所在的文件名及路径。在[扩展名]文本框中输入php文件的扩展名”.php”。选中[脚本引擎]复选框。d)、单击确定,关闭IIS服务器

窗口,然后重新启动IIS服务即可。2.2.2基于IIS服务器的安装火龙果整理uml.org.cn2)、IIS下SAPI模式的安装(SAPI模式):a)、在WindowsXP/2003下,双击[控制面板]窗口中的[管理工具]图标

,打开[管理工具]窗口。在窗口中双击[Internet服务管理器]图标,打开[Internet信息服务]窗口。单击服务器左边的节点将其展开,然后右击[相应Web站点]选项,从打开的快捷菜单中选择[属性]命令。b)

、在弹出的窗口中选择[ISAPI筛选器]标签,单击[添加]按钮,弹出[筛选器属性]对话框,在[筛选器名称]处输入PHP,在[可执行文件]文本框中通过[浏览]按钮选择php5isapi.dll所在的文件名及路径。c)、在弹出的窗口中选择[主目录]标签,单击配置按钮,在打开的[应用程序配置]窗

口中,选择[应用程序映射]标签,单击[添加]按钮,弹出[添加/编辑应用程序扩展名映射]对话框,在[可执行文件]文本框中通过[浏览]按钮选择php5isapi.dll所在的文件名及路径。在[扩展名]文本框中输入php文件的

扩展名”.php”。选中[脚本引擎]复选框。d)、单击确定,关闭IIS服务器窗口,然后重新启动IIS服务即可。2.3测试PHP安装是否成功然后在对应站点的根目录下创建一个文件index.php,内容为:<?phpphpinfo();?>通过浏览器浏览该文件index.ph

p,如果显示了PHP的版本及相关信息,说明在Apache或IIS中已经成功配置了PHP。火龙果整理uml.org.cn2.4PHP配置文件相关参数设置PHP的配置文件为php.ini,该文件的存放路径为X:\Windo

ws或X:\WINNT,PHP要区分大小写。如果PHP被配置为CGI模式,则PHP在每次启动时都会读取该配置文件。如果PHP被配置为服务器模块(SAPI模式)模式,则在Web服务器启动执行时就会读取该配置文件,之后就不再读取,因此在这

种情况下,每次修改PHP配置文件,都需要重新启动Web服务器。php.ini文件的语法非常简单。以分号开头的行在服务器读取时将被忽略(称之为注释),每行的格式都为:配置选项名称=值。其中配置选项名称大小写是有区

别的,因此在进行配置修改时必须注意选项的大小是否保持一致。值可以是字符串、数字、PHP常数、布尔常数(On,Off,True,False,Yes,No,None)、或表达式。要查看目前PHP的系统配置,在PHP页面中调用并执行phpinfo()函数即可。

PHP中常用的配置选项:1、asp_tags=布尔常数(OnOff)配置PHP是否启用ASP脚本块标记方法<%%>做为PHP代码块标记方法。如果设置为Off,则允许<?php?><scriptlanguage=”php”></script>标记可以作为PHP脚本代码块的标记方法。火龙果整理uml

.org.cn2、short_open_tag=布尔常数(OnOff)配置PHP是否使用<??>做为PHP代码块标记方法。如果设置为Off,则只有<?php?><scriptlanguage=‟php

‟></script>标记可以作为PHP代码块的标记方法。强烈建议设置该值为On。3、extension_dir=字符串配置扩展功能函数库的路径,例”C:\php5\ext\”4、extension=字符串配置PHP启动时所要载

入的扩展功能函数库。5、max_execution_time=整数配置PHP程序最长执行的时间,单位:秒。6、memory_limit=整数配置PHP程序最多使用的内存空间大小。7、session.save_handler=files配置Session变量

的存储方式,files表示以文件方式存储Session数据。8、session.name=PHPSESSID配置Session中SessionID所使用的Cookie名称,默认值为PHPSESSID。火龙果整理uml.org.cn9、session.auto_

start=0配置Session是否自动打开,默认值为0(否)。10、upload_max_filesize=2M配置上传文件的最大大小。11、precision=12设置浮点数据的小数点后有效位数。12、register_globals=Off是否注册全局变量,当

注册全局变量设置为On后,访问GET、POST、Cookie等变量时,可以直接使用$变量名来访问,不推荐这种方式。13、variables_order="EGPCS"变量的优先顺序,从低到高。E-----代表环境变量G-----GET变量P-----POST变

量C-----Cookie变量S-----Server变量火龙果整理uml.org.cn本章需要掌握的内容:PHP代码在HTML中的嵌入形式,PHP语句的格式,程序注释,包含文件。3.1一个简单的程序:<html><head><metahttp-equiv="Content-Type"c

ontent="text/html;charset=gb2312"><title>无标题文档</title></head><body><?phpecho"helloworld\n";?></body></html>说明:\n

代表换行,语句结束需要;火龙果整理uml.org.cn3.2PHP代码在HTML中的嵌入形式:格式1:此格式必须将php.ini文件中short_open_tag的值设置为On<?=“大家好”?><?echo(“这是一个PHP语言的嵌入范例\n”);

?>格式2:常用的格式<?phpecho(“这是第2个PHP语言的嵌入范例\n”);?>格式3:<scriptlanguage=”php”>echo(“这是类似JavaScript及VBScript语法的PHP语言嵌入范例\n”);</script>格式

4:此格式必须将php.ini文件中asp_tags的值设置为On才能使用<%=“大家好”%><%echo(“这是类似ASP嵌入语法的PHP范例\n”);%>火龙果整理uml.org.cn3.3PHP语句结束符:语句结束必须使用;3.4程序注释:1、//注释一行2、/**/该注释用于

注释一段,注:不能进行嵌套3.5包含文件:类似于asp中的<!--#includefile=“文件”-->1、require或者require_once:该函数包含的文件会成为程序的一部分,所以一般在PHP程序的最前面开始包含所需要的文件,应该指定正确的路径。2、include或者includ

e_once:该函数一般是放在流程控制的处理部分。PHP程序在读到include的文件时,才将该文件的内容包含进来。火龙果整理uml.org.cn本章要求掌握:数值类型,常量,变量,PHP数组,运算符的相关知识。4.1数值类型:4.1.1数字1)十进制数:例如:123----------十进制整

数123.34------十进制浮点数2)八进制数:例如:0433)十六进制数:例如:0x23火龙果整理uml.org.cn数制转换函数:1、bindec函数:功能:二进制数十进制数的转换格式:bindec(“二进制数”)返回:数值,十进制数2、decbin函数:功能:十进制数二进制数的

转换格式:decbin(十进制数)返回:字符串,字符串类型的二进制数3、octdec函数:功能:八进制数十进制数的转换格式:octdec(“八进制数”)返回:数值,十进制数4、decoct函数:功能:十进制数八进制数的转换格式:dec

oct(十进制数)返回:字符串,字符串类型的八进制数火龙果整理uml.org.cn5、hexdec函数:功能:十六进制数十进制数的转换格式:hexdec(“十六进制数”)返回:数值,十进制数6、dechex函数:功能:十进制数十六进制数的转换

格式:dechex(十进制数)返回:字符串,字符串类型的十六进制数7、gettype函数:功能:获取变量的数据类型格式:gettype(变量)返回:字符串,变量的数据类型例:<?phpechogettype($a);?>火龙果

整理uml.org.cn例:<?php$int=54;$double=54.00;echo"变量int的类型是".gettype($int)."。<br>";echo"变量double的类型是".gettype($double)."。<br>";$int=dech

ex($int);echo"int被转化为十六进制的数值:".$int.".<br>";?>4.1.2文本1、转义字符:\n--------换行\r--------回车\t--------制表符\$-

-------美元符号\\---------反斜杠\‟---------单引号(用在单引号字符串中)\”--------双引号(用在双引号字符串中)火龙果整理uml.org.cn2、单引号字符串:单引号字符串中不允许出现变量例:’hellowor

ld‟‟<p>helloworld</p>‟„hello\‟world‟„Johnsaid,”Giftsaregreat.”‟3、双引号字符串:双引号字符串中允许出现变量例:“Perhapseveryonerememberslove.”“Johnsaid,\”Giftsareg

reat.\””“Johnsaid,‟Giftsaregreat.‟”4、反引号字符串:(用于执行一个操作系统命令)反引号字符串中允许出现变量例:<?phpecho“查看C:\\的文件\n<pre>”;echo`

dirc:\\`;echo`netsendDSWN12“大家好”`;echo“</pre>”;?>火龙果整理uml.org.cn1、__FILE__这个内置常量代表PHP文件名,若引用文件(使用require或include),则在引用文件内的该常量为引用文件名。例:test

.php文件内容<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body><?phpinclude("conn.inc")

;echo“在文件test.php中的__FILE__的值为:”.__FILE__;?></body></html>4.2常量:4.2.1PHP预定义常量火龙果整理uml.org.cn2、__LINE__:这个内置常量返回当前PHP页面中脚本(包括HTML代码行和PHP注释行

)行的行数。若引用文件(使用require()或include()),则返回在引用文件内的PHP脚本的行数。例test.php文件内容<html><head><metahttp-equiv="Content-Type"content="text/html;charset=

gb2312"><title>无标题文档</title></head><body><?phpinclude("conn.inc");echo“在文件test.php中的__LINE__的值为:”.__LINE__;?></body></html>

火龙果整理uml.org.cn3、PHP_VERSION:返回PHP程序的版本。例test.php文件内容<html><head><metahttp-equiv="Content-Type"content="text/html;charset=g

b2312"><title>无标题文档</title></head><body><?phpecho“PHP中的版本为:”.PHP_VERSION;?></body></html>火龙果整理uml.org.cn4、PHP_OS:返回执行PHP解释器的操作系统名称

test.php文件内容<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body><?phpecho“执行PHP

解释器的操作系统为:”.PHP_OS;?></body></html>5、TRUE:逻辑真(true)6、FALSE:逻辑假(false)4.2.2用户定义常量火龙果整理uml.org.cn函数:def

ine(“常量名称”,常量值)常量一旦定义不能修改其值。例:test.php文件内容<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><titl

e>无标题文档</title></head><body><?phpdefine(“PI”,3.14159);define(“COPYRIGHT”,”Copyright&copy;2000-2008”);echo“PI常量为:”.PI.“CO

PYRIGHT常量为:”.COPYRIGHT;?></body></html>4.3变量:火龙果整理uml.org.cnPHP中变量可以放在双引号字符串中例:$myvar=”aa”;echo”ddd$myvar”;也是正确的4.3.1预

定义变量查看PHP的预定义变量test.php文件内容<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></he

ad><body><?phpphpinfo();?></body></html>火龙果整理uml.org.cn全局变量的使用方法有两种:1)使用$全局变量名,要采用这种方式使用服务器变量或环境变量,应该修改php.ini文件中register_g

lobals(注册全局变量选项)=On,2)使用$HTTP_SERVER_VARS[“全局变量名”],即使register_globals=Off,也可以使用这种方法。1、Apache服务器变量:1)SERVER_NAME:当前运行PHP脚本所在的服务器

名字,如果脚本是在虚拟站点上运行,该值就是虚拟站点名。2)REQUEST_METHOD:获取对应页面所使用的请求方法(POST、GET、HEAD、PUT等)3)QUERY_STRING:获取对应页面所采用的请求字

符串4)DOCUMENT_ROOT:当前执行的PHP脚本的文档根目录,也就是Apache服务器配置文件中的DocumentRoot配置项的值火龙果整理uml.org.cn5)HTTP_HOST:当前请求中H

ost的内容6)HTTP_REFERER:把浏览器引导到该页的页面地址7)HTTP_USER_AGENT:当前请求中User_Agent的值,它存储着浏览器类型8)REMOTE_ADDR:浏览该网页的客户端IP地址9)SERVER_PORT:Web服务器与客户端通讯的

端口号,默认为80端口,如果使用SSL通讯,则为服务器上所定义的SSL端口号例:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb

2312"><title>无标题文档</title></head><body><?phpecho$HTTP_SERVER_VARS["REMOTE_ADDR"];?></body></html>火龙果整理uml.org.cn2、环境变量:Windows2000下Path

:环境变量搜索路径,将在这此路径中搜索文件SystemRoot:Windows2000系统安装目录ComSpec:操作系统命令解析文件cmd.exe文件的路径PATHEXT:Path路径中要搜索的文件的扩展名例

:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body><?phpecho$_ENV[“Path”].“<br>”;echo$H

TTP_ENV_VARS[“SystemRoot”].“<br>”;?></body></html>火龙果整理uml.org.cn3、PHP自身定义变量:$HTTP_COOKIE_VARS:通过HTTPCookies传递给脚本的一个由变量组成的关联数组$HTTP_GE

T_VARS:通过HTTPGET方法传递给脚本的一个由变量组成的关联数组。$HTTP_POST_VARS:通过HTTPPOST方法传递给脚本的一个由变量组成的关联数组。$HTTP_POST_FILES:存储通过HTTPPOST方法上传的文件的信息。$HTTP_ENV_VARS:从

上级传递过来的变量组成的关联数组。$HTTP_SERVER_VARS:从HTTP服务器传送到当前脚本的一组变量组成的关联数组。火龙果整理uml.org.cn例:<html><head><metahttp-equiv="Content-

Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body><?phpforeach($HTTP_ENV_VARSas$vars){echo$vars.“<br>”;}foreach($HTTP_SER

VER_VARSas$vars){echo$vars.“<br>”;}?></body></html>火龙果整理uml.org.cnPHP的变量名称必须由一个美元符号加上其它的字符组成,并区变量名称是区分大小写的。变量名必须遵循PHP的命名规则,PHP的变量名必须以字母或下划

线或中文字符开始,变量不用声明就可以使用。在程序中请不要用全局变量做为你程序中的变量来使用。例:<?php$中文变量="我";$Var="我";$var="你";//$4site=‟notyet‟;$_

4site=‟notyet‟;echo"\$中文变量=".$中文变量."\$Var=".$Var."\$var=".$var;?>1)、变量以传值方式进行赋值:<?php$Var="我";$var=$Var;$Var=123;echo"\$Var=".$Var."\$var=".$v

ar;?>4.3.2用户自定义变量的初始化火龙果整理uml.org.cn2)、变量以传递变量(引用)方式进行赋值(引用只能针对变量):&<?php$Var="我";$var=&$Var;$Var=123;echo"\

$Var=".$Var."\$var=".$var;?><?php$foo=‟Bob‟;$bar=&$foo;$bar=”Mynameis$bar”;echo$foo;echo$bar;?><?php$foo=25;$bar=&$foo;$bar=&(24*

7);//错误functiontest(){return25;}$bar=&test();//错误?>火龙果整理uml.org.cn3)、检查变量是否设置的函数isset:格式:isset(变量)功能:如果变量已经设置,则返回true,否则返回false<?php$Var="我";echois

set($Var);echoisset($var);?>4)、销毁变量的函数unset:格式:unset(变量1,变量2,…变量n)功能:用户销毁即删除已经赋值的变量<?php$Var="我";unset($Var);$var=123;e

cho"\$Var=".$Var."\$var=".$var;?>5)、检查变量是否为空的函数empty:格式:empty(变量)功能:若变量值为空值或零值(0,”0”,NULL,false,””),返回true,否则返回false<?php$var=0;if(em

pty($var)){echo„$var值为空';火龙果整理uml.org.cn1、PHP脚本中声明一个变量,则该变量可以应用于整个文件(包括require或include所包含的文件中),但函数内部除外

。例:test.php:<?php$a=12;include(“b.inc”);?>b.inc:<?phpecho“\$a=”.$a;?>2、反之被包含文件中声明的变量,可以应用于包含文件中。例:test.php:<?phpinclude(“b.inc”);

echo“\$b=”.$b;?>b.inc:<?php$b=56;?>4.3.3变量的作用范围火龙果整理uml.org.cn3、在函数中声明的变量一般在函数结束后就会消失,不能在函数外部使用;在函数外声明的变量一般不

能在函数内使用。例:test.php:<?php$a=1;//全局范围页面级变量functionTest(){$b=12;echo“\$a=”.$a;}echo“\$b=”.$b;?>火龙果整理uml.org.cn4、特殊情况:通过global声明变量为

全局变量,使函数外声明的变量可以在函数内使用。例:test.php:<?php$a=1;//全局范围页面级变量functionTest(){$a=5;echo“<br>使用global之前\$a是函数内局部变量,其值为\$a=”.$a;global$a;echo“<br>使用global之后

\$a已经是函数外全局变量,其值为\$a=”.$a;$a=12;echo“<br>使用global并修改\$a的值之后,其值为\$a=”.$a;}Test();echo“<br>函数调用结束后\$a全局变量的值已经被函数修改,其值为\$a=”.$a;?>火龙果整理uml.org.cn5、

特殊情况:通过$GLOBALS[“全局变量名”]在函数内部使用全局变量。例:test.php:<?php$a=1;//全局范围页面级变量functionTest(){$a=5;echo"<br>\$a是函数内局部变量,其值为\$a=".$a;echo"<br>\$GLOBA

LS[\"a\"]是函数外全局变量\$a,其值为\$GLOBALS[\"a\"]=".$GLOBALS["a"];$GLOBALS["a"]=12;echo"<br>修改\$GLOBALS[\"a\"]的值之后,其值为\$GLOBALS[\"a\"]=".$GLOBALS["

a"];}Test();echo"<br>函数调用结束后\$a全局变量的值已经被函数修改,其值为\$a=".$a;?>火龙果整理uml.org.cn所谓活动变量是指一个变量的变量名也是一个变量。例:test.php:<?php$a=”hello”;$$a=

”world”;//$hello=”world”;echo“\$a=”.$a;echo“<br>\$\$a=”.$$a;echo“<br>\$hello=”.$hello;?>注意:当活动变量比较复杂时,有可能有多种理解方法,这时需要借助大括号来消除

歧义。例1:test.php:<?php$a[0]=”w1”;$a[1]=”w2”;${$a[1]}=”world”;//$w2echo“${$a[1]}<br>”;echo$w2;?>4.3.4活动变量火龙果整理uml.org.cn例2:test.php:<?php$a="w

1";${$a}[0]="hello";${$a}[1]="world";echo"${$a}[1]<br>";echo$w1[1];?>火龙果整理uml.org.cn1、HTML表单(GET和POST)HTML表单在HTML中应用最为广泛,在PHP中当表单提交时,表单中的所有域都会

自动转变为PHP可用的变量。注意:表单或Get字符串中域的名字的大小。注:PHP配置中选项register_globals设置为On时,可以通过两种方法获取表单提交的值:1)$表单变量名2)$HTTP_POST_VARS[“表单变量名”]或$HTTP_GET_V

ARS[“表单变量名”]当register_globals设置为Off时,只能通过$HTTP_POST_VARS[“表单变量名”]或$HTTP_GET_VARS[“表单变量名”]来获取表单提交过来的值。例1:test.php<formaction=”dotest.php”method=”po

st”>用户名:<inputtype=”text”name=”UserId”><br>密码:<inputtype=”password”name=”PassWord”><br><inputtype=”submit”value=”提交”><inputtype=”reset”v

alue=”重置”></form>dotest.php<?phpecho“你输入的用户名为:”.$UserId.“<br>”;echo“你输入的密码为:”.$PassWord.“<br>”;?>4.3.5外界PHP变量:

火龙果整理uml.org.cn例2:test.php<ahref=”dotest.php?UserId=Administrator&PassWord=12345”>登录</a>dotest.php<?phpecho“你输入

的用户名为:”.$UserId.“<br>”;echo“你输入的密码为:”.$PassWord.“<br>”;?>火龙果整理uml.org.cn2、HTTPCookiesPHP支持HTTPCookies。例如:例:test.php<?phpsetcookie(“MyCookie”,”我

的Cookie”,time()+3600);echo$MyCookie;?>4.4PHP的数组处理:PHP中的数组为关联数组,即由键值对构成的关联数组,其中数组的下标我们称之为键,对应下标的值称之为对应键的值。在PHP中键可以由数字,也可以由字符串构成。4

.4.1一维数组:火龙果整理uml.org.cn1、直接初始化数组来定义一个一维数组。例:<?php$a[0]="ab3c";$a[1]="def";echo'$a[0]='.$a[0];echo'<br>

$a[1]='.$a[1];$b["foo"]=13;$b["abc"]=15;echo'<br>$b["foo"]='.$b["foo"];echo'<br>$b["abc"]='.$b["abc"];echo'<br>$b[0]='.$b[0];$c["co

lor"]="red";$c["taste"]="sweet";$c["shape"]="round";$c["name"]="apple";$c[3]=4;echo'<br>$c["color"]='.$c["color"];echo'<br>$c["taste"]='.$c["taste"

];echo'<br>$c["shape"]='.$c["shape"];echo'<br>$c["name"]='.$c["name"];echo'<br>$c[3]='.$c[3];?>火龙果整理uml.org.cn2、通过array结构对

数组进行初始化,=>的使用。例:<?php$a=array(0=>"abc",1=>"def");echo'$a[0]='.$a[0];echo'<br>$a[1]='.$a[1];$b=array("foo"=>

13,"abc"=>15);echo'<br>$b["foo"]='.$b["foo"];echo'<br>$b["abc"]='.$b["abc"];$c=array("color"=>"red","taste"=>"sweet","shape"=>"round","

name"=>"apple",3=>4);echo'<br>$c["color"]='.$c["color"];火龙果整理uml.org.cn3、向数组中追加元素,追加的元素下标为最大值下标加1。例:<?php$a[0]="ab3c";$a[1]="def";echo'$a[

0]='.$a["0"];echo'<br>$a[1]='.$a[1];$a[]=”ddd”;$a[]=34;echo'<br>$a[2]='.$a[2];echo'<br>$a[3]='.$a[3];?><?php$b["foo"]=13;$b["abc"]=15;echo'<br>

$b["foo"]='.$b["foo"];echo'<br>$b["abc"]='.$b["abc"];$b["cde"]=35;echo'<br>$b["cde"]='.$b["cde"];?>火龙果整理uml.o

rg.cn多维数组就是多个一维数组的组合。1、直接初始化数组来定义一个多维数组。例:<?php$a[1][0]="ab3c";$a["foo"][1]="def";$a[2]["bar"]="ghi";$a["foo"][2]="jkl";echo'<br>$a[1][0]='.

$a[1][0];echo'<br>$a["foo"][1]='.$a["foo"][1];echo'<br>$a[2]["bar"]='.$a[2]["bar"];echo'<br>$a["foo"][2]='.$a["foo"][2];?>4.4.2多维数

组:火龙果整理uml.org.cn2、利用array结构初始化数组来定义一个多维数组。例:<?php$a=array(1=>array(0=>"3bc"),2=>array("bar"=>"3hi"),"foo"=>array(1=>"3e

f",2=>"3kl"));echo'<br>$a[1][0]='.$a[1][0];echo'<br>$a["foo"][1]='.$a["foo"][1];echo'<br>$a[2]["bar"]='.$a

[2]["bar"];echo'<br>$a["foo"][2]='.$a["foo"][2];$a["foo"][]=456;echo'<br>$a["foo"][3]='.$a["foo"][3];?>火龙果整理uml.org.cn3、多维数组元素的追加,

追加的下标为最大值下标加1。例:<?php$a=array(1=>array(0=>"3bc"),2=>array("bar"=>"3hi"),"foo"=>array(1=>"3ef",2=>"3kl"));ech

o'<br>$a[1][0]='.$a[1][0];echo'<br>$a["foo"][1]='.$a["foo"][1];echo'<br>$a[2]["bar"]='.$a[2]["bar"];echo

'<br>$a["foo"][2]='.$a["foo"][2];$a["foo"][]=456;echo'<br>$a["foo"][3]='.$a["foo"][3];?>火龙果整理uml.org.cn4.5运算符:1、+:将强制转换为数字作加法运算

例:<?php$a=33;$b=45.0;echo„$a+$b=‟.($a+$b).gettype($a+$b);?>2、-:将强制转换为数字作减法运算例:<?php$a=33;$b=45;echo„$a-$b=‟.($a-$b).gettype($a-$b);

$a=33.70;$b=45.00;echo„$a-$b=‟.($a-$b).gettype($a-$b);?>4.5.1算术运算符:火龙果整理uml.org.cn3、*:强制转换为数字作乘法运算例:<?php$a=3;$b=5;echo„

$a*$b=‟.($a*$b).gettype($a*$b);$a=3.4;$b=5;echo„$a*$b=‟.($a*$b).gettype($a*$b);?>4、/:强制转换为数字作除法运算例:<?php$a=15;$b=5;echo„$a/$b=‟.($a/$b).ge

ttype($a/$b);$a=15;$b=5.0;echo„$a/$b=‟.($a/$b).gettype($a/$b);?>火龙果整理uml.org.cn5、%:取余,返回整数例:<?php$a=17;$b=5;echo„$a%$b=‟.($a%$b).gettype

($a%$b);$a=17.2;$b=5;echo„$a%$b=‟.($a%$b).gettype($a%$b);?>火龙果整理uml.org.cn$a=3;4.5.2赋值运算符=:4.5.3位运算符:1、按位与&:两者同为1,则为1;

否则为0例:$a=5;//00000101$b=6;//00000110echo$a&$b;//00000101&00000110=000001002、按位或|:两者有一个为1,则为1;否则为0例:$a=5;//000001

01$b=6;//00000110echo$a|$b;//00000101&00000110=000001113、按位异或^:两者不相同,则为1;否则为0例:$a=5;//00000101$b=6;//00000110echo$a^$b;//00000101&00000110

=00000011火龙果整理uml.org.cn4.5.4逻辑运算符:PHP中任何一个变量(表达式)都可以看作一个逻辑表达式:变量值(表达式)与逻辑值的比较:1)、未赋值(NULL):为假2)、0:为假3)、非0值:为真4)、空字符串””:为假5)、非空字符串:为真1、逻辑与$aan

d$b:两者同为真则为真,否则为假$a=0.4;$b=3;if($aand$b){echo"为真";}else{echo"为假";}火龙果整理uml.org.cn2、逻辑或$aor$b:两者是有一个为真,则为真,否则为假$a=0.4;$b=3;if($aor$b){echo"为真";}else{

echo"为假";}3、逻辑异或$axor$b:两者不相同,为真,否则为假$a=0.4;$b=3;if($axor$b){echo"为真";}else{echo"为假";}火龙果整理uml.org.cn4、逻辑非!$a:逻辑取反

,$a为假时,为真;为真时,为假$a=0.4;$b=3;if(!$c){echo"为真";}else{echo"为假";}5、逻辑与$a&&$b(与and比较,&&有更高的优先级):两者同为真则为真,否则为假$a=0.4;$b=3;if($a&&$b){ech

o"为真";}else{echo"为假";}火龙果整理uml.org.cn6、逻辑或$a||$b(与or比较,||有更高的优先级):两者中有一个为真,则为真,否则为假$a=0.4;$b=3;if($a||$b){ech

o"为真";}else{echo"为假";}火龙果整理uml.org.cn4.5.5比较运算符:1、$a==$b(结果相等):$a=4;$b=”4”;if($a==$b){echo"结果相等";}else{echo"结果不等";}2、$a

===$b(类型相同且结果相等):$a=4;$b=”4”;if($a===$b){echo"类型相同且结果相等";}else{echo"不相同";}火龙果整理uml.org.cn3、$a!=$b(结果不相等):$a=4;$b=”34”;if($a!=$b){ech

o"结果不相等";}else{echo"结果相等";}4、$a!==$b(类型不相同或结果不相等):$a=4;$b=”34”;if($a!==$b){echo"类型不相同或结果不相等";}else{echo"相等";}火龙果整理uml.

org.cn5、$a<$b(小于结果比较):$a=4;$b=”34”;if($a<$b){echo"\$a小于\$b";}else{echo"\$a不小于\$b";}6、$a>$b(大于结果比较):$a=44;$b=”34”;if($a>$b){echo"\$a大于\$b";}else{echo"

\$a不大于\$b";}火龙果整理uml.org.cn7、$a<=$b(小于等于结果比较):$a=34;$b=”34”;if($a<=$b){echo"\$a小于等于\$b";}else{echo"\$a大于\$b";}8、$a>=$b(大于等于结果比较):$a=34

;$b=”34”;if($a>=$b){echo"\$a大于等于\$b";}else{echo"\$a小于\$b";}火龙果整理uml.org.cn9、?运算符:格式:(表达式1)?(表达式2):(表达式3)

如果表达式1的值为真,则返回表达式2的值,否则返回表达式3的值。例:$a=34;$b=”34”;$c=($a>=$b)?$a:$b;echo"\$a与\$b中最大的值是:".$c;火龙果整理uml.org.cn4.5.

6错误控制运算符@:例:<?php@$a=13/0;echo“除0错误!”;?>4.5.7自增(自减)运算符:1、自增运算符++:例1:<?php$a=12;$a++;echo$a.“<br>”;$b=12;++$b;

echo$b;?>例2:火龙果整理uml.org.cn<?php$a=12;echo$a++.“<br>”;$b=12;echo++$b;?>2、自减运算符--:例1:<?php$a=12;$a--;echo$a.“<br>”;$b=12;--$b;echo$b;?>例2

:<?php$a=12;echo$a--.“<br>”;$b=12;echo--$b;?火龙果整理uml.org.cn4.5.8字符串连接运算符.:例:<?php$str_a=”Thisboxcanhold“

.55.„items.‟;echo“$str_a<br>”;$a=”AAA”;$b=”BBB”;$c=$a.$b;echo“$c\n”;$d=”abcde”;$e=”fghijk”;echo$d.$e.“<br>”;?>4.5.9PHP中其它特殊的运算符:1、$:声明变量$a=13;2、va

r:在类定义中声明类变量(只能在类定义中使用)例:classMyClass{var$a;}火龙果整理uml.org.cn3、&:变量引用$a=13;$b=&$a;4、->:对象的方法或属性classMyClass{var$a;functionSetValue($b){$this->a=$b;

}}$v=newMyClass;$v->SetValue("34");print$v->a;5、=>:数组的元素赋值6、+=(加等):$a+=3;//等同于$a=$a+37、-=(减等):$a-=3;//等同于$

a=$a-38、*=(乘等):$a*=3;//等同于$a=$a*3火龙果整理uml.org.cn9、/=(除等):$a/=3;//等同于$a=$a/310、%=(余等):$a%=3;//等同于$a=$a%311、.=(点等

):$a.=”dd”;//等同于$a=$a.“dd”12、&=(位运算:与等):$a=2;$a&=3;//等同于$a=$a&300000010&00000011=0000001013、|=(位运算:或等):$a=2;$a|=3;//等同

于$a=$a|300000010|00000011=0000001114、^=(位运算:异或等):$a=2;$a^=3;//等同于$a=$a^3000000010^00000011=00000001火龙果整理uml.org.cn4.5.10运算符的

优先顺序:,(逗号运算符)or(逻辑或)xor(逻辑异或)and(逻辑与).=&=|=/=%=^==+=-=*=?||(逻辑或)&&(逻辑与)|^&==!=<<=>=><<>>+-.*/%!~++--@new火龙果整理uml.org.cn例1:for($a=1,$b=$a*2;$b<10;$b+

+){echo$a.$b."<br>";}火龙果整理uml.org.cn通过本章的学习要求大家掌握PHP中表达式,分支控制语句,循环控制语句,require和include语句及函数的相关知识。操作数和操作符组合在一起构成表达式。表达

式是由一个或多个操作符连接起来的操作数,用来计算一个确定的值。5.1.1简单表达式简单表达式是由一个单一的运算符或一个单一函数调用组成。例:initialize_pricing_rules()$str

_first_name=‟John‟$arr_first_names=array(„John‟,‟Marie‟)5.1.2有副作用的简单表达式例:$int_total_glasses=++$int_number_of_gl

asses;functionone(){global$str_direction_name;$str_direction_name=‟/dos_data‟;}5.1表达式火龙果整理uml.org.cn5.1.3复杂表达式例:((10+2)/cou

nt_fishes()*114);iitialize_count(20-($int_page_number-1)*2)5.2分支控制语句5.2.1if语句1、格式1:if(逻辑表达式){语句段;}例:$a=3;if($a<3){echo„$a<3‟;}if($a==3){echo„$a=3

‟;}if($a>3){echo„$a>3‟;}火龙果整理uml.org.cn2、格式2:if(逻辑表达式){语句段;}else{语句段;}例:$a=3;if($a<3){echo„$a<3‟;}else{echo„$a>

=3‟;}3、格式3:if(逻辑表达式){语句段;}elseif(逻辑表达式){语句段;}else{火龙果整理uml.org.cn例:$a=5;if($a<3){echo'$a<3';}elseif($a==3){echo'$a=3';}elseif($a>4){echo'$a>4';}

else{echo'3<$a<=4';}火龙果整理uml.org.cn5.2.5switch分支语句格式:switch(计算表达式){case值1:语句段;break;case值2:语句段;break;……case值n:语句段;break;default:语句段;}火龙果

整理uml.org.cn例1:$a=3;switch($a){case0:echo„$a=0‟;break;case1:echo„$a=1‟;break;case2:echo„$a=2‟;break;case3:echo„$a

=3‟;break;default:echo„不确定值’;}火龙果整理uml.org.cn例2:$a=0;switch($a){case0:case1:case2:echo'$a=0or$a=1or$a=2';break;case3:echo'$a=3';break;default:echo'

不确定值';}火龙果整理uml.org.cn5.3循环控制语句5.3.1while语句格式:while(逻辑表达式){循环体;}例:$i=1;while($i<=10){print$i++;}火龙果整理uml.org.cn5.3.2do…while语句格式:do{循环

体;}while(逻辑表达式);例:$i=0;do{print$i;}while($i>0);5.3.3for语句1、for语句:格式:for(表达式1;表达式2;表达式3){循环体;}火龙果整理uml.org.cn例1:for($I=1;$I<=10;$I++){print$I;}例

2:for($I=1;;$I++){if($I>10){break;}print$I;}例3:$I=1;for(;;){if($I>10){break;}print$I;$I=$I+1;}火龙果整理uml.org.cn例4:for($I=1;$I<=10;print$I,$

I++);2、foreach语句格式1:foreach(数组as$变量){循环体;}例:$a=array(1,2,3,4,5,6,7,8,9,10);foreach($aas$b){print$b;}火龙果整理uml.org.cn格式2:比较常用foreach(数

组as$键变量=>$值变量){循环体;}例:$a=array(1,2,3,4,5,6,7,8,9,10);foreach($aas$b=>$c){print'$a['.$b.']='.$c.'<br>';}

火龙果整理uml.org.cn5.3.4break语句break语句用于结束当前的for、while或switch循环或分支结构,即跳出循环,继续执行循环体下面的语句。例1:$arr=array('

one','two','three','four','stop','five');foreach($arras$val){if($val=='stop'){break;}echo"$val<br>\n";}火龙果整理uml.or

g.cn例2:$I=0;while(++$I){switch($I){case5:echo"At5<br>\n";break1;case10:echo"At10;quitting<br>\n";break2;default:break;}}火龙果整理uml.org.cn5.3.

5continue语句不执行continue语句后的所有循环体语句,回到循环判断表达式,进行判断并决定是否继续循环体。例1:$arr=array('one','two','three','four','stop','five');foreach($ar

ras$key=>$value){if(!($key%2)){continue;}echo$value."<br>";}火龙果整理uml.org.cn例2:$I=0;while($I++<5){echo“Out

er<br>\n”;while(1){echo“Middle<br>\n”;while(1){echo“Inner<br>\n”;continue3;}echo“Thisnevergetsoutput.<br>\n”;}echo“Neitherdoesthis.<b

r>\n”;}火龙果整理uml.org.cn5.4require()语句和include()语句5.4.1require语句格式:require(“文件名”)或require(“url文件名”)require语句的特点:将用指定的文件来替换req

uire语句本身。如果php.ini配置文件中allow_url_fopen选项设置为On(默认设置就为On),则require还可以包含远程服务器上php文件,并可以通过get方式传递参数过去。require语句中包含的

文件格式应该遵循HTML格式,因此PHP代码也应该使用PHP代码嵌入标记。require所包含文件语句中的变量继承require语句所在位置的变量作用域。所有在require语句的位置可以访问的变量,在require语句所包含的文件中都可以访问。如果require语句位于一

个函数的内部,那么被包含的文件内的语句都相当于在函数内部。return语句(并可返回值)在包含文件的全局范围中使用时,将导致return语句之后的所有语句不被包含。火龙果整理uml.org.cn例1:test.php:<?php$dd=require("test2.php");

//require("test2.php");echo$dd;echoMyFun();?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=g

b2312"><title>无标题文档</title></head><body></html>火龙果整理uml.org.cntest2.php:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transiti

onal//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title><

/head><body><?phpfunctionMyFun(){return"我的函数";}return33;echo"helloworld\n<BR>";#用于在当前位置输出helloworld#echo"fffff<br>";?><

?echo("这是一个PHP语言的嵌入范例\n<br>");?><?phpecho("这是第2个PHP语言的嵌入范例\n<br>");?></body></html>火龙果整理uml.org.cn例2:test.php:<?phpfunc

tionRegister($a){$v=”设计:张三”;//require("register.php?a=$a");require("http://localhost/register.php?a=$a");}Register("dddd

d");?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body></html>register.

php:<?phpecho$HTTP_GET_VARS[a];?>火龙果整理uml.org.cn例3:test.php:<?phpfunctionRegister($a){$v=”设计:张三”;require("register.php");}Regis

ter("ddddd");?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body></html>regis

ter.php:<?phpecho$v.“传入参数值:”.$a;?>火龙果整理uml.org.cn例4:test.php:<?phprequire("config.php");functionRegister($a){global$v

ersion;echo$version.$a;}Register("ddddd");?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb23

12"><title>无标题文档</title></head><body></html>config.php:<?php$version=“设计:张三版本:3.0”;?>火龙果整理uml.org.cn5.4.2include语句include的特点:PH

P在每次遇到include时都要进行重新处理,所以可以在条件分支循环等控制语句中采用include来动态包含不同的文件。其它与require相同。例1:test.php:$files=array(„first.inc‟,‟second.in

c‟,‟third.inc‟);for($I=0;$I<count($files);$I++){include($files[$I]);}例2:test.php:$retval=include(“test.inc”);echo“文件返

回值:”.$retval;test.inc:echo“在return之前<br>\n”;if(1){return27;}echo“在return之后<br>\n”;火龙果整理uml.org.cn例3:test.php:<?phpfunctionRegis

ter($a){$v=”设计:张三”;//include("register.php?a=$a");include("http://localhost/register.php?a=$a");}Reg

ister("ddddd");?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档

</title></head><body></html>register.php:<?phpecho$HTTP_GET_VARS[a];?>火龙果整理uml.org.cn5.4.3require_once()语句和include_once()语句利用require_once()或inclu

de_once()对多个文件进行包含时,可以有效地避免把同一段代码包含进去从而出现函数或变量重复定义的错误。例1:utiles.inc:functiongoodtea(){return“Oolongteatastesgoods!”;}foolib.inc:require(“utile

s.inc”);functiongoodtea($var){echo$var;}火龙果整理uml.org.cn例2:utiles.inc:functiongoodtea(){return“Oolongteatastesgoods!”;}test.php:require(“ut

iles.inc”);require(“utiles.inc”);例3:utiles.inc:functiongoodtea(){return“Oolongteatastesgoods!”;}test.php:require_once(“utiles.inc”);requi

re_once(“utiles.inc”);火龙果整理uml.org.cntest2.php:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.or

g/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></

head><body><?phpfunctionMyFun(){return"我的函数";}echo"helloworld\n<BR>";#用于在当前位置输出helloworld#echo"fffff<br>

";?><?echo("这是一个PHP语言的嵌入范例\n<br>");?><?phpreturn33;echo("这是第2个PHP语言的嵌入范例\n<br>");?></body>火龙果整理uml.org.

cn5.5函数定义函数的格式:function函数名($参数1,$参数2,…,$参数n){语句段;return$retval;}5.5.1返回值1、返回一个值函数可以通过return语句返回值(包括任何数据类型),一个函数中可以通过多个return进行值返回,当函数碰到ret

urn时将结束函数的执行。例1:functionsquare($num){return$num*$num;}echosquare(4);火龙果整理uml.org.cn例2:functionsquare($num){if($n

um<10){return$num*$num;//echo"未执行";}else{return$num*10;//echo"未执行";}}echosquare(4);echosquare(14);火龙果整理uml.org.cn2、返回一个数组例1:functionsmall_

numbers(){returnarray(0,1,2);}//list($zero,$one,$two)=small_numbers();//echo$zero.$one.$two;$arr=small_numbers();echo$arr[0].$arr

[1].$arr[2];火龙果整理uml.org.cn5.5.2参数1、传值方式传递参数默认情况下函数参数是通过传值方式传递的,在函数内部改变参数的值,在函数外部并不会体现出来。例:functionMyFun($b){$b=$b*$b;echo$b."<br>";}$a=5

;MyFun($a);echo$a;如果我们希望一个函数可以修改其参数,并在外部体现出来,就必须通过引用方式传递参数。火龙果整理uml.org.cn2、引用方式传递参数:1)、通过函数定义进行显示声明通过引用方式传递参数

例:functionadd_some_extra(&$string){$string.="andsomethingextra.";}$str="Thisisastring,";add_some_extra($str);echo$str;2)、在函数调用时通过&为参数变量说明按引

用方式传递参数例:functionfoo($bar){$bar.="andsomethingextra.";}$str="Thisisastring,";foo($str);echo$str;foo(&$str);e

cho$str;火龙果整理uml.org.cn2、默认值:函数可以按照以下方式为参数定义默认值,默认值必须为常量表达式,函数中默认参数必须位于非默认参数的右侧。例1:functionmakecoffe

e($type="cappucino"){return"Makingacupof$type.\n";}echomakecoffee();echomakecoffee("espresso");例2:functionmakeco

ffee($type="acidophilus",$flavour){return"Makingacupof$type$flavour.\n";}echomakecoffee("raspberry");例3:functionmakecoffee($flavour,$type="acidoph

ilus"){return"Makingacupof$type$flavour.\n";}echomakecoffee("raspberry");火龙果整理uml.org.cn5.5.3变量函数PHP中支持变量函数概念:即用户可以将一个函数名赋值给一个变量,并通过在该变量后

加()及参数来调用对应的函数。例:functionfoo(){echo"在foo函数内部<br>\n";}functionbar($arg=''){echo"在bar函数内部;参数是'$arg'.<b

r>\n";}$func="foo";$func();$func="bar";$func("test");火龙果整理uml.org.cn5.5.4PHP数学函数1、abs---取绝对值格式:intabs(intn)2、round---四

舍五入函数格式:floatround(floatn[,intd])功能:对浮点数n进行四舍五入到d所指定的位。如果d=0,则取整;d<0,则精确到小数点数前多少位;d>0,则精确到小数点后多少位。3、ceil---返回

大于等于数字的最小整数格式:intceil(floatn)4、floor---返回小于等于数字的最大整数格式:intfloor(floatn)5、强制转换---截取整数部分:格式:$变量=(int)数字;火龙果整理uml.or

g.cn6、srand---设置随机种子数格式:srand([intn])功能:设置整数n为随机种子数7、rand---返回随机整数格式:intrand(intmin,intmax)功能:返回>=min且<max的随机整数。火龙果整理uml.org.cn5.5.5PHP字

符串函数1、md5-按md5方式进行字符编码—加密函数格式:stringmd5(stringstr)2、strlen-获取字符串长度,一个中文作为两个字符计算格式:intstrlen(stringstr)3、strtolower-转换为小写格式:stringstrto

lower(stringstr)4、strtoupper-转换为大写格式:stringstrtoupper(stringstr)5、strchr-获取某字符串第一次出现起的字符串(要包括)格式:stringstrchr

(stringhaystack,stringneedle)获取在haystack字符串中第一次出现needle字符串起的字符串,没有找到返回false。例:<?php$username="useri123d";echostrchr($username,"er");echostrchr($u

sername,"123");?>火龙果整理uml.org.cn6、strstr-获取字符串开始到结束的字符串格式:stringstrstr(stringhaystack,stringneedle)获取在haystack字符串首次

出现needle字符串开始起到其结束的字符串。没有找到返回false。例:<?php$username="uer1234seri123d";echostrstr($username,"er");ech

ostrstr($username,"123");?>7、strrchr-获取某字符串最后出现起的字符串(要包括)格式:stringstrrchr(stringhaystack,stringneedle)获取在haystack字符串中最后出现needle字符串起的字符串,没有找到返回fa

lse。例:<?php$username="useri123d";echostrrchr($username,"er");echostrrchr($username,"123");?>火龙果整理uml.org.cn8、spl

it-对字符串进行分割,并返回数组格式:arraysplit(stringhaystack,stringneedle)对needle字符串用haystack字符串进行分割,并返回分割后得到的数组。例:<?

php$arr=split(",","1,2,3,4");foreach($arras$key=>$val){echo$val;}?>9、join-连接数组中元素值成字符串格式:stringjoin(stringglue,arraypieces)将数组pieces中所有元素值用gl

ue字符串间隔,形成新字符串。例:<?php$arr=array("1","2","3");echojoin("",$arr);?>火龙果整理uml.org.cn10、htmlentities-将所有字符转换为html字符格式:stringh

tmlentities(stringstring)例:<?php$str="<br>";echohtmlentities($str);?>11、str_replace-字符串替换格式:stringstr_replace(strin

gneedle,stringstr,stringhaystack)在haystack字符串寻找needle字符串,并将其替换为str字符串.例<?php$str="abcdabcddd";echostr_replace("abc","123",$str);?

>火龙果整理uml.org.cn12、substr-取子串函数格式:stringsubstr(stringstring,intstart,int[length])从字符串string的开始位置start取子串,如

果加上length表示取这么多个字符,否则将取到字符尾,字符串的起始位置为0。例:<?php$str="abcdabcddd";$str1=substr($str,0);echo$str1;$str1=substr($str,1,3);echo$str1;?>13、strpos-寻找某字符

串的开始位置格式:intstrpos(stringhaystack,stringneedle,int[offset])寻找needle字符(只能为一个字符,不适合中文)在haystack字符串中的第一次出现的位置,并返回,没有找到返回false,如果指定

offset表示从该位置开始寻找。例:<?php$str="abcdabcddd";$str1=strpos($str,"c");echo$str1;$str1=strpos($str,"c",3);echo

$str1;火龙果整理uml.org.cn14、strrpos-寻找某字符串的结束位置格式:intstrrpos(stringhaystack,stringneedle)寻找needle字符(只能为一个字符,不适合中文)在haystack字符串中的最后一次出现的位置,并返回,没有找到

返回false。例:<?php$str="abcdabcddd";$str1=strrpos($str,"c");echo$str1;$str1=strrpos($str,"c",3);echo$str1;?>15、ltrim-删除字符串左边的空格格式:stringltrim(strin

gstr)16、trim-删除字符串首尾的空格格式:stringtrim(stringstr)17、chr-根据ASCII码返回相应的字符格式:stringchr(intascii)火龙果整理uml.org.cn18、urlencode-将字符串

以URL方式进行编码格式:stringurlencode(stringstr)本函数将对中文及特殊字符进行编码。例:<?php$ChineseName="通过GET方式传递的中文值";$EncodeStr=url

encode($ChineseName);echo"<ahref=test.php?n=$EncodeStr>个人资讯</a>";?>19、urldecode-还原URL编码字符串格式:stringurldecode(stringstr)

例:<?php$ChineseName="通过GET方式传递的中文值";$EncodeStr=urlencode($ChineseName);echo"<ahref=test.php?n=$EncodeStr>个人资讯</a>";ec

hourldecode($EncodeStr);?>火龙果整理uml.org.cn20、stripslashes-去掉字符串中的反斜线格式:stringstripslashes(stringstr)例:<?php$str="c:\\123\\122";echostr

ipslashes($str);?>21、escapeshellcmd-除去字符串中的特殊字符格式:stringescapeshellcmd(stringcommand)主要用于对要传递给操作系统的命令进行该操作,以使

对操作系统的破坏降低。火龙果整理uml.org.cn5.5.6PHP日期时间函数php.ini配置文件中时区设置,date.timezone=PRC,表示设置为中国时区1、time()-获取当前unix格式时间,单位秒格式:inttime()2、date-服务器时间格式化函数

格式:stringdate(stringformat,int[timestamp])若有timestamp则对该timestamp进行格式化,否则对当前服务器时间进行格式化format选项:a-"am"或是"pm"A-"AM"或是"PM"d-几日,二位数字,若不足二位则前面

补零;如:"01"至"31"D-星期几,三个英文字母;如:"Fri"F-月份,英文全名;如:"January"h-12小时制的小时;如:"01"至"12"H-24小时制的小时;如:"00"至"23"g-12小时制的小时,不足二位不补零;如:"1"至12"G-24小时制的小时,不足二位不补零;如:

"0"至"23"i-分钟;如:"00"至"59"j-几日,若不足二位不补零;如:"1"至"31"l-星期几,英文全名;如:"Friday"火龙果整理uml.org.cnm-月份,二位数字,若不足二位则在前面补零;如:"01"至"12"n-月份,二位数字,若不足二位则不补零;如:"1"至"

12"M-月份,三个英文字母;如:"Jan"s-秒;如:"00"至"59"S-字尾加英文序数,二个英文字母;如:"th","nd"t-指定月份的天数;如:"28"至"31"U-总秒数w-数字型的星期几,如:

"0"(星期日)至"6"(星期六)Y-年,四位数字;如:"1999"y-年,二位数字;如:"99"z-一年中的第几天;如:"0"至"365"例1:<?echodate("ldSofFYh:i:sA");echodate("Y年m月d日H:i:s");?>3、mktime-返回int时间的

函数intmktime(inthour,intminute,intsecond,intmonth,intday,intyear)例:$day=mktime(0,0,0,7,1,1997);火龙果整理uml.org.cn4、m

icrotime-获取当前时间的百万分之一秒为单位的时间格式:stringmicrotime()例:<?phpechomicrotime();?>5、filemtime-获取文件的最后修改时间格式:intfilemtime(stringfilename)例:<?phpechofilemtim

e("c:/test.txt");?>6、fileatime-获取文件的内容最后修改时间格式:intfileatime(stringfilename)例:<?phpechofileatime("c:/test.txt");?>火龙果

整理uml.org.cn5.5.7PHP其它函数1、getimagesize-取得图片的长宽格式:arraygetimagesize(stringfilename)用于获取GIF、JPEG及PNG三种图片文件的高与宽,第二个参数一

般没用。返回数组有四个元素:第一个元素(索引值0)是图片的高度,第二个元素(索引值1)是图片的宽度,第三个元素(索引值2)是图片的格式,其值1为GIF格式、2为JPEG/JPG格式、3为PNG格式。第四个元素(索引值3)为图片的高与宽字串,heig

ht=xxxwidth=yyy。例:<?php$arr=getimagesize("c:/test.jpg");foreach($arras$key=>$val){echo$key."=>".$val."<br>";}?>2、sizeof-等同于co

unt用于获取数组的元素个数格式:intsizeof(arrayarray)===intcount(arrayarray)例:<?php$str="abcdabcddd";$arr=split("",$str);echosizeof($arr);

?>火龙果整理uml.org.cn3、header-将相应的HTTP头部信息发送到浏览器格式:intheader(stringstring)例:<?phpheader("Location:http://www.php.net");//转向header("Expires:Mon,26

Jul199705:00:00GMT");//指定页面过期时间header("Last-Modified:".date("D,dMYH:i:s")."GMT");//指定页面的上次修改时间header("Ca

che-Control:no-cache,must-revalidate");//指定该页面不缓存header("Pragma:no-cache");//指定程序不缓存header("HTTP/1.0404NotFound");//发

送文件找不到的头不信息//以下三行为发送应用程序下载文档头类型的实例header("Content-type:application/x-gzip");//指定下载文档类型header("Content-Dispositi

on:attachment;filename=some-file.tar.gz");//指定附加下载文件exit();?>火龙果整理uml.org.cn通过本章学习要求大家掌握面向对象程序设计方法,掌握PHP中类的定义,类的实例化(即对象),PHP的类和对象函数。PHP从

Java语言中引进了面向对象的技术。它的面向对象特征允许开发者编写具有特定功能的类,以便于以后的使用。6.1.1面向对象技术简介1、传统的“面向过程的程序设计”方法:在这种“面向过程的程序设计”语言中,将程序抽象为3种基本程序结构:顺序、选择和循环结构,并将程序按功

能模块化形成一个一个的过程,最终将所有模块通过主程序的调用连接在一起构成整个程序。不同应用程序之间在代码重用性方面表现极差,也不利于代码的管理。例如:对于汽车,按传统的“面向过程的程序设计”方法设计的话,需要我们从每个零件开始进行设计构成相应的模块,然后通过主程序将每个零件模块组

装起来形成汽车。2、面向对象技术设计方法:面向对象技术设计方法中最基本的概念是对象,对象是一个类的实例,对象有具体的特征(属性),有相应的行为(方法),对象一旦构建就有一个唯一标识,对象还可以有事件(如鼠标触发,键盘触发等事件)。对象基于类来创建,类具有“封装

性”,“继承性”,“多态性”。例如:同样对于汽车,按面向对象技术方法设计的话,我们把每个零件作为一个对象来对待,最后我们只需将一个一个的对象组装起来就形成了汽车。6.1面向对象程序设计火龙果整理uml.org.cn6.2面向对象程序设计方法的基础在PHP中我们可以方便的定义各种功能

的类,并对类进行实例化来形成对象。类只有经过实例化才能使用。6.2.1PHP中类的定义方法格式:class类名{//类定义内部var$属性1;var$属性2;…var$属性n;function函数1(){}function函数2(){}…function函数n(){}}火龙果整理

uml.org.cn1、类定义内部$this的含义:指向类本身2、类定义内部属性的访问方法:$this->属性外部:$对象名->属性3、类定义内部函数的访问方法:$this->函数()外部:$对象名->函数()4、类的构造函数:与类名相同的函数,在类被实例化时自动

执行。5、类的继承,将继承基类的所有属性和函数:class新类名extends基类{…}6、类的定义一般放在一个单独的文件中,在需要该类时包含进来即可。7、类的实例化方法:$变量=new类名();$变量=new类名(参数1,参数2,.

.,参数n);8、类中成员(属性及函数)的修饰符:1)private------------私有的,只能在内部被访问,会被继承,并且继承之后会变成公共的2)public------------公共的,可以在内部及外部

访问,会被继承还是公共的3)protected--------受保护的,不能在外部被访问,可以被继承,并且继承之后仍然是受保护的在PHP中,类属性及方法默认都是public。火龙果整理uml.org.cn例1:classCart{var$items;//数组,卡车

中货物名称做数组下标,值为货物数量functionadd_item($artnr,$num)//向卡车中对应货物$artnr增加$num数量{$this->items[$artnr]+=$num;}functionremove_it

em($artnr,$num)//从卡车中对应货物$artnr减小$num数量{if($this->items[$artnr]>=$num){$this->items[$artnr]-=$num;returntrue;}else{returnfa

lse;}}}$cart=newCart;//由类创建一个对象$cart,我们通常也称之为类的实例化$cart->add_item("电脑",10);echo$cart->items["电脑"];火龙果整理uml.org.cn例2:由Cart基类派生了一个Named_Cart

类,Named_Cart可以看做是Cart更具体的类,它不仅拥有Cart基类所有属性和方法(函数),也拥有自己的属性owner和方法(函数)set_owner。classNamed_CartextendsCart{var$owner;//卡车的拥有者functionset_owner($nam

e){$this->owner=$name;}}$ncart=newNamed_Cart;//类的实例化$ncart->set_owner("张三");print$ncart->owner."<br>";$ncart->add_item("电脑",10);print$ncart->item

s["电脑"];火龙果整理uml.org.cn例3:类中构造函数的使用classAuto_CartextendsNamed_Cart{functionAuto_Cart(){$this->add_item("电脑",10);}}$ncart=newAuto_Cart;//类的

实例化$ncart->set_owner("李四");print$ncart->owner."<br>";print$ncart->items["电脑"];火龙果整理uml.org.cn例4:带参数构造函数:classConstru

ctor_CartextendsCart{functionConstructor_Cart($item=”电脑”,$num=10){$this->add_item($item,$num);}}$default_cart=newConst

ructor_Cart;//实例化生成一个对象echo$default_cart->items[“电脑”]."<br>";$different_cart=newConstructor_Cart(“计算机”,17);//实例化生成另一个对象echo$dif

ferent_cart->items[“计算机”];火龙果整理uml.org.cn例4:带参数构造函数:classConstructor_CartextendsCart{functionConstructor_Cart($item=”电脑”,$nu

m=10){$this->add_item($item,$num);}}$default_cart=newConstructor_Cart;//实例化生成一个对象echo$default_cart->items[“电脑”]."<br>";$d

ifferent_cart=newConstructor_Cart(“计算机”,17);//实例化生成另一个对象echo$different_cart->items[“计算机”];火龙果整理uml.org.cn6.3PHP的类和对象函数:1、class_exists:检索类是否存在格式:cl

ass_exists(“类名”)例://classMyClass{}if(class_exists("MyClass")){echo"MyClass类存在!";}else{echo"MyClass类不存在!";}2、get_class:返回一个对象所属

类的名字格式:get_class(对象)例:classMyClass{}$cmyclass=newMyClass;echoget_class($cmyclass);火龙果整理uml.org.cn3、get_class_methods:返回包含类的所有方法的数组格式:get_class_meth

ods(“类名”)例:classCart{var$items;//数组,卡车中货物名称做数组下标,值为货物数量functionadd_item($artnr,$num)//向卡车中对应货物$artnr增加$num数量{$this->it

ems[$artnr]+=$num;}functionremove_item($artnr,$num)//从卡车中对应货物$artnr减小$num数量{if($this->items[$artnr]>$num)

{$this->items[$artnr]-=$num;returntrue;}else{returnfalse;}}}$arr=get_class_methods("Cart");foreach($a

rras$method){火龙果整理uml.org.cn4、get_class_vars:返回包含类的所有属性的数组格式:get_class_vars(“类名”)例:classMyClass{var$a;var$b;var$c;}$arr=get_class_vars("MyC

lass");foreach($arras$key=>$prop){echo$key."=".$prop."<br>";}火龙果整理uml.org.cn5、get_object_vars:返回一个包含对象所有属性的关联数组格式:get_object_va

rs(对象)例:classMyClass{var$a;var$b;var$c;}$obj=newMyClass;$obj->a=1;$obj->b=2;$obj->c=3;$arr=get_object_vars($ob

j);foreach($arras$key=>$prop){echo$key."=".$prop."<br>";}火龙果整理uml.org.cn6、method_exists:检查对象的方法是否存在格式:method_exists(对象,”方法名”

)例:classMyClass{var$a;var$b;var$c;functionsetA($a){$this->a=$a;}}$obj=newMyClass;if(method_exists($obj,"setA")==true){echo"方法存在";}else{ec

ho"方法不存在";}火龙果整理uml.org.cn7、对象之间的比较:1)、==:如果两个对象属于同一个类,且两个对象对应的属性值相同。则相等,否则不相等。classMyClass{var$a;var$b;var$c;functionsetA($a){$this->a=

$a;}}$obj=newMyClass;$obj->a=1;$obj->b=2;$obj->c=3;$obj1=newMyClass;$obj1->a=1;$obj1->b=2;$obj1->c=3;if($obj==$obj1)火龙果整理uml.org.cn2)、===

:如果两个对象之间是引用关系,则两个对象相等,否则不相等。classMyClass{var$a;var$b;var$c;functionsetA($a){$this->a=$a;}}$obj=newMyClass;$obj->a=1;$obj->b=2

;$obj->c=3;$obj1=&$obj;if($obj===$obj1){echo“相等";}else{echo“不相等";}火龙果整理uml.org.cn通过本章学习要求掌握MySql数据库的一些基本知识,掌握PHP中对MySql数据库的各

种操作函数,能够用MySql数据库作为网站的后台数据库,并能够通过phpMyAdmin对MySql数据库进行操作。PHP中如果需要用到某数据库系统必须在php.ini文件中加载相应数据库系统的扩展模块。MySql数据库中的扩展模块为mysql.dll,对于php5,该

文件应该位于x:\php5\ext文件夹中。一、MySql(mysql-5.0.23-win32)的安装:从网上下载mysql-5.0.23-win32.zip压缩包,解压之后得到一setup.exe文件,双击进行安装。二、MySql数据库服务器

的配置:安装时在MySqlServerInstanceConfigurationWizard对话框中可对MySql进行配置。安装完成之后,可通过“开始-程序-MySql-MySqlServer5.0-MySqlServerInstanceConfiguration”程序项进行配置。1、配

置方案选择:详细配置、标准配置。2、服务器配置类型:1)DeveloperMachine(开发人员机器):在该机器上会有多个应用程序运行,MySql仅使用最小配额的内存空间。火龙果整理uml.org.cn2)ServerMachine(服务器):几个服务器应用程序会运行在上边,对于Web服

务器应用程序应该选择该选项,MySql将使用中等内存配额。3)DedicatedMySqlServerMachine(专用MySql服务器):这台服务器的作用将专门用作MySql数据库服务器,在该服务器上不提供其它的服务,仅提供MySql数据库服务,没有象Web服务或Mail服务的其它服务在

上面运行,MySql将使用服务器所有可供使用的内存空间。3、数据库类型:1)MultifunctionalDatabase(多功能数据库):2)TransationalDatabaseOnly(仅事务数据库)

:3)Non-TransactionalDataBaseOnly(仅非事务数据库):4、InnoDB表空间设置:在MySql数据库,每个数据表都对应一个文件。5、同时连接数设置:1)DecisionSupport(DSS)/OLAP:不超过20个连接数。2)OnlineTransaction

Processing(OLTP):可以同时允许最多500个活动连接,适应负荷很重的Web服务器。3)ManualSetting:手工设置。火龙果整理uml.org.cn6、设置网络参数:EnableTCP/IPNetworking:是否允许TCP/IP协议,如果不允许则仅允许通过命名管道进行本

地连接。设置Tcp/ip端口号:33067、选择MySql缺省字符集:1)StandardCharacterSet(标准字符集设置,使Latin1为缺省字符集):2)BestSupportForMultilingualism(对于多国语言字符集最好支持设置,使utf8成为缺省字符集):3)M

anualSelectedDefaultCharacterSet/Collation(用户自定义):在此请选择gbk简体中文字符集。8、设置Windows安装参数:1)安装为Windows服务:指定服务名,是否需要在操作系统启动时自动

运行服务。2)是否将MySql数据库的bin文件夹包含在Windows的环境变量Path中。火龙果整理uml.org.cn9、设置安全参数:系统管理员帐号root的相关设置1)ModifySecuritySett

ings(是否需要修改系统管理员安全帐号root的密码):是否允许root帐号从远程计算机登录。2)CreateAnAnoneymousAccount(创建一个匿名帐号):可能会导致一个不安全的系统。10、执行配置计

划:1)prepareconfiguration(准备配置)2)Writeconfiguration(写配置文件my.ini)3)Startservice(开始服务)4)Applysecuritysettings(应用安全设置)11、完成配置。火龙

果整理uml.org.cn三、PHP5.0中对MySql的支持,扩展模块的加载:在php5.0的安装文件夹X:\php5\ext下找到php_mysql.dll文件在php5.0的配置文件中找到;extension=

php_mysql.dll,将前面的分号去掉,并重启Apache服务器。Php5.0扩展模块的相关配置参数:extension_dir="c:\php5\ext\";该行用于指明php5扩展模块所在的硬盘物理位置。火龙果整理uml.org.cn五、phpMyadmin2.8.2.4的安装从

网上下载phpMyadmin2.8.2.4-win压缩包解开后将其复制到网站根目录更名为phpMyAdmin1、通过http://localhost/phpmyadmin访问phpmyadmin2、如果phpmyadmin没有进行配置

,请单击页面中的setupscript超级链接进入配置页面。3、在配置页面中servers后找到Add按钮,增加一台mysql服务器。服务器参数设置:只针对Authenticationtype设置为cookie,表示每次登录phpmyadmin时均需要提供mysq

l的登录用户名及密码。其它参数保持默认值。最后单击add按钮增加。4、在配置页面中找到Charsets按钮,设置字符集。字符集参数设置:只针对Defaultcharset设置为gb2312其它参数保持默认值。最后单击Update按钮,更新设置。火龙果整理uml.org.

cn5、在配置页面中,找到DownLoad按钮,单击,通过文件下载的方式将这里生成的配置文件config[1].inc.php文件保存到phpmyadmin所对应的文件夹下,并改名为config.inc.php6、完成配置,通过http://localhost/php

myadmin进入phpmyadmin登录页面,选择中文语言,输入用户名root及密码进行登录。7、在phpmyadmin中就可以创建数据库,在数据库中创建数据表,添加删除记录了。火龙果整理uml.org.cn7.2MySql数据库的基本操作一、字段数据类型:1、布尔型B

OOL1字节0---false非0---true2、微整型tinyint1字节unsigned(无符号数)范围0到255有符号数范围为-128到1273、小整型smallint2字节unsigned(无符号数)范围0到65535有

符号数范围为-32768到327674、中整型mediumint3字节unsigned(无符号数)范围0到16777215有符号数范围为-8388608到83886075、整型int4字节unsigned(无符号数)范围0到4294967295有符号数范围为-2147483648到214

7483647火龙果整理uml.org.cn6、大整型bigint8字节unsigned(无符号数)范围0到18446744073709551615有符号数范围为-9223372036854775808到

92233720368547758077、单精度类型float4字节最多10位有效数字允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+388、双精度类型doub

le8字节最多17位有效数字允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+30810

、精确小数型decimal(M,D)M<=30M是精度的总数,D是小数点后面的位数。11、日期型date3日期。支持的范围为‘1000-01-01‟到‘9999-12-31‟。火龙果整理uml.org.cn12、日期时间型datetime8字节

日期和时间的组合。支持的范围是'1000-01-0100:00:00'到'9999-12-3123:59:59'。13、时间戳型timestamp4字节时间戳。范围是'1970-01-0100:00:00'到2037年。TIMESTAMP列用于INSERT或UPDATE操作时记录日期和

时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。14、时间型time3字节时间。范围是'-838:59:59'到'838:59:

59'。15、年期型year1两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155和0000。在两位格式中,允许的值是70到69,表示从1970年到2069年。MySQL以YYYY格式显示YE

AR值,但允许使用字符串或数字为YEAR列分配值。火龙果整理uml.org.cn16、字符类型char(M)M<=255汉字与英文字符计算方法相同固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围

是0到255个字符。注:当检索CHAR值时尾部空格被删除。17、变长字符类型varchar(M)M<=255汉字与英文字符计算方法相同变长字符串。M表示最大列长度。注:当检索时不删除VARCHAR值的尾部空格。18、二进制类型BINARY(M)M<

=255固定长度二进制数,不足添0。注:当检索BINARY值时尾部0被删除。19、二进制类型VARBINARY(M)M<=255变长二进制数。注:当检索时不删除尾部0。20、微对象类型TINYBLOB最大长度为255的二进制数。火龙果整理uml.org.cn21、微文

本类型TINYTEXT最大长度为255的字符串。22、对象类型BLOB最大长度为65,535的二进制数。23、文本类型TEXT最大长度为65,535的字符串。24、中对象类型MEDIUMBLOB最大长

度为16,777,215的二进制数。25、中文本类型MEDIUMTEXT最大长度为16,777,215的字符串。26、长对象类型LONGBLOB最大长度为4,294,967,295的二进制数。27、长文本类型LONGTEXT最大长度为4,294,

967,295的字符串。火龙果整理uml.org.cn28、枚举类型ENUM格式:ENUM('value1','value2',...)只能有一个值的字符串,从值列‘value1‟,‘value2‟,...

,NULL中或特殊‘’错误值中选出。ENUM列最多可以有65,535个截然不同的值。29、集合类型SET格式:SET('value1','value2',...)字符串对象可以有零个或多个值,每个值必须来自列值‘value1‟,‘value2‟,...SET列最多可以有64

个成员。二、字段相关关键词:1、primarykey主键字段2、auto_increment自动增加字段3、null及notnull允许为空或不允许为空字段4、unsigned无符号数unsignedzerofill无符号零填充数onupdat

ecurrent_timestamp用当前时间戳做为字段的默认值火龙果整理uml.org.cn5、default„值’指定默认值6、check(约束表达式)为字段设置约束7、FOREIGNKEY(外

键表字段)REFERENCES主键表(主键字段)设置主外键关系。三、mysql查询语句:1、CreateTable语句:格式:CreateTable表名(字段名数据类型[auto_increment][primarykey

][null|notnull][default„默认值’][check(约束表达式)],…[,foreignkey(字段)references主键表(主键字段)])火龙果整理uml.org.cn2、AlterTable语句:格式1:AlterTable表名ADD字

段名数据类型格式2:AlterTable表名Dropcolumn字段名3、dropTable语句:格式:dropTable表名火龙果整理uml.org.cn4、insertinto语句:格式:insertinto表名[(字段列表)]

values(值列表)[,(值列表)]5、update语句:格式:update表名set字段1=值1[,字段2=值2][where条件]6、delete语句格式:deletefrom表名[where条件]

7、truncate语句格式:truncate表名火龙果整理uml.org.cn7、select语句及子查询格式:select*|字段列表from表列表[where条件][groupby字段[asc|desc]][having条件][orderby字段[asc|desc]][limit[开始

记录序号,]操作记录数]1、字段别名:字段名as别名2、计算字段:3、表列表:1)、内联:innerjoin2)、左外联:left[outer]join3)、右外联:right[outer]join4)、交叉连联接:crossjoin火龙果整理uml.org.

cn3、limit[开始记录序号,]操作记录数:limit子句的格式:只能放在select语句结束格式1:limit数字从第一条记录(索引号为0)开始并包括第一条记录,选取数字指定的那么多条记录格式2:lim

it数字1,数字2从数字1(索引号)对应的记录开始,选取数字2指定的那么多条记录如果数字1为0,则limit0,数字2等同于limit数字2如何实现分页?select语句limit(PageNo-1)*PageSize,PageSize火龙果整理uml.org.cn4、统计函

数:1)、count(*|字段名)统计记录总数2)、sum(字段名表达式)求和3)、avg(字段名表达式)求平均值4)、max(字段名表达式)求最大值5)、min(字段名表达式)求最小值火龙果整理uml.o

rg.cn5、视图管理:1)、创建视图格式:createview视图名asselect语句2)、修改视图格式:alterview视图名asselect语句3)、删除视图格式:dropview视图名6、索引管理:1)、创建索引格

式:createindex索引名on索引表(字段1[asc|desc],…,字段n[asc|desc])2)、删除索引格式:dropindex索引名on索引表火龙果整理uml.org.cn7、mysql中设定存取权限的SQL语句:格式:GRANTALL|{SELECT,INSERT

,UPDATE,DELETE}ON数据库.表TO用户名@"主机名"IDENTIFIEDBY"密码"其中数据库或表名中可以使用*表示不限制数据库或表,主机名中可以使用%表示任意多个字符。表示对新增用户授权可以操作哪些数据库和表,用户可以从哪些主机上连

接数据库,并指定密码。例:增加一个用户testuser授权其能够对testdata进行所有操作,并可以从任何主机连接数据库。GRANTALLONtestdata.*TOtestuser@"%"IDENTIFIEDBY"12345678“例:增加一个用户testuser授权

其能够对testdata进行查询操作,并可以从任何主机连接数据库。GRANTSELECTONtestdata.*TOtestuser@"%"IDENTIFIEDBY"12345678"flushprivil

eges;//刷新MySql中的权限表火龙果整理uml.org.cn9、MySql中删除用户的SQL语句:格式:DELETEFROMmysql.userWHEREuser='用户名';例:DELETEFROMmysql.userWHEREUs

er='testuser';flushprivileges;//刷新MySql中的权限表10、修改用户密码的SQL语句:格式:SETPASSWORDFOR用户名=PASSWORD("新密码")例:SETPASSWORDFORtestu

ser=PASSWORD("123");火龙果整理uml.org.cn11、数据库的备份与恢复语句:1)、数据库的备份:格式:mysqldump--user=用户名--password=密码数据库>文件名.sql例1:手工备份例2:创建备份计划任务D:\\WINNT\\system

32\\CMD.EXE/c"mysqldump--user=root--password=123456testdata>c:\test.sql"或下面这种备份可能存在执行权限不够的问题:echo`D:\\WINNT\\system32\\CMD.EXE/c"mysqldump--user=root

--password=123456testdata>c:\\test.sql"`;2)、数据库的恢复:格式:mysql--user=用户名--password=密码数据库<文件名.sqlD:\\WINNT\\

system32\\CMD.EXE/c"mysql--user=root--password=123456testdata<c:\\test.sql“下面这种恢复可能存在执行权限不够的问题:echo`D:\\WINNT\\system32\\CMD.EXE/c"mysql--user=root-

-password=123456testdata<c:\\test.sql"`;火龙果整理uml.org.cn7.1PHP操作MySql数据库的函数7.1.1数据库连接函数1、mysql_connect-

建立与MySql服务器的连接格式:intmysql_connect([stringhostname[:port][,stringusername[,stringpassword]]])建立一个与MySql服务器的连接,

该函数的所有参数均可以省去,它们的缺省值分别为主名=localhost端口号:3306用户名为拥有服务器进程的当前用户名,密码为空。如果与MySql服务器连接建立成功,将返回一个integer(整型)的连接描述符,后续操作均要用到该连接描述符,如果失

败则返回false。在连接中我们可以用@来屏蔽系统的错误处理。如果以相同的参数用本函数再次与MySql服务器建立连接,则php将直接返回上次的连接描述符,除非上次连接已经被mysql_close关闭。例1:$db=mysql_connect("localhost

","root","123456")ordie("对不起,连接MySql服务器出错!");echo$db;例2:$db=@mysql_connect("localhost","root","1234516");if($db==false){echo"连接mysql服务器失败!";}火龙果整理um

l.org.cn2、mysql_close-关闭mysql连接格式:intmysql_close([intlink_identifier]);该函数关闭由link_identifier连接描述符所指定的mysql连接。如果缺省link_i

dentifier参数,则将关闭最新建立的mysql连接,执行成功返回true,否则返回false。例1:$db=mysql_connect("localhost","root","123456")ordie("对不起,连接MySql服务器出

错!");echo$db;if(mysql_close($db)){echo"已经成功关闭mysql连接";}else{echo"关闭mysql连接失败";}实际上,对于一个php脚本文件,当所有脚本执行结束后,

都会自动关闭与mysql数据库建立的连接(除开永久性连接),所以在php脚本中没有必要使用mysql_close函数。火龙果整理uml.org.cn3、mysql_pconnect-与Mysql服务器建立一个永久连接格式:intmysql_pconnect([strin

ghostname[:port][,stringusername[,stringpassword]]])该函数与mysql_connect相似,也是创建一个与mysql服务器的连接,参数说明与mysql_connect一样。如果连接成功,该函数返回一个正的MySql永久连接标

志符,如果出错返回false。mysql_pconnect的特征:1)、当使用mysql_pconnect函数时,系统将先尝试寻找一个已经打开的永久连接,它们具有相同的主机、用户名和密码。如果找到一个这样的连接,就返回连接标记符,而不是打开一个

新连接。2)、当脚本执行结束时,与MySQL服务器的连接不会关闭,而是继续保持打开状态供以后继续使用。mysql_close不能关闭由mysql_pconnect函数创建的永久性连接。例:$link=@mysql_connect("localhost","root","123456")ordie

("对不起,连接MySql服务器出错!");echo$link."<br>";$close=@mysql_pconnect("localhost","root","123456")ordie("对不起,连接My

Sql服务器出错!");echo$close."<br>";火龙果整理uml.org.cn7.1.2数据库操作函数:在php中连接数据库服务器是没有带数据库参数的,所以对于数据库操作应该首先选择数据,然后再对

数据库进行查询、插入、修改、删除等操作。1、mysql_select_db-选择一个mysql数据库格式:intmysql_select_db(stringdatabase_name[,intlink

_identifier])该函数在数据库连接link_identifier参数指定的连接上建立与数据库database_name的连接,或者在连接link_identifier上选择database_name为当前数

据库。其中link_identifier如果省去,表示将使用最新建立的连接。函数执行成功返回true,否则返回false。例:$db=@mysql_connect("localhost","root","123456

")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据库出错!");火龙果整理uml.org.cn2、mysql_query-向选定的数据库送出一个查询字符

串格式:intmysql_query(stringquery[,intlink_identifier])该函数将参数query字符串提供给MySql数据库,用来进行相关的数据处理或执行。如果没有指定link_identif

ier参数,则程序会自动寻找最近的数据库连接。query查询字符串如果是select语句,则该函数将返回结果集的资源描述符,查询失败返回false;如果query查询字符串是update、insert、delete语句,执行成功则返回true,否则返回false

。强调:mysql_query("setnames„gbk‟");//语句非常重要,使得mysql在处理或返回字符串时,都将采用gbk中文字符集进行处理或返回。例:$db=@mysql_connect("localhost","root","123456")ordie("对不起,连接MySq

l服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据库出错!");mysql_query("setnames„gbk‟");$sql="insertintouseri

nfovalues(0,‟".$HTTP_POST_VARS[„name‟]."‟)"$result=mysql_query($sql,$db);$rs=mysql_query("select*fromtable1",$db);火龙果整理uml.org.cn7.1.3结果处理函

数:1、mysql_fetch_array-把查询结果集中的一行信息返回到一个数组中格式:arraymysql_fetch_array(intresult[,intresult_type])该函数把查询得到的结果集中的一行内容返回到数组中,对于该数组可以

使用数组下标(0,1,…,n),也可以使用关键字(字段名1,字段名2,…,字段名n)来访问数组中每个字段的信息,该函数每执行一次,将使结果集中的行记录指针下移。result_type为可选项,它是一个常量,可以取下面的

值:MYSQL_ASSOC(关联数组)、MYSQL_NUM(数字下标数组)和MYSQL_BOTH(既有关联数组又有数字下标,默认值)。对返回数组操作时尽可能使用数字下标以提高处理效率。例:$db=@mysql_connect("localhost",

"root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据库出错!");mysql_query("setcharacterset

gb2312");$rs=mysql_query("select*fromtable1",$db);while($row=mysql_fetch_array($rs)){echo$row[id].$row[name].$row[sex]

.$row[年龄]."<br>";}火龙果整理uml.org.cn2、mysql_fetch_object-把结果集的一行信息以对象的形式返回格式:objectmysql_fetch_object(intresult)该函数用来将查询结果集result中的行信息拆到类变

量中,返回的将是资料对象,每执行一次该函数,将把结果集中记录指针下移一行。行记录中各字段以对象的属性在对象中存在,因此对于行各字段的访问方法是:对象名->字段名例:$db=@mysql_connect("localho

st","root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据

库出错!");mysql_query("setcharactersetgb2312");$rs=mysql_query("select*fromtable1",$db);while($row=mysql_fetch_object

($rs)){echo$row->id.$row->name.$row->sex.$row->年龄."<br>";}火龙果整理uml.org.cn3、mysql_num_rows-返回结果集中的记录行数格式:intmysql_num_rows(intresult)例:$db=@mysq

l_connect("localhost","root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择t

estdata数据库出错!");mysql_query("setcharactersetgb2312");$rs=mysql_query("select*fromtable1",$db);$recordcount=mysql_num_rows($rs);echo$recordcount

;火龙果整理uml.org.cn4、mysql_result-返回结果数据格式:mixedmysql_result(intresult,introw[,mixedfield])该函数返回结果集中由参数指定

的一个单元的内容(mixed表示类型不定的数据),其中field参数可以是字段的数字索引、字段名或者“表名.字段名”的形式。如果一个字段存在别名就必须使用别名,如果field参数省去,表示将返回指定行row中第1个字段的值。第一行对应0行,第一列对应0列。当

返回结果集行数较少的情况下可以使用本函数,否则请使用mysql_fetch_row、mysql_fetch_array、mysql_fetch_object函数,以提高效率。例:$db=@mysql_conn

ect("localhost","root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据库出

错!");mysql_query("setcharactersetgb2312");$rs=mysql_query("select*fromtable1",$db);echo"第一条记录ID值:".mys

ql_result($rs,0,0);echo"第二条记录ID值:".mysql_result($rs,1,0);echo"第一条记录name值:".mysql_result($rs,0,1);echo"第二条记录na

me值:".mysql_result($rs,1,1);火龙果整理uml.org.cn5、mysql_free_result-释放查询结果占用的内存格式:intmysql_free_result(intresult)本函数可以释放当前

mysql数据库查询返回所占用的内存。一般只有在非常担心内存的使用可能会不足的情况下才使用本函数。PHP程序会在结束时自动释放内存,低版本中使用mysql_freeresult函数来完成同样的功能。成功返回true,失败返回false。例:$db=@

mysql_connect("localhost","root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据库出错!");mysql_query("setch

aractersetgb2312");$rs=mysql_query("select*fromtable1",$db);if(mysql_free_result($rs)){echo"释放rs所占用的内存资源成功";}el

se{echo"释放rs所占用的内存资源失败";}echo"第一条记录ID值:".mysql_result($rs,0,0);echo"第二条记录ID值:".mysql_result($rs,1,0);ec

ho"第一条记录name值:".mysql_result($rs,0,1);echo"第二条记录name值:".mysql_result($rs,1,1);火龙果整理uml.org.cn6、mysql_affected_rows-返回影响的记录数格式:intmy

sql_affected_rows([intlink_identifier])该函数主要用于获得MySql的最后一次INSERT、UPDATE或DELETE所影响的行数,它也能返回SELECT语句中记录的行数。例1:$db=@

mysql_connect("localhost","root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata数据库出错!");mysql_query(

"setcharactersetgb2312");$rs=mysql_query("deletefromtable1limit1",$db);echo"影响的记录数:".mysql_affected_rows($db);例2:$db=@mysql_connect(

"localhost","root","123456")ordie("对不起,连接MySql服务器出错!");@mysql_select_db("testdata",$db)ordie("对不起,选择testdata

数据库出错!");mysql_query("setcharactersetgb2312");$rs=mysql_query("select*fromtable1",$db);echo"影响的记录数:".mysql_affec

ted_rows($db);火龙果整理uml.org.cn7、mysql_data_seek-移动结果集中的记录指针格式:intmysql_data_seek(intresult,introw)该函数用于移动result结果集中的记录指针到row

位置,成功返回true,否则返回false,row取值>=0,0对应结果集中的第1条记录,依此类推。8、mysql_errno-返回前一次MySql操作错误信息代码格式:intmysql_errno([intlink_identifier])该函

数用于返回前一次MySql操作的错误信息代码。如果没有错误出现,就返回false。9、mysql_error-返回前一次MySql操作错误信息格式:stringmysql_error([intlink_identifier])该函数用于返回前一次MySql操作的错误信息。如果没有错

误出现,就返回空字符串。例:@mysql_connect("marliesle");echo@mysql_errno().":".mysql_error()."<BR>";@mysql_select_db("nonexistentdb");echomysql_

errno().":".mysql_error()."<BR>";$conn=@mysql_query("SELECT*FROMnonexistenttable");echomysql_errno().":".mysql_error()."<BR>";火龙果整理uml.org.c

n7.2.2使用PHP连接到数据库一个PHP数据库类实例:mySQL_Class.php文件,保存mySQL_Class类的定义与实现<?php//对MySQL数据库进行操作的类classmySQL_Class{//变量(属性)声明var$c

onn;//链接对象private$Server;//服务器private$Uid;//用户名private$Pwd;//密码private$DataBase;//数据库火龙果整理uml.org.cn//**************

*******************************////***mySQL_Class类的构造函数***////***参数$server:mysql服务器***////***参数$uid:mysql服

务器用户***////***参数$pwd:mysql服务器密码***////***参数$dataBase:要链接数据库***////*********************************************//functionmySQL_Class($server="

localhost",$uid="root",$pwd="123",$dataBase="myData"){$this->Server=$server;$this->Uid=$uid;$this->Pwd=$pwd;$this->DataBase=$dataBase;

$this->conn=@mysql_connect($this->Server,$this->Uid,$this->Pwd)ordie("链接服务器失败,程序中止!");@mysql_select_db($this->DataB

ase,$this->conn)ordie("选择数据库失败,程序中止!");@mysql_query("setnames'gbk'",$this->conn);}火龙果整理uml.org.cn//*******************************

**************////***mySQL_Class类的SelectDB函数***////***功能:利用$this->conn中的链接对象,***////***选择数据库,并设置字符集。**

*////***-----------------------------------***////***参数$dataBase:要链接数据库***////*********************************************/

/functionSelectDB($dataBase){@mysql_select_db($dataBase,$this->conn)ordie("选择数据库失败,程序中止!");@mysql_query("setnames'gbk'",$th

is->conn);}火龙果整理uml.org.cn//*********************************************////***mySQL_Class类的QueryRS函数**

*////***功能:利用$this->conn中的链接对象,***////***执行select语句,并返回记录集。***////***-----------------------------------***////***参数$sql:要

执行的select语句***////*********************************************//functionQueryRS($sql){$rs=@mysql_query($sql,$this->conn);ret

urn$rs;}火龙果整理uml.org.cn//*********************************************////***mySQL_Class类的QueryRow函数*

**////***功能:利用$this->conn中的链接对象,***////***执行select语句,并把第一条记录***////***以数组的方式进行返回。***////***-----------

------------------------***////***参数$sql:要执行的select语句***////*********************************************//func

tionQueryRow($sql){$rs=@mysql_query($sql,$this->conn);if($rs){$arr=@mysql_fetch_array($rs);return$arr;}else{returnNULL;}}火龙果整理uml.org.cn//*********

************************************////***mySQL_Class类的QueryOne函数***////***功能:利用$this->conn中的链接对象,***////***执行select语句,并返回第一条***

////***记录第一个字段的值。***////***-----------------------------------***////***参数$sql:要执行的select语句***////*******************

**************************//functionQueryOne($sql){$rs=@mysql_query($sql,$this->conn);if($rs){$arr=@mysql_fetch_array($rs);retu

rn$arr[0];}else{returnNULL;}}火龙果整理uml.org.cn//*********************************************////***mySQL_Class类的Query

SQL函数***////***功能:利用$this->conn中的链接对象,***////***执行insert、update、delete语句***////***并返回语句执行后受影响的记录***////***行数。***////**

*-----------------------------------***////***参数$sql:要执行的sql语句***////*********************************************//function

QuerySQL($sql){$rs=@mysql_query($sql,$this->conn);if($rs){$num=@mysql_affected_rows($this->conn);return$num;}else{r

eturn0;}}}火龙果整理uml.org.cn7.2.2使用PHP连接到数据库例:testdb.php:<html><head><metahttp-equiv="Content-Type"content="text/html;c

harset=gb2312"><title>无标题文档</title></head><body><?phprequire(“mySQL_Class.php”);$sql=newmySQL_Class(“localho

st”,”root”,”123”,”myData”);echo“数据库链接成功.\n”;?></body></html>火龙果整理uml.org.cn7.2.3数据库的基本操作1、基本选择(sele

ct):例1:提取单值(指的是返回第一条记录的第一个字段的值)<?phprequire(“mySQL_Class.php”);$sql=newmySQL_Class(“localhost”,”root”,”123”,”myData”);$nam

e=$sql->QueryOne("selectnamefromtable1whereid=13");echo$name;?>例2:提取第一行记录<?phprequire(“mySQL_Class.php”);$sql=newmySQL_Class(“localhost”,”ro

ot”,”123”,”myData”);$row=$sql->QueryRow("select*fromtable1whereid=13");if($row){foreach($rowas$key=>$val){echo

"$key=".$val."";}}else{echo"没有记录返回";}火龙果整理uml.org.cn例3:提取多行记录<?phprequire(“mySQL_Class.php”);$sql=newmySQL_

Class(“localhost”,”root”,”123”,”myData”);$rs=$sql->QueryRS("select*fromtable1orderbyiddesc");while($row=mysql_fetch_array($rs)){ec

ho"id=".$row[0]."";echo"name=".$row[1]."";echo"sex=".$row[2]."";echo"年龄=".$row[3]."<br>";}?>火龙果整理uml.org.cn2、插入、删除和更新:例1:插入记录example.php<?phpif

($HTTP_POST_VARS){require(“mySQL_Class.php”);$sql=newmySQL_Class(“localhost”,”root”,”123”,”myData”);$sqlstri

ng="insertintotable1values(0,'$HTTP_POST_VARS[name]','$HTTP_POST_VARS[sex]','$HTTP_POST_VARS[age]')";$num=$sql->

QuerySQL($sqlstring);echo"影响的行数为".$num;}?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title

>无标题文档</title><styletype="text/css"><!--.style1{color:#FFFFFF}-->火龙果整理uml.org.cn</style></head><body><formac

tion=""method="post"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"bgcolor="#999933"><tr><tdcol

span="2"><divalign="center"class="style1"><br>提交给自己的PHP表单及处理程序<br><br></div></td></tr><tr><tdwidth="32%"height="30"><divalign="right"class="style1">

用户名:</div></td><tdwidth="68%"height="30"><inputname="name"type="text"id="name"></td></tr><tr><tdheight="30"><divalign="right"

class="style1">性别:</div></td>火龙果整理uml.org.cn<tdheight="30"><spanclass="style1"><inputtype="radio"name="s

ex"value="男">男<inputtype="radio"name="sex"value="女">女</span></td></tr><tr><tdheight="30"><divalign="right"class="style1"

>年龄:</div></td><tdheight="30"><inputname="age"type="text"id="age"size="10"></td></tr><tr><tdheight="30"cols

pan="2"><divalign="center"><inputtype="submit"name="Submit"value="提交"><inputtype="reset"name="Submit2"value=

"重置"></div></td></tr></table></form></body></html>火龙果整理uml.org.cn例2:修改记录example.php?id=值<?phprequire(“mySQ

L_Class.php”);$sql=newmySQL_Class(“localhost”,”root”,”123”,”myData”);if($HTTP_POST_VARS){$sqlstring="updatetable1setnam

e='$HTTP_POST_VARS[name]',sex='$HTTP_POST_VARS[sex]',年龄='$HTTP_POST_VARS[age]'whereid=$HTTP_GET_VARS[

id]";$num=$sql->QuerySQL($sqlstring);echo"影响的行数为".$num;}else{$sqlstring="select*fromtable1whereid=$HTTP_GET_VARS[id]";$row=$sql->QueryR

ow($sqlstring);$name=$row[name];$sex=$row[sex];$年龄=$row[年龄];}?>火龙果整理uml.org.cn<html><head><metahttp-equiv="Content-Type"content="text/html;chars

et=gb2312"><title>无标题文档</title><styletype="text/css"><!--.style1{color:#FFFFFF}--></style></head><body><formaction="?id=<?phpecho$HTT

P_GET_VARS[id];?>"method="post"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"bgcolor="#999

933"><tr><tdcolspan="2"><divalign="center"class="style1"><br>提交给自己的PHP表单及处理程序<br><br></div></td></tr>

火龙果整理uml.org.cn<tr><tdwidth="32%"height="30"><divalign="right"class="style1">用户名:</div></td><tdwidth="68%"height="30"><

inputname="name"type="text"id="name"value="<?phpecho$name;?>"></td></tr><tr><tdheight="30"><divalign="right"class="style1"

>性别:</div></td><tdheight="30"><spanclass="style1"><inputtype="radio"name="sex"value="男"<?phpif($sex=="男")echo"checked";?>>男<inputty

pe="radio"name="sex"value="女"<?phpif($sex=="女")echo"checked";?>>女</span></td></tr><tr><tdheight="30"><divalign="right"class="style1">年龄:

</div></td><tdheight="30"><inputname="age"type="text"id="age"size="10"value="<?phpecho$年龄;?>"></td></tr>火龙果整理uml.org.cn<tr><

tdheight="30"colspan="2"><divalign="center"><inputtype="submit"name="Submit"value="提交"><inputtype="r

eset"name="Submit2"value="重置"></div></td></tr></table></form></body></html>火龙果整理uml.org.cn例3:删除记录examp

le.php?id=值<?phpif($HTTP_POST_VARS){require(“mySQL_Class.php”);$sql=newmySQL_Class(“localhost”,”root”,”123”,”myData”);$sql

string="deletefromtable1whereid=$HTTP_POST_VARS[id]";$num=$sql->QuerySQL($sqlstring);echo"删除了".$num."行记录!";}el

se{if(!$HTTP_GET_VARS[id]){echo"需要id参数!";exit();}?>火龙果整理uml.org.cn<html><head><metahttp-equiv="Content-Type"content="text

/html;charset=gb2312"><title>无标题文档</title><styletype="text/css"><!--.style1{color:#FFFFFF}--></style></head><body><fo

rmaction=""method="post"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"bgcolor="#999933"><tr><tdwidth="100%"><diva

lign="center"class="style1"><divalign="left"><br>你确认要删除ID=<?phpecho$HTTP_GET_VARS[id];?>的记录吗?<br><br></div>火龙果整理uml.org.cn</div><

/td></tr><tr><tdheight="30"><divalign="center"><inputtype=hiddenid="id"name="id"value="<?phpecho$HTTP_GET_VARS[id];?>"><inputtype="sub

mit"name="Submit"value="确定"><inputtype="button"name="Submit2"value="取消"onclick="history.back();"></div></td></tr></table></form></body></html>火龙果整

理uml.org.cn通过本章的学习要求大家掌握Cookie与Session在PHP中的运用及区别。8.1Cookie的使用8.1.1CookieCookie存放在客户端计算机上,Cookie可以被客户端IE浏览器所拒绝,对于IE6.0浏览器,通过在“工具-Internet选项-隐私”中

进行设置安全级别,使用Cookie之后,将会降低网站的安全性。Cookie的删除:对于IE6.0浏览器,通过在“工具-Internet选项-常规”中通过“删除Cookies”进行删除。8.1.2Cookie函数的使用当Cookie变量被设置后,我们

可以在网站的其它页面中使用该Cookie变量的值。1、设置Cookie变量函数setcookie(必须在发送任何HTTP头信息以前进行传送,也可以使用ob_start()函数及ob_end_flush()来解决

这个问题):格式:setcookie(stringname,stringvalue,intexpire)其中:name为字符串,指定Cookie变量名(以备将来进行访问)value为字符串,指定Cookie变量的值expire为整数,可以省

去,表示Cookie的过期时间,设置为0或者不设置值均表示Cookie在当前浏览器窗口被关闭时将被浏览器删除。可以使用time函数生成一个过期时间。火龙果整理uml.org.cn例:test.php<?phpsetcookie("userid","admin");//创建一个coo

kie变量userid,其值为adminsetcookie("test1","admin",time()+20);//创建一个cookie变量test1,其值为adminsetcookie("test2","test2",time()-20);

//创建一个cookie变量test1,其值为test2setcookie("test1");//删除一个cookie变量test1setcookie("test2","",time()-100);//

删除一个cookie变量test2?><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body></body></

html>火龙果整理uml.org.cn2、获取Cookie的值:格式:$HTTP_COOKIE_VARS[变量名]例:网站页面权限验证实例login.htm(登录表单页),login.php(登录处理页),admin.php(后台管理页),logout.php(注销本次登录),当用户登录时

,记录该用户的用户名及用户身份在Cookie变量中,在admin.php页面中通过对Cookie中用户身份变量进行判断以决定该用户是否有权限进入后台管理,如果有权限需要进行注销本次登录logout.php。为了实现该实例,需要向users表中增加一个用户类型字段usertype(整型),手动修改

admin用户的用户类型为2(0-普通会员,1-高级会员,2-系统管理员)。login.htm:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/T

R/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title><styletype="

text/css"><!--火龙果整理uml.org.cn.style1{color:#FF0000;font-size:36px;}--></style></head><scriptlanguage="javascript">f

unctioninput(){if(document.all.username.value==""){alert("对不起,用户名不能为空");document.all.username.focus();returnfalse;}if(document.all.passw

ord.value==""){alert("对不起,密码不能为空");document.all.password.focus();火龙果整理uml.org.cnreturnfalse;}returntrue;}</sc

ript><body><formname="form1"method="post"action="login.php"onsubmit="returninput();"><divalign="center"><pclass="style

1">用户登录页面</p><p><br>用户名:<inputname="username"type="text"id="username"><br><br>密码:<inputname="password"

type="password"id="password"><br><br><inputtype="submit"name="Submit"value="提交"><inputtype="submit"name="Submit2"value=

"注册"><br></p></div></form></body></html>火龙果整理uml.org.cnlogin.php:<?phprequire(“mySQL_Class.php”);$sql=newmySQL_Class(“localhost”,”root”,”123”,”myDat

a”);$id=$sql->QueryOne("select*fromuserswhereusername='$HTTP_POST_VARS[username]'andpassword='$HTTP_POST_VARS[password]'");if(

$id){//验证通过setcookie("username",$sql->data[username]);setcookie("usertype",$sql->data[usertype]);echo"<scrip

tlanguage=javascript>document.location='admin.php';</script>";}else{echo"<scriptlanguage=javascript>alert('用户名错误

或密码错误,登录失败!');history.back();</script>";火龙果整理uml.org.cn}?><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""

http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title>

</head><body></body></html>火龙果整理uml.org.cnadmin.php:<?php$username=$HTTP_COOKIE_VARS[username];$usertype=$HTTP_COOKIE_VARS[usertype];if($us

ertype<2){setcookie("username");setcookie("usertype");echo"<scriptlanguage=javascript>alert('对不起,你不是系统管理员,进入后台管理页面失败!');doc

ument.location='login.htm';</script>";exit();}?><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><

html><head>火龙果整理uml.org.cn<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body><fontcolor=redsize=+2

>欢迎<?phpecho$username;?>用户进入后台管理页面,当前时间<?phpechodate("Y年m月d日H:i:s");?><ahref='logout.php'>注销本次登录</a></font></bo

dy></html>logout.php:<?phpsetcookie("username");setcookie("usertype");header("location:login.htm");?><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Trans

itional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title

>无标题文档</title></head><body></body></html>火龙果整理uml.org.cn3、Cookie数组:例:<?phpsetcookie("cookie[one]","cookieone");setcookie("cookie[two]

","cookietwo");setcookie("cookie[three]","cookiethree");echo$HTTP_COOKIE_VARS[cookie][one]."<br>";echo$HTTP_COOKIE_VARS[cook

ie][two]."<br>";echo$HTTP_COOKIE_VARS[cookie][three]."<br>";if(isset($HTTP_COOKIE_VARS[cookie])){foreach($HTTP_COOKIE_VARS[cookie]as$name=>$valu

e){echo"$name=$value<br>\n";}}?>火龙果整理uml.org.cn8.2Session的使用8.2.1Session的简介1、什么是Session当一个访问者从浏览器打开一个窗口开始访问一个网站时,他就与该网站开始了一个Session(会话)

,当访问者离开该网站时Session(会话)就结束了。Session从用户登录网站开始,到用户注销结束,一直跟踪用户,保存与用户相关的信息。2、什么是Session变量Session变量是个有规律的全局变量,与Cookie一样可以跨页面使用,当一个Session变量被

注册,在其它页面上可以得到该Session变量的值,在Session开始之后我们可以使用Session_register(“变量名”)函数来注册一个Session变量。3、Session与Cookie变量的区别:Session与Cookie有点类似

,但Session变量保存在服务器端,而Cookie变量保存在客户端计算机上。Cookie可以被客户端禁用可以长期存在,Session在会话生存周期内一直存在,直到会话结束,PHP一般用文件存储Session变量。Session

变量比Cookie变量有更高的安全性。4、Session的缺点:Session变量不能用来保存对象,保存在Session里的数据的使用效率不是很高,因为PHP一般使用文件来保存Session的变量信息,这需要从文件进行读与写操作。火龙果整理uml.org.cn5、Session变量的使用:第一步

:session_start();//会话开始第二步:session_register(“变量名”,“变量名1”);//注册Session变量名第三步:使用$HTTP_SESSION_VARS[变量名]Session变量8.2.2配置Session在PHP配置文件php.ini我们可

以方便的配置Session选项1、session.save_handler:定义用来保存Session数据的方式,默认为files2、session.save_path:保存session的路径3、session.cookie_lifetime:设定发送给客户端的Cookie的

有效时间。如果设为0,表示直到浏览器关闭才失效。默认值为0。4、session.use_cookie:设定是否使用Cookie来存放SessionID,默认值为1。5、session.cache_expire:设定缓存的se

ssion内容的有效期(分),默认为180分钟.火龙果整理uml.org.cn8.2.3PHP中Session函数1、session_start-初始化Session数据:格式:booleansessio

n_start()该函数初始化一个新会话,若本次会话已经开始,则连接上原有Session会话。如果PHP中Session没有自动开始,需要使用该函数来开始或连接一个Session会话。2、session_destroy-删除Sessio

n中的所有数据并中止当前会话:格式:booleansession_destroy()执行成功返回true,否则返回false火龙果整理uml.org.cn3、session_name-返回或设定目前Session的名称格式:s

tringsession_name([stringname])该函数不常用,用来取得或设定目前Session的名称。若没有参数,则表示仅获取目前Session的名称,带上参数则表示将Session名称设为参数指定的名称。Session名称只能

包含字母且不能太长,在传递sessionid时将用到该名称。如果要设定session名称,必须先于session_start()或session_register()之前进行设定。例:<?php$newname=session_name();echo$newname;session

_name("MySession");$newname=session_name();echo$newname;?>火龙果整理uml.org.cn4、session_save_path-返回或设定当前Session的保存路径格式:stringsession_save_path([stringp

ath])如果不提供任何参数,则返回当前Session数据的保存路径;如果给出了path参数,则把路径path设为session的保存路径。例:<?php$newname=session_save_path();echo$n

ewname;session_save_path("c:\\tmp");$newname=session_save_path();echo$newname;?>火龙果整理uml.org.cn5、session_id-返回或设定当前Session的ID格式:stringses

sion_id([stringid])如果没有参数,则返回当前session的ID;如果给出了ID参数,则把当前Session的ID设为给定参数。它常用来把session的ID加入到URL中,以决定那些窗口属于同一会话。例:<?phpsession_start

();$newname=session_id();echo$newname;session_id("abcdefghjikl");$newname=session_id();echo$newname;?>火龙果整理uml.org.cn6、session_re

gister-注册一个或多个当前Session变量格式:booleansession_register(mixedname[,mixedname…])该函数用来声明当前Session的多个变量。参数可以变量也可以是数组。若所有变量创建成功则返回true,否则返回false例1:<?phps

ession_start();session_register("UserId","UserType");$HTTP_SESSION_VARS[UserId]="admin";$HTTP_SESSION_VARS[UserType]

="2";echo$HTTP_SESSION_VARS[UserId];echo$HTTP_SESSION_VARS[UserType];?>例2:<?phpsession_start();session_register("MyArr[

one]","MyArr[two]","MyArr[three]");$HTTP_SESSION_VARS[MyArr][one]="12345";$HTTP_SESSION_VARS[MyArr][two]="12345";$HTTP_SESSION_

VARS[MyArr][three]="12345";foreach($HTTP_SESSION_VARS[MyArr]as$key=>$val){echo$key."=>".$val;}火龙果整理uml.org.cn7、session_unregister-从当前session中删除一个变量

格式:booleansession_unregister(stringname)删除成功返回true,否则返回false例:<?phpsession_start();session_register("UserId","UserType");$HTTP_S

ESSION_VARS[UserId]="admin";$HTTP_SESSION_VARS[UserType]="2";echo$HTTP_SESSION_VARS[UserId];echo$HTTP_SESSION_VA

RS[UserType];session_unregister("UserId");echo$HTTP_SESSION_VARS[UserId];?>火龙果整理uml.org.cn8、session_unset-释放所有的session变量格式:session_uns

et()例:<?phpsession_start();session_register("UserId","UserType");$HTTP_SESSION_VARS[UserId]="admin";$HT

TP_SESSION_VARS[UserType]="2";session_unset();echo$HTTP_SESSION_VARS[UserId];echo$HTTP_SESSION_VARS[UserType];?>火龙果整理uml.org.c

n9、session_is_registered-查看变量是否属于当前Session格式:booleansession_is_registered(stringname)如果当前session中有名为name

的Session变量,则函数返回true,否则返回false。例:<?phpsession_start();session_register("UserId","UserType");$HTTP_SESSI

ON_VARS[UserId]="admin";echoisset($HTTP_SESSION_VARS[UserId])."<br>";echoisset($HTTP_SESSION_VARS[UserTy

pe])."<br>";echosession_is_registered("UserId")."<br>";echosession_is_registered("UserType")."<br>";$HTTP_SESSION_VARS[UserTy

pe]="2";echo$HTTP_SESSION_VARS[UserId]."<br>";echo$HTTP_SESSION_VARS[UserType]."<br>";echosession_is_registered("UserType1")."<br>";echoisset($HTT

P_SESSION_VARS[UserType1])."<br>";?>火龙果整理uml.org.cn8.2.4应用举例例1:网站页面权限验证实例(改用Session实现)login.htm(登录表单页),login.php(登录处理页面),

admin.php(后台管理页),logout.php(注销本次登录),当用户登录时,记录该用户的用户名及用户身份在Session变量中,在admin.php页面中通过对Session中用户身份变量进行判断以决定该用户是否有权限进入后台管理,如果有权限需要进行注

销本次登录logout.php。为了实现该实例,需要向users表中增加一个用户类型字段usertype(整型),手动修改admin用户的用户类型为2(0-普通会员,1-高级会员,2-系统管理员)。login.htm:<!DOCTYPEHTMLPUBLIC"-//W3C

//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Con

tent-Type"content="text/html;charset=gb2312"><title>无标题文档</title><styletype="text/css"><!--.style1{color

:#FF0000;font-size:36px;}--></style>火龙果整理uml.org.cn</head><scriptlanguage="javascript">functioninput(){if(docu

ment.all.username.value==""){alert("对不起,用户名不能为空");document.all.username.focus();returnfalse;}if(document.all.password.value==""){alert("对不起,密码不能为空

");document.all.password.focus();returnfalse;}returntrue;}</script>火龙果整理uml.org.cn<body><formname="form1"method="post"action="login.php"o

nsubmit="returninput();"><divalign="center"><pclass="style1">用户登录页面</p><p><br>用户名:<inputname="username"type="text"id="username"><br><br>密码:<inputn

ame="password"type="password"id="password"><br><br><inputtype="submit"name="Submit"value="提交"><inputtype="su

bmit"name="Submit2"value="注册"><br></p></div></form></body></html>火龙果整理uml.org.cnlogin.php:<?phprequire("mysql_class.p

hp");$sql=newMySQL_class;$sql->Setup("127.0.0.1","root","123456");$sql->Create("userdb");$id=$sql->QueryItem("select*fromuserswhereusername='$HTTP_

POST_VARS[username]'andpassword='$HTTP_POST_VARS[password]'");火龙果整理uml.org.cnif($id){//验证通过session_s

tart();session_register("username");$HTTP_SESSION_VARS[username]=$sql->data[username];session_register("usertype");$HTTP_SES

SION_VARS[usertype]=$sql->data[usertype];echo"<scriptlanguage=javascript>document.location='admin.php';</scr

ipt>";}else{echo"<scriptlanguage=javascript>alert('用户名错误或密码错误,登录失败!');history.back();</script>";}?><html><head><metahttp-equiv="Content-Ty

pe"content="text/html;charset=gb2312"><title>无标题文档</title></head><body></body></html>火龙果整理uml.org.cnadmin.php:<?phpsession_st

art();$username=$HTTP_SESSION_VARS[username];$usertype=$HTTP_SESSION_VARS[usertype];if($usertype<2){session_destroy();echo"<scriptlanguage=j

avascript>alert('对不起,你不是系统管理员,进入后台管理页面失败!');document.location='login.htm';</script>";exit();}?><html><head><metahttp-equiv="Content-Type"content="

text/html;charset=gb2312"><title>无标题文档</title></head><body>火龙果整理uml.org.cn<fontcolor=redsize=+2>欢迎<?phpecho$

username;?>用户进入后台管理页面,当前时间<?phpechodate("Y年m月d日H:i:s");?><ahref='logout.php'>注销本次登录</a></font></body></h

tml>logout.php:<?phpsession_start();session_destroy();header("location:login.htm");?><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>

无标题文档</title></head><body></body></html>火龙果整理uml.org.cn通过本章的学习要求大家能够掌握文件的相关操作包括(文件的读、写、删除、更名),补充文件夹的相关操作(文件夹

的创建、删除、更名),能够处理上传文件,使用远程文件。9.1函数简介9.1.1路径函数1、basename-返回不含路径的文件名字符串格式:stringbasename(stringpath)例:<?php$path1="c:

\\ddd\\aaa\\index_1.php";$file1=basename($path1);echo$file1."<br>";$path1="/ddd/aaa/index.php";$file1=basename($path1);echo$file1;?>火龙果整理uml.

org.cn2、dirname-获取路径中的目录名称格式:stringdirname(stringpath)例:<?php$path1="c:\\ddd\\aaa\\index_1.php";$dir1=dirname($path1);echo$dir1."<br>";$path1="/d

dd/aaa/index.php";$dir1=dirname($path1);echo$dir1."<br>";?>3.realpath-返回物理路径(路径希望用虚拟路径)格式:stringrealpath(stringpath)例:<?php$path1="/";$path=realpat

h($path1);echo$path."<br>";$path1="./index.php";$path=realpath($path1);echo$path."<br>";?>火龙果整理uml.org.cn9.1.2文件操作函数1、fopen-打开一个文件或URL格式:intfope

n(stringfilename,stringmode[,intuse_include_path])如果filename以http://开始,就会对指定的服务器建立一个HTTP1.0连接,然后返回一个文件指针,指和返回文

本的开始。在发出HTTP请求时附加了一个“Host”头来处理基于名字的虚拟主机。该函数不支持HTTP重定向。如果filename以ftp://开始,会与指定的服务器建立一个ftp连接,返回指向指定文件的文件指针。如果服务器不支持被动模式(passivemodeftp),就会连接失败。通过ftp

连接可以对文件进行读写操作。如果filename是”php//stdin”,”php//stdout”,”php//stderr”中的一个,就会打开对应的输入输出流。如果以其他形式开头,就会从本机文件系

统中打开该文件,并返回文件指针。如果打开文件失败,则返回false。参数:mode的取值:“r”:以只读方式打开文件,文件指针指到文件开始处。“r+”:以可读写方式打开文件,文件指针指到文件开始处。“w”:以写入方式打开文件,文件指针指到开始处,

并将原文件的长度设为0,如果文件不存在,则建立新文件。“w+”:以可读写方式打开文件,文件指针指到开始处,并将原文件的长度设为0,如果文件不存在,则建立新文件。“a”:以写入方式打开文件,文件指针指到最后。如果文件不存在,则建立新文件。“a+”:以可读写方式打开

文件,文件指针指到最后。如果文件不存在,则建立新文件。b”火龙果整理uml.org.cn2、fclose-关闭已经打开的文件格式:intfclose(intfp)该函数用来关闭已经打开的文件的指针fp。成功返回true,失败则返回false。其中文件指针必须是有效的,且

必须是已经用fopen或fsockopen函数成功打开的文件指针。3、feof-测试文件指针是否在文件尾格式:intfeof(intfp)如果文件指针已经指向文件尾,返回true,否则返回false4、fgetc-获

取文件指针所指的字符,并移动指针到下一个字符格式:stringfgetc(intfp)该函数获取文件指针所指的字符,返回字符串类型的字符。指针如果在EOF则返回false。火龙果整理uml.org.cn例1:<?php$fp=

@fopen("http://localhost/tom/tom_com.htm","r");if($fp){while(!feof($fp)){$buffer=fgetc($fp);echo$buffer;}}fclose($fp);?>例2:<?php$fp=@f

open("c:\\test.txt","r");if($fp){while(!feof($fp)){$buffer=fgetc($fp);echo$buffer;}}fclose($fp);?>火龙果整理uml.org.cn例

3:<?php$fp=@fopen("ftp://localhost/test.txt","r");if($fp){while(!feof($fp)){$buffer=fgetc($fp);echo$buffer;}}fclose($fp);?>火龙果整理uml.org

.cn5、fgets-取得文件指针所指的行-并改变文件指针格式:stringfgets(intfp[,intlength])该函数获取文件指针所指的行,返回字符串长度为行的长度减去1。如果发生错误,返回false。例1:<?php$fp=@fopen("ftp:/

/localhost/test.txt","r");if($fp){while(!feof($fp)){$buffer=fgets($fp,4096);echo$buffer;}}fclose($fp);?>6、fread-以二进制方式读取文件

格式:stringfread(intfp,intlength)$content=fread($fp,filesize(“c:\test.txt”));火龙果整理uml.org.cn7、fwrite-二进制方式写入文件格式:intfwrite(intfp,stringstring

[,intlength])该函数将字符串string写入文件资料的指针fp上。如果有指定长度length,则会写入指定长度字符串,或是写到字符串结束。写入成功返回写入的字节数,否则返回false。例1:<?php$fp=@fopen("c:/test1.txt","w+");if($f

p){$buffer="你好,欢迎你使用PHP的文件操作函数";echofwrite($fp,$buffer);}fclose($fp);?>例2:<?php$fp=@fopen("ftp://localhost/test3.txt","w+");i

f($fp){$buffer="你好,欢迎你使用PHP的文件操作函数";echofwrite($fp,$buffer);}fclose($fp);?>火龙果整理uml.org.cn8、fputs-以字符方式向文件写入内容格式:intfp

uts(intfp,stringstr[,intlength])该函数用来将字符串str以字符方式写到文件中。如果有指定长度length,则会写入指定长度字符串,或是写到字符串结束。写入成功返回写入的字节数,否则返回false。例

1:<?php$fp=@fopen("c:/test1.txt","w");if($fp){$buffer="Hello,欢迎你使用PHP的文件操作函数!!!";echofputs($fp,$buffer);}fclose($fp

);?>例2:<?php$fp=@fopen("ftp://localhost/test3.txt","w");if($fp){$buffer="Hello,欢迎你使用PHP的文件操作函数!!!";echofputs($fp,$buffer);}fclose($fp);?>火龙果

整理uml.org.cn9、rewind-移动文件指针到文件开始处格式:intrewind(intfp)例<?php$fp=@fopen("c:/test.txt","r");if($fp){echofgets($fp)."<br>";echofgets($fp)."<br>";echofget

s($fp)."<br>";rewind($fp);echofgets($fp)."<br>";}fclose($fp);?>火龙果整理uml.org.cn9.1.3文件属性函数1、file_exists-检查文件是否存在格式:booleanfile_exists(stringfi

lename)存在返回true,否则返回false,该函数不能用于远程文件,必须对服务器中的文件进行检查。返回值放在快速缓冲区中。例:<?php$isexists=file_exists("c:/boot.ini");if($isexists){echo"文件存在";}else{ec

ho"文件不存在";}?>2、filesize-取得文件的大小格式:intfilesize(stringfilename)本函数返回指定文件的大小。返回false表示发生错误。返回值放在快速缓冲区中。例:

<?php$filesize=filesize("c:/boot.ini");echo"文件大小为:$filesize字节";?>火龙果整理uml.org.cn3、unlink-删除一个文件格式:intunlink(stringfilename)删除成功返回true,否则返回f

alse例:<?phpechounlink("c:/test1.txt");?>4、rename-重命名或移动文件格式:intrename(stringoldname,stringnewname);更名成功返回true,否则返回false例:<?p

hpechorename("c:/test.txt","d:/test23.txt");?>火龙果整理uml.org.cn5、mkdir-创建文件夹格式:intmkdir(stringpathname,intmode)本函数建立参数pathname目录,参数mode以八进位的方式指定

(在参数前加0)比较不会出错,对于Windows系统无效。返回true表示建立成功,失败则返回false。例:<?phpechomkdir("c:/abcd",0);?>6、rmdir-删除文件夹:格式:int

rmdir(stringpathname,)本函数删除参数pathname目录,该函数只能删除空目录。返回true表示删除成功,失败则返回false。例:<?phpechormdir("c:/abcd");?>7、r

ename-重命名文件夹格式:intrename(stringolddir,stringnewdir);更名成功返回true,否则返回false例:<?phpechorename("c:/abcd","c:/abcd1");?>火龙果整理uml.org.c

n9.2处理文件上传:相关全局数组:$HTTP_POST_FILES[表单中文件变量名][tmp_name]相关PHP配置php.ini中选项:file_uploads=on允许通过http上传文件upload_tmp_dir=文件上传

到服务器端的临时文件夹upload_max_filesize=2M上传文件的大小限制2M$HTTP_POST_FILES[file1]上传文件后,文件信息以一个数组方式存在,其中数组元素有:name文件在客户端计算机上的文件名type上传文件的类型size上传文件的

大小,单位:字节tmp_name所上传文件在服务器端的临时文件名例:upload.htm<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/htm

l4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</

title></head><body>火龙果整理uml.org.cn<formname="form1"enctype="multipart/form-data"method="post"action

="upload.php"><palign="center">文件上传例子</p><p>请选择要不是传的文件:<inputtype="file"name="file1"></p><p><inputtype="submit"n

ame="Submit"value="上传"></p></form></body></html>upload.php:<?phpif($HTTP_POST_FILES[file1][name]==""){echo"对不起,你没有选择要上传的文件!";echo"<script

>alert('对不起,你没有选择要上传的文件!');history.back();</script>";exit;}else{火龙果整理uml.org.cnecho"你上传的文件为:".$HTTP_POST_FILES[file1][name]."<br>

";echo"上传文件类型为:".$HTTP_POST_FILES[file1][type]."<br>";echo"上传文件大小为:".$HTTP_POST_FILES[file1][size]."bytes<br>";echo"服务器端的临时文件为:".$H

TTP_POST_FILES[file1][tmp_name]."<br>";if(is_uploaded_file($HTTP_POST_FILES[file1][tmp_name])){echo"上传成功!";$newfile=realpath(".")."\\upload\\".$HTTP

_POST_FILES[file1][name];echo$newfile;move_uploaded_file($HTTP_POST_FILES[file1][tmp_name],$newfile);}}?><!DOCTYPEHTMLP

UBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equ

iv="Content-Type"content="text/html;charset=gb2312"><title>无标题文档</title></head><body></body></html>火龙果整

理uml.org.cn9.3使用远程文件远程文件就是网络上其他机器上的文件,而非本机上的文件。使用远程文件可以节省本机资源,充分体现网络的优势。如果要使用远程文件,必须将PHP配置文件中php.ini的选项all

ow_url_fopen设置为”on”。例1:readtitle.php<?php$fp=@fopen("http://localhost/tom/tom_com.htm","r");if(!$fp){echo"<P>不能打开远程文件</P>.\n";exit;}while(!feof($fp)

){$line=fgets($fp,1024);if(eregi("<title>(.*)</title>",$line,$out)){$title=$out[1];break;}}fclose($fp);echo$title;

?>火龙果整理uml.org.cn例2:<?php$fp=@fopen("ftp://localhost/test3.txt","w");if(!$fp){echo"<P>不能打开远程文件</P>.\n";exit;}fputs($fp,"$HTTP_SER

VER_VARS[HTTP_USER_AGENT]\n");fclose($fp);?>火龙果整理uml.org.cn1、is_dir-测试一个字符串是否为一个文件夹格式:booleanis_dir(stringfilename)如果是目录则返回true,否

则返回false。例:<?phpechois_dir("c:/test.txt");echois_dir("c:/1234");?>2、is_file-测试一个字符串是否为一个文件格式:booleanis_file(stringfilename)如果是文

件返回true,否则返回false例:<?phpechois_file("c:/test.txt");echois_file("c:/1234");?>3、opendir-根据路径打开一个文件夹(目录)并返回操作句柄格式:intopendir(stringpath)火龙果整理

uml.org.cn4、readdir-读取目录操作句柄中的当前文档,并把指针指向下一个文档格式:stringreaddir(intdir_handle)返回目录操作句柄中的当前指针指向的文件档名称,并把指针指向下一个文件档。5、closedir-关闭目录操作句柄格式:voidc

losedir(intdir_handle)例:$handle=opendir('.');if($handle){echo"目录handle:$handle\n<br>";echo"档案:\n<br>";while($file=readdir($handle)){ech

o"$file\n";$path=realpath('.');$filename=$path."/".$file;if(is_dir($filename)){echo"是一个文件夹";}if(is_file($filename)){echo"是一个文件";}ech

o"<br>";}}closedir($handle);?>火龙果整理uml.org.cn通过本章的学习,要求大家掌握发送电子邮件、在FTP服务器下载文件、查询域名等知识。10.1PHP的网络函数10.1.1URL处理函数1、base64_encode-使用MIMEb

ase64对数据进行编码格式:stringbase64_encode(stringdata)函数将字符串data以MIMEbase64方式进行编码,编码后的字符串只包含英文字母大小写、阿拉伯数字、等号与反斜线,共64个基本字符,不包含其他特殊字符,因此取名base64。编码后的字符串

比原来的字符串长度增加1/3左右。例:<?php$str="中华人民共和国";echobase64_encode($str);?>火龙果整理uml.org.cn2、base64_decode-对经过MIMEbase64编码的字符进行解码格式:stringbase64_decode(

stringdata)该函数对以MIMEbase64编码的数据进行解码并返回,返回的数据可能是中文字符串或二进制数据。例:<?php$str="中华人民共和国";$enstr=base64_encode($str);echobas

e64_decode($enstr);?>火龙果整理uml.org.cn3、parse_url-解析字符串,并返回它的元素格式:arrayparse_url(stringurl)函数返回一个关联数组,其中包括了一个URL的各种信息。元素中

:scheme协议名称host主机port端口user用户名pass密码path访问路径query查询串例:<?php$str="http://localhost:8080/dirmanage/?curDir=123";$arr=parse_url($str);foreach($arras$key

=>$val){echo$key."=>".$val."<br>";}?>火龙果整理uml.org.cn4、urlencode-对URL进行编码格式:stringurlencode(stringstr)该函数把所有除“-”、“_”、“.”以外网页的非字母字符转换为%加十六进制数字的形式,并把

空格转换为“+”。它通常用对对url中查询部分进行编码。5、urldecode-对已编码的URL进行解码格式:stringurldecode(stringstr)该函数对用urlencode进行编码的字符串进行解码。火龙果整理uml.org.cn10.1.2FTP函数1、ftp_connect

-建立一个FTP连接格式:intftp_connect(stringhost[,intport])与host主机的FTP站点建立一个连接并返回连接标识,失败返回false,不给出post端口号,则与21端

口进行连接。2、ftp_login-登录一个FTP连接格式:intftp_login(intftp_stream,stringusername,stringpassword)以ftp_stream连接标识并通过username及password登录相应的FTP站点,如果站点支持

匿名登录,则用户名通常为anonymous,密码为空,成功返回true,失败返回false。3、ftp_chdir-改变要访问的FTP服务器上的目录格式:intftp_chdir(intftp_stream,stringdirect

ory)该函数的参数ftp_stream为FTP的连接标识,参数directory为要访问的目录。执行成功返回true,否则返回false。4、ftp_nlist-列出指定目录中的所有文件格式:arrayftp_nlist(intftp_stream,stringdirectory)该函数用来列出

指定目录中的所有文件名称,参数ftp_stream为FTP的连接标识,执行成功返回所有文件名的数组,否则返回false。火龙果整理uml.org.cn5、ftp_rawlist-列出指定目录中文件夹详细信息格式:arrayftp_rawlist(intftp_stream,stringd

irectory)本函数可详细列出指定路径中的所有文件名称。6、ftp_get-从服务器上下载一个文件格式:intftp_get(intftp_stream,stringlocal_file,stri

ngremote_file,intmode)本函数以mode模式下载FTP服务器上的文件remote_file到本机的local_filemode取值:FTP_ASCII(文本)和FTP_BINARY(二进制),执行成功返回tr

ue,否则返回false。7、ftp_put-向FTP服务器中上传一个文件函数描述:intftp_put(intftp_stream,stringremote_file,stringlocal_file,intmode)本函数以mode模式上传本机文件local_

file到FTP服务器名为remote_file,成功返回true,失败返回false。8、ftp_delete-删除FTP服务器的一个文件格式:intftp_delete(intftp_stream,stringremote_file)本函数删除FTP服务器上的remote_file文

件,成功返回true,失败返回false。9、ftp_quit-关闭FTP连接格式:intftp_quit(intftp_stream)关闭由ftp_stream连接标识指定的FTP连接,成功返回true,失败返回false。10、ftp_mkdir-创建文件夹(/dd/文件夹

名称)格式:stringftp_mkdir(intftp_stream,stringdirectory)该函数在FTP站点上创建一个文件夹,创建成功返回文件夹名称,失败返回false。火龙果整理uml.org.cn11、ft

p_rename-ftp的文件更名(/ddd/名称/ddd/新名称)格式:booleanftp_rename(intftp_stream,stringfrom,stringto)将from对应的文件更为为to名称,成功返回true,失败返回false。12、ftp_rmdir-删除文件夹(/ddd

/名称)格式:booleanftp_rmdir(intftp_stream,stringdirectory)将FTP中directory文件夹删除,成功返回true,失败返回false。13、ftp_size-获取文件(文件夹)大小(/ddd/名称)格式:intftp_size(i

ntftp_stream,stringremote_file)获取FTP服务器指定文件的大小byte,失败返回-1。14、ftp_systype-显示FTP服务器系统信息格式:stringftp_systype(intftp_st

ream)火龙果整理uml.org.cn10.1.3其他网络函数1、fsockopen-建立一个Internet或Unix主机socket连接格式:intfsockopen(string[udp://]hostname,intport,int[errno],strin

g[errstr],int[timeout])hostname指定主机名(如果为udp协议必须显示给出),port指定连接端口,errno为返回参数(必须采用引用方式),返回出错号,errstr为返回参数(必须采用引用方式),返回出错信息,timeout为超时设置超

时则断开连接,单位为秒。成功返回一个文件指针,可供前面介绍的fgetc(),fgets(),fputs()、fclose(),feof()使用。失败返回false。例:<?php$fp=fsockopen("localhost",80,&$errno,&$err

str,30);if($fp){fputs($fp,"GET/dirmanageHTTP/1.0\r\n\r\n");while(!feof($fp)){echofgets($fp,128);}}fclose($fp);?>火龙果整理uml.org.cn2、pfscokopen-建立一

个永久Internet或unix主机socket连接格式:intpfsockopen(string[udp://]hostname,intport,int[errno],string[errstr],int[timeout])PHP页面在执行结束后,该连接不会不关闭,可以提高效率,但

将消耗较多系统资源。3、gethostbyaddr-返回给定IP地址的域名格式:stringgethostaddr(stringip_address)根据IP地址返回相应域名,出错直接返回IP地址。例:<?echogethost

byaddr("127.0.0.1");?>4、gethostbyname-根据给定域名返回IP地址格式:stringgethostbyname(stringhostname)例:<?echogethostbyname("DRIVER");?>火龙果整理

uml.org.cn5、gethostbynamel-根据域名返回所有IP地址格式:arraygethostbynamel(stringhostname)返回一个数组。例:<?php$arr=getho

stbynamel("www.microsoft.com");foreach($arras$key=>$val)echo$key."=>".$val."<br>";?>6、ip2long-将IPv4(1

92.168.0.1)(IP地址)的字符串转换为一个合适的地址格式:intip2long(stringip_address)例:<?phpechoip2long("192.168.1.116");?>7、long2ip-一个长整形数字转换

为IPv4的IP地址字符串格式:stringlong2ip(intaddress)例:<?phpecholong2ip(192);?>火龙果整理uml.org.cn10.2使用PHP发送电子邮件mail-PHP中发送邮件的类smtp类(

smtp.163.com)这个类可以支持用户验证后才能发送邮件的邮件服务器。smtp.class.php火龙果整理uml.org.cntest.php:<?//*****************************

************************************//*.php使用文件,怎么使用在这里//**********************************************

*******************require("smtp.class.php");$smtpserver="smtp.163.com";//SMTP服务器$smtpserverport=25;//SMTP服务器端口$smtpusermail="mingnuo@163.com

";//SMTP服务器的用户邮箱$smtpemailto="liulinxingyu@163.com";//发送给谁$smtpuser="mingnuo";//SMTP服务器的用户帐号$smtppass="4444";//SMTP服务器的用户

密码$mailsubject="Te3333stSubject";//邮件主题$mailbody="<h1>Thisis3333atestmail</h1>";//邮件内容$mailtype="HTML

";//邮件格式(HTML/TXT),TXT为文本邮件$smtp=newsmtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.$smtp->d

ebug=TRUE;//是否显示发送的调试信息$smtp->sendmail($smtpemailto,$smtpusermail,$mailsubject,$mailbody,$mailtype);?>火龙果整理uml.org.cn10.3使用

PHP访问FTP站点一个实例。火龙果整理uml.org.cn10.4实用网络程序WHOIS,顾名思义,就是问"他是谁?",我们通过对域名的检索,可以反馈回域名的注册信息,包括持有人,管理资料以及技术联络资料,也包括该域名的域名服务器.index.php:<?php/*************

***************************functionwhois查询,返回得到的查询详细信息参数:$a_server服务器地址参数:$domainname查询域名参数:$a_port查询端口*********************

********************/functionwhois($domainname,$server="",$a_port=43){$Servers=array("net.cn"=>"whois.cnnic.net.cn","com.cn"=>"whois.cnnic.net.cn",

"cn"=>"whois.geektools.com","net"=>"whois.nsiregistry.net","cc.cn"=>"whois.nic.cc","com"=>"whois.nsiregistry.net",火龙果整理uml.org.cn"edu

.cn"=>"whois.edu.cn","edu"=>"rs.internic.net","gov"=>"whois.nic.gov","tv"=>"whois.tv");if(empty($server)){$domain=preg_replace("/^([^\.]*)\.([^\.

]*)\./","",$domainname);$server=$Servers[$domain];}if(empty($server)){$result="没有与该域名匹配的Whois服务器,是否拼错了?";return$result;}$retry=0;

//重试次数,最多重试5次,之间间隔2秒钟,连接Whois服务器的43端口while($retry<5){火龙果整理uml.org.cn$sock=@fsockopen($server,$a_port)

;if($sock){//如果有效成功连接break;}else{$retry++;sleep(2);//程序暂停2秒}}if(!$sock){$result="无法连接到Whois服务器$server";return$result

;}else{$result="";fputs($sock,preg_replace("/^([^\.]*)\./","",$domainname)."\015\012");while(!feof($sock)){$result.=fgets($sock,128)."<br>";}火龙果

整理uml.org.cnfclose($sock);if(preg_match("|WhoisServer:\s(.+)|",$result,$matches)&&$matches[1]!=$server){$result=whois($domainna

me,$matches[1],$a_port);//递归调用}return$result;}}/****************************************functionfinger查询参数:$a_ser

ver服务器地址参数:$a_query查询字段参数:$a_port查询端口*****************************************/functionfinger($a_server,$a_query="",$a_port=79){$sock=f

sockopen($a_server,$a_port,&$errno,&$errstr,10);if(!$sock)火龙果整理uml.org.cn{$ret_str="$errstr($errno)<br>\n

";}else{fputs($sock,"$a_query\r\n");while(!feof($sock)){$ret_str.=fgets($sock,128);}fclose($sock);}echo$ret_str;retu

rn$ret_str;}/****************************************functiontraceroute查询参数:$a_query查询字段********************

*********************/functiontraceroute($a_query){exec("Tracert$a_query",$ret_strs);火龙果整理uml.org.cn$str_count=count($ret_strs);for($count=0;$count<

$str_count;$count++)echo"$count/$str_count".$ret_strs[$count]."\n";}?><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""ht

tp://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>无标题

文档</title></head><?phpif($_POST){switch($_POST[action]){case"whois":if($_POST[query])火龙果整理uml.org.cn{echo"查询结果如下:";echo"<hr>";$do

mainname=$_POST[query];if(empty($domainname)){echo"请输入域名";exit;}$result=whois($domainname);if(strpos($resul

t,"Nomatch")){echo"<fontcolor=blue>$domainname没有注册</font>";}else{if($result){echo"<fontcolor=blue>$domainname已经注册</font>";}else{echo"<fontcolo

r=blue>连接服务器超时</font>";火龙果整理uml.org.cn}}print"<hr>";print$result;exit;}break;case"finger":if($_POST[query]){ec

ho"<PRE>\n";finger($_POST[server],$_POST[query]);echo"</PRE>";exit;}break;case"route":if($_POST[query]){echo"<PRE>\n";火龙果整理uml

.org.cntraceroute($_POST[query]);echo"</PRE>";exit;}break;}}?><body><tablewidth="100%"border="0"><tr><td

bgcolor="#CECF9C"><divalign="center">域名查询工具</div></td></tr><tr><td><formname="form1"method="post"action="">你可以查询.com.net.com.cn.net.cn.edu.gov.gov.tv

.cc.cn域名<br><br>查询域名如www.tyfo.com:<inputname="query"type="text"id="query"><br><inputname="action"type=

"hidden"id="action"value="whois">火龙果整理uml.org.cn<br><inputtype="submit"name="Submit"value="提交"></form></td></tr></table><table

width="100%"border="0"><tr><tdbgcolor="#CCCC99"><divalign="center">Finger查询指定服务器中用户信息的工具</div></td></tr><tr><td><formaction=""method="post"na

me="form2"id="form2"><br>查询服务器:<inputname="server"type="text"id="server"value="localhost"><br><br>查询用户:<in

putname="query"type="text"id="query"><br><inputname="action"type="hidden"id="action"value="finger"><br>火龙果整理uml.org.cn<inputty

pe="submit"name="Submit2"value="提交"></form></td></tr></table><tablewidth="100%"border="0"><tr><tdbgcolor="#CECF9C"><divalign="center">路由跟踪查询工具

</div></td></tr><tr><td><formaction=""method="post"name="form3"id="form3"><br><br>查询主机:<inputname="query"type="text"id="qu

ery"><br><inputname="action"type="hidden"id="action"value="route"><br><inputtype="submit"name="Submit22"value="提交"></fo

rm></td></tr></table></body></html>火龙果整理uml.org.cn通过本章的学习要求大家掌握如果利用正则表达式进行字符串查找和替换。11.1正则表达式简介1、POSIX规范的相关函数:1)、ereg-利用正则表达式进行字符串查找(要区分大小写)格式:

intereg(stringpattern,stringstring,array[regs])将在字符串string中查找与字符串pattern相匹配的第一个字符串(要区分大小写),如果找到返回true

,否则返回false,如果要将找到的与字符串pattern相匹配的字符串保存起来可以加上第三个参数(该参数可以省去),该参数应该是一个数组变量,该数组的下标为0(regs[0])的元素将对应与patt

ern字符串匹配的字符串本身,下标为1(regs[1])的元素对应pattern字符串中的正则表达式所匹配的第一个字符串。2)、ereg_replace-利用正则表达式进行字符串替换(要区分大小写)格式:stringereg_replace(strin

gpattern,stringreplacement,stringstring)本函数将在字符串string中查找与字符串pattern相匹配的字符串(要区分大小写),如果找到则用replacement字符串替换所有的匹配字符串,函数将返回替换

后的结果字符串。火龙果整理uml.org.cn3)、eregi-利用正则表达式进行字符串查找(不区分大小写)格式:interegi(stringpattern,stringstring,array[regs])将在

字符串string中查找与字符串pattern相匹配的第一个字符串(不区分大小写),如果找到返回true,否则返回false,如果要将找到的与字符串pattern相匹配的字符串保存起来可以加上第三个参数(该参数可

以省去),该参数应该是一个数组变量,该数组的下标为0(regs[0])的元素将对应与pattern字符串匹配的字符串本身,下标为1(regs[1])的元素对应pattern字符串中的正则表达式所匹配的第一个字符串。4)、eregi_replace-利用正则表达式进行字符串替换(

不区分大小写)格式:stringeregi_replace(stringpattern,stringreplacement,stringstring)本函数将在字符串string中查找与字符串pattern相匹配的字符串(不区分大小写),如果找到则用repl

acement字符串替换所有的匹配字符串,函数将返回替换后的结果字符串。5)、split-利用正则表达式将字符串分割为数组(要区分大小写)格式:arraysplit(stringpattern,stringstring,int[limit])本函数用与字符串pattern匹配的字符串对st

ring进行分割(要区分大小写),并形成数组,limit指出最多处理的次数,省去表示全部进行处理。函数将返回一个数组,如果string中没有匹配的字符串,则函数返回只有一个元素的数组,该元素的下标为0,值为string。火龙果整理uml.org.cn6

)、spliti-利用正则表达式将字符串分割为数组(不区分大小写)格式:arrayspliti(stringpattern,stringstring,int[limit])本函数用与字符串pattern匹配的字符串对string进行分割(不区分大

小写),并形成数组,limit指出最多处理的次数,省去表示全部进行处理。函数将返回一个数组,如果string中没有匹配的字符串,则函数返回只有一个元素的数组,该元素的下标为0,值为string。7)、sql_regcase-不字符串转换为大小写无关的正则表达式格式:stringsql

_regcase(stringstring)本函数将字符串中每个字符转换为[Aa]格式并形成最终字符串返回。2、Perl规范的相关函数,在Perl规范中,正则表达式必须以|开始以|结束:1)、preg_match-利用正则表达式进行字符串查找2)、pre

g_match_all-利用正则表达式进行所有字符串查找3)、preg_replace-利用正则表达式进行查找并替换4)、preg_split-利用正则表达式者字符串分割5)、preg_quote-引注正

则表达式(了解)6)、preg_grep-正则表达式匹配(了解)火龙果整理uml.org.cn11.2正则表达式模式匹配在正则表达式函数中字符分四种,正常字符,模式匹配符,转义字符,字符簇。对于正常字符将原样进行匹

配。例1:<?php$string="frontpagetooeasy";if(ereg("too",$string,$arr))//too中没有正则表达式,所以$arr[1]为空{echo"找到<BR>";echo

$arr[0]."<BR>";//too本身echo$arr[1]."<BR>";//为空}else{echo"没有找到";}?>火龙果整理uml.org.cn例2:<?php$string="frontpagetooeasy";i

f(ereg("t(.*)o",$string,$arr))//t(.*)o中有正则表达式,所以$arr[1]为有值{echo"找到<BR>";echo$arr[0]."<BR>";//t(.*)o所匹配的字符串本身echo

$arr[1]."<BR>";//(.*)正则表达式所匹配的字符串}else{echo"没有找到";}?>火龙果整理uml.org.cn1、*-指示字符出现的次数通常放于字符后面或子正则表达式后面,表示0个或0个以上前面的部分

例1:<?php$string="frontpagetoo";//$string="";if(ereg("t*",$string))//无论如何都会找到,一定会返回真,因为*可表示0个{echo"找到";}?>例2:<?php$string="

frontpagetoo";//$string="";if(ereg("tt*",$string))//找字符串中至少有一个t的部分{echo"找到";}?>火龙果整理uml.org.cn2、+-指示字符出现的

次数通常放于字符后面或子正则表达式后面,表示1个或1个以上前面的内容(字符)例1:<?php$string="frontpagetoo";//$string="abcd";if(ereg("t+",$strin

g)){echo"找到";}?>火龙果整理uml.org.cn3、?-指示字符出现的次数通常放于字符后面或子正则表达式后面,表示0个或1个前面的内容(字符)例1:<?php$string="frontpagetoo";//$string="";if(ereg("t?",

$string))//无论如果都会找到,因为?可以表示0个{echo"找到";}?>火龙果整理uml.org.cn4、{n,m}-指示字符出现的次数通常放于字符后面或子正则表达式后面,表示至少n个不超过m个前面的内容(字符)格式1:{0

,}等同于*表示至少0个或以上前面的字符例:<?php$string="frontpagetoo";//$string="";if(ereg("t{0,}",$string))//无论如果都会找到,因为{0,}可以表示0个{echo"找到";}?>格式2:{1,}等同于+表示至少1

个或以上前面的字符例:<?php$string="frontpagetoo";//$string="abcde";if(ereg("t{1,}",$string))//找找至少有一个t的{echo"找到";}?>火龙果整理uml.org.cn格式3:{0,1}等同于?表示0

个或1个前面的字符例:<?php$string="frontpagetoo";//$string="";if(ereg("t{0,1}",$string))//无论如何都会找到,因{0,1}可以表示0个{echo"找到";}?

>格式4:{2,5}表示有2到5个前面的字符例:<?php$string="frontpagetoo";//$string="fronttpagetoo";if(ereg("t{2,5}",$string)){echo"找到";}?>火龙果整理uml.org.cn5、$-指示字符出现的

位置必须放在字符或正则表达式的尾部,在整个正则表达式中,$字符必须是最后一个字符,表示将找寻以字符或正则表达式匹配的字符结尾的字符串。例:<?php$string="frontpagetoo";//$str

ing="frontpagetoo";if(ereg("too$",$string)){echo"找到";}?>火龙果整理uml.org.cn6、[]-指示应该是(或不是)字符列表中的任意一个字符(1个)中括

号里面应该有多个字符的列表,或以-表示的字符的一个范围,该表达式只可能表示唯一一个字符。如果中括号中第一个字符为^,表示不能是列表中的任一个字符;否则^,表示只可能是列表中的某一个字符。格式1:[abcdef]该表达式表示只可能是abc

def中的某一个字符例:<?php$string="frontpagetoo";//$string="frantpagetoo";//$string="frentpagetoo";if(ereg("fr[ao]nt",$

string)){echo"找到";}?>火龙果整理uml.org.cn格式2:[a-f]等同于[abcdef]该表达式表示只可能是abcdef中的某一个字符例:<?php$string="frontpagetoo";//$string="frantpagetoo";//$string=

"frentpagetoo";if(ereg("fr[a-e]nt",$string)){echo"找到";}?>格式3:[a-d0-3]等同于[abcd0123]该表达式表示只可能是abcd0123中的某一个字符例:<?php$string="fro

ntpagetoo";//$string="frantpagetoo";//$string="frbntpagetoo";//$string="fr2ntpagetoo";//$string="fr4ntpagetoo";if(ereg("fr[a-e0-3]nt",$

string)){echo"找到";}?>火龙果整理uml.org.cn格式4:[^abcdef]该表达式表示的字符不可能是abcdef中任一个字符例:<?php$string="frontpagetoo";//$str

ing="frantpagetoo";//$string="frbntpagetoo";//$string="fr2ntpagetoo";//$string="fr4ntpagetoo";if(ereg("fr[^abcde]nt",$string)){echo"

找到";}?>火龙果整理uml.org.cn格式5:[^a-d0-3]该表达式表示的字符不可能是abcd0123中任一个字符例:<?php$string="frontpagetoo";//$string="fr

antpagetoo";//$string="frbntpagetoo";//$string="fr2ntpagetoo";//$string="fr4ntpagetoo";if(ereg("fr[^a-c0-3]nt",$string)){echo"找到";}?>火龙果

整理uml.org.cn7、^-不在中括号内部时指示字符的位置必须放在字符或正则表达式的前面,在整个正则表达式中,^字符必须是第一个字符,表示将找寻以字符或正则表达式匹配的字符开头的字符串。例:<?php$string="frontpagetoo";//$string="frantpage

too";if(ereg("^front",$string)){echo"找到";}?>8、.-表示任意一个字符(1个字符)例:<?php$string="frontpagetoo";//$string="frantpagetoo";//$string="frntp

agetoo";if(ereg("fr.nt",$string)){echo"找到";}?>火龙果整理uml.org.cn9、|-表示只可能是左边或右边的选项中的一个字符(1个字符)例:<?php$string="frontpageto

o";//$string="frantpagetoo";//$string="frntpagetoo";if(ereg("fr(o|a)nt",$string)){echo"找到";}?>10、()-表示正则表达式中的一个子正则表达式例:<?php$string="frontpagetoo"

;//$string="frantpagetoo";//$string="frnttpagetoo";if(ereg("fr.*n(t{2,})",$string)){echo"找到";}?>火龙果整理uml.org.cn11、\-表示转义字符在正则表达式中如果要表示上面用到的*+?{

}$[]^.()\这些字符本身,必须在前面加上\,例如\\表示\本身这个字符。如果在[]内部的字符列表中要表过-本身,也必须在前面加上\。例:<?php$string="4*3=12";//$string="5+6=11";if(ere

g(".\*.",$string)){echo"找到";}?>12、\n\r\t\$转义字符在正则表达式中任然表示原来的作用,即分别表示换行符,回车符,制表符,美元符。例:<?php$string="itis25\t";//$string="itis25";if(ereg("\t$"

,$string)){echo"找到";}?>火龙果整理uml.org.cn13、字符簇:[[:alpha:]]表示任何一个字母例:<?php$string="frontpagetoo";//$string

="frantpagetoo";//$string="fr2ntpagetoo";if(ereg("fr[[:alpha:]]nt",$string)){echo"找到";}?>[[:digit:]]表示任何一个数字例:<?php$string="frontpageto

o";//$string="frantpagetoo";//$string="fr2ntpagetoo";if(ereg("fr[[:digit:]]nt",$string)){echo"找到";}?>火龙果整理uml.org.cn[[:

alnum:]]表示任何一个字母或数字例:<?php$string="frontpagetoo";//$string="fr.ntpagetoo";//$string="fr2ntpagetoo";if(ereg("fr[[:alnum:]]nt",$string)){echo"找到";}

?>[[:space:]]表示任何一个空白字符(半角空格,制表符)例:<?php$string="frontpagetoo";//$string="fr\tntpagetoo";//$string="frntpagetoo";/

/$string="frntpagetoo";if(ereg("fr[[:space:]]nt",$string)){echo"找到";}?>火龙果整理uml.org.cn[[:upper:]]表示任何一个大写字母例:<?php$string="fr

Antpagetoo";//$string="fr\tntpagetoo";//$string="frantpagetoo";//$string="frOntpagetoo";if(ereg("fr[[:upper:]]nt",$string)){ec

ho"找到";}?>[[:lower:]]表示任何一个小写字母例:<?php$string="frAntpagetoo";//$string="fr\tntpagetoo";//$string="frantpagetoo";//$string="

frOntpagetoo";if(ereg("fr[[:lower:]]nt",$string)){echo"找到";}?>火龙果整理uml.org.cn[[:punct:]]表示任何一个标点符号例:<?php$strin

g="frAntpagetoo";//$string="fr\tntpagetoo";//$string="fr.ntpagetoo";//$string="fr,ntpagetoo";if(ereg("fr[[:punct:]]nt",$string)){echo"找到";}?>[[:x

digit:]]表示任何一个十六进制数字,相当于[0-9a-fA-F]例:<?php$string="frAntpagetoo";//$string="fr\tntpagetoo";//$string=

"fr6ntpagetoo";//$string="frfntpagetoo";if(ereg("fr[[:xdigit:]]nt",$string)){echo"找到";}?>火龙果整理uml.org.cn14、以上字符或字符簇知识在Perl规范相关的函数中也适用,但以下字符只能在Pe

rl规范下使用,即以下字符只能在Perl规范的相关函数中使用:\d表示任意一个十进制数字(1个)\D表示任意一个除十进制数字以外的字符(1个)\s表示任何的一个空白字符(空格,制表符)\S表示除了空白字符以外的任何一个字符\w表示任何一个字母、数字或下划线\W表示除了字母、数字、下划

线以外的任何一个字符例1:对表单提交过来的Email进行验证$email=$_POST[email];if(eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)){echo"Ema

il合法";}else{echo"Email不合法";}火龙果整理uml.org.cn例2:对表单提交过来的用户名进行验证$username=$_POST[username];if(eregi("^((root)|(ad

min)|(administrator)|(anonymous)|(guest))$",$username)==false){echo"username合法";}else{echo"username不合法";}火龙果整理uml.o

rg.cn通过本章的学习要求大家掌握PHP中图象处理方法,必须在PHP配置文件php.ini中加载gd.dll或gd2.dll图象库。12.1PHP的图象处理12.1.1创建图象函数1、imagecreate-创建一个

图象格式:intimagecreate(intx_size,inty_size)本函数用来建立一张全空的图形。参数x_size、y_size为图形的尺寸,单位为像素(pixel),建立成功返回图象操作句柄,否则返回false

。2、imagecreatefromgif(或imagecreatefrompng或imagecreatefromjpeg)-创建一个gif(或png或jpeg)图象格式1:intimagecreate

fromgif(stringfilename)格式2:intimagecreatefrompng(stringfilename)格式3:intimagecreatefromjpeg(stringfilename)本函式用来创建一张GIF或PNG或JPEG格式的图像,参数filename可以

是本地的文件,也可以是网络的URL位址。返回对图像文件操作的句柄,可供其它的函式使用。本函数产生的GIF图,由于有版权的问题,因此在商业上的使用还要多加考量。火龙果整理uml.org.cn3、imagecreatetruecolor-创建一个真彩图象格

式:intimagecreatetruecolor(intx_size,inty_size)本函数用来建立一张全空的真彩图形。参数x_size、y_size为图形的尺寸,单位为像素(pixel),建立成功返回图象操作句柄,否则返回false。4、imagesx-返回图象句柄的宽格式:int

imagesx(intim)本函数Imagesx返回图形im的宽度,单位:象素。5、imagesy-返回图象句柄的高格式:intimagesy(intim)本函数Imagesy返回图形im的高度,单位:象素。

6、imagecopyresized-将原图的一部分区域复制到目标图格式:intimagecopyresized(intdst_im,intsrc_im,intdstX,intdstY,intsrcX,intsrcY,intdstW,intdstH,intsrcW,intsrcH)本函数将原图的一

部分区域复制到目标图,并可能造成原图变大或缩小,dst为目标图相关信息,src为原图相关信息。7、imagecopy-将原图的一部分区域复制到目标图格式:intImageCopy(intdst_im,intsrc_im,intdst_x,intdst_y,intsrc_x,intsr

c_y,intsrc_w,intsrc_h)本函数将原图一部分复制到目标图,dst为目标图相关信息,src为原图相关信息。火龙果整理uml.org.cn12.1.2颜色处理函数:1、ImageColorAllocate-为图像分配颜色格式:intimagecolorallocat

e(intim,intred,intgreen,intblue)本函数用来匹配图形的颜色,供其它绘图函数使用。参数im表示图形的handle。参数red、green、blue是色彩三原色,其值从0至255。2、ImageColorTransparent-定义一种颜色为透明色

格式:intimagecolortransparent(intim,int[col])本函数用来指定某颜色为透明背景色。参数im为使用为imagecreate打开图形操作句柄handle。参数col为imagecolorallocate所

匹配的颜色。返回新的透明背景色。3、ImageColorAt-返回图像中某一点的颜色值格式:intimagecolorat(intim,intx,inty)本函数用以取得图形中指定某点(x,y)的颜色索引值,格式为(rrr,ggg,bbb),im为图像创建函数创建图像的句柄。x为点

的横坐标,y为点的纵坐标。火龙果整理uml.org.cn12.1.3绘图函数1、ImageArc-画椭圆弧线格式:intimagearc(intim,intcx,intcy,intw,inth,ints,inte,intcol)本函数用

来画椭圆弧线。坐标(0,0)为图片的左上角,参数cx、cy为椭圆心坐标,参数w为椭圆水平轴长,参数h为椭圆垂直轴长,参数s及e分别为起始角与结束角(0-360),参数col为弧线的颜色。参数im表示图形的handle。2、ImageChar(ImageCharU

p)-在水平(垂直)方向画一个字符格式1:intimagechar(intim,intfont,intx,inty,stringc,intcol)格式2:intimagecharup(intim,intfont,intx,inty,stringc,

intcol)函数用来在水平(垂直)方向上输出的字符。原点坐标(0,0)为图片的左上角,参数font表示字体的大小,从最小的1起,参数x、y是写入字符的坐标值,参数c为欲写出的字符,参数col为字符的颜色。参数im表示图形的handle。3、ImageDashed

Line-画一条虚线格式:intimagedashedline(intim,intx1,inty1,intx2,inty2,intcol)本函式将在图形上画出一条虚线。从x1、y1连接到x2、y2,原点(

0,0)为图形的左上角。参数col为虚线的颜色。火龙果整理uml.org.cn4、ImageRetangle-画一个矩形格式:intimagerectangle(intim,intx1,inty1,intx2,inty2,i

ntcol)本函数可以在图片上绘出长方形。参数x1、y1及x2、y2分别为矩形对角线的坐标。参数col表示矩形边框的颜色。5、ImageFill-填充图像格式:intimagefill(intim,intx,inty,intcol)本函数将图片坐标(x,y)所在的区域着色。参数col表示

填充的颜色。6、ImageString(ImageStringUp)-水平(垂直)输出字符串格式1:intimagestring(intim,intfont,intx,inty,strings,intcol)格式2:intimagestringup(intim,intfont,intx,

inty,strings,intcol)函数将在图片的水平(垂直)方向上输出字符串。参数font为字体,设为1到5表示使用内定字形。参数x、y为字符串起点坐标。要输出的字符串为s上。参数col表示字串的颜色。7、ImageFilledPolygo

n-绘制多边形并对多边形区域着色格式:intimagefilledpolygon(intim,arraypoints,intnum_points,intcol)本函数将图片的封闭多边形区域着色。参数points为数组,代表多边形区域,数组的偶数元素为X坐标,奇数元素为Y坐标,例如poi

nts[0]=x0、points[1]=y0、points[2]=x1、points[3]=y1。参数num_points为多边形的转折点数目。参数col表示填充的颜色。火龙果整理uml.org.cn12.1.4图像输出和释放1、ImagePng(ImageGif或Ima

geJpeg)-把PNG(GIF或Jpeg)图像输出到浏览器或文件中格式:intimagegif(intim,string[filename])intimagepng(intim,string[filename])intimagejpeg(i

ntim,string[filename])本函数用来建立一张GIF|png|jpeg格式图形。参数im为使用ImageCreate所建立的图片句柄。参数filename可省略,若无本参数filename,则会将图片直接送到浏览器端,并且在送出图片之前要先使用header(“Conten

t-type:image/gif”)或header(“Content-type:image/png”)或header(“Content-type:image/jpeg”);发送标头字串到浏览器端,以顺利传输图片。若要使用透明背景的GIF图

,也就是GIF89a的格式,需要先使用ImageColorTransparent设定透明背景。本函数产生的GIF图,由于有版权的问题,因此在商业上的使用还要多加考量。2、ImageDestory-释放一个图像的所有资源格式:

intimagedestroy(intim)本函式将释放与图像句柄im有关的所有内存资源。参数im为ImageCreate所建立的图片句柄。火龙果整理uml.org.cn例1:创建图片的例子<?phpheader("Content-type:image/gif

");$im=@imagecreate(500,300);if($im){$fill_color=imagecolorallocate($im,20,14,91);//填充颜色imagefill($im

,0,0,$fill_color);//填充颜色$text_color=imagecolorallocate($im,90,200,100);//文字颜色imagestring($im,3,50,50,"ASimpleT

extString",$text_color);$line_color=imagecolorallocate($im,0,255,0);//边框颜色imagerectangle($im,0,0,500,500,$line_color);$text_color=imagecolorallo

cate($im,255,200,100);//文字颜色imagechar($im,2,50,60,"Drawing",$text_color);$line_color=imagecolorallocate($im,255,2

55,128);//边框颜色imagearc($im,200,200,60,120,0,360,$line_color);$line_color=imagecolorallocate($im,255,128,128);//边

框颜色imagedashedline($im,170,140,230,260,$line_color);火龙果整理uml.org.cn$line_color=imagecolorallocate($im,200,100,100);

//边框颜色$points=array(300,0,470,50,400,90,200,30,100,200);imagefilledpolygon($im,$points,5,$line_color);imagegif($im);}else{echo

"创建图片失败";}火龙果整理uml.org.cn例2:图片验证码例子index.php:登录表单及处理页面<?phpsession_start();if($_POST){if(($_POST[username]=="admin")&&($_POST[pas

sword]=="admin")&&($_POST[checkcode]=="$_SESSION[checkcode]")){echo"登录成功!";exit;}else{if($_POST[username]!="admin"){echo"<script

>alert('用户名错误,登录失败');history.back();</script>";}elseif($_POST[password]!="admin"){echo"<script>alert('密码错误,登录失败');history.

back();</script>";火龙果整理uml.org.cn}else{echo"<script>alert('验证码错误,登录失败');history.back();</script>";}exit;}}else{sessi

on_register("checkcode");for($i=0;$i<6;$i++){srand(microtime()*1000000);$randval.=rand(0,9);}$_SESSION[checkcode]=$randval;}?><!DOCTYPEHTMLPUBLIC"-//

W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="

Content-Type"content="text/html;charset=gb2312">火龙果整理uml.org.cn<title>无标题文档</title></head><body><p>用户登录</p><formname="form1

"method="post"action=""><br>用户名:<inputname="username"type="text"id="username"><br><br>密码:<inputname="password"

type="password"id="password"><br><br>验证码:<inputname="checkcode"type="text"id="checkcode"size="8"><imgsrc="checkimg.php"align="absbottom

"><br><br><inputtype="submit"name="Submit"value="提交"><br></form>火龙果整理uml.org.cn<p>&nbsp;</p></body></html>checkimg.php:生成验证码图片文件<?phpsession_star

t();$checkcode=$_SESSION[checkcode];header("Content-type:image/png");$im=@imagecreate(73,25);if($im){$fill_color=imagecolorallocate($im,80,84,80)

;//填充颜色imagefill($im,0,0,$fill_color);//填充颜色$text_color=imagecolorallocate($im,255,0,0);//文字颜色imagestring($im,5,1

0,5,$checkcode,$text_color);imagepng($im);}else{echo"创建图片失败";}?>火龙果整理uml.org.cn例3:图片缩略图例子index.php:<?php$img=imagecreatefromjpeg("Royale.jpe

g");$width=imagesx($img);$height=imagesy($img);$MAX_WIDTH=150;$MAX_HEIGHT=150;$scale=min($MAX_WIDTH/$width,$MAX_HEIGHT/$height);if($scale<1)

{$new_width=floor($scale*$width);$new_height=floor($scale*$height);$tmp_img=imagecreatetruecolor($new_width,$new_hei

ght);imagecopyresized($tmp_img,$img,0,0,0,0,$new_width,$new_height,$width,$height);imagedestroy($img);$img=$tmp_img;}imagestring($im

g,5,2,2,"abcd",imagecolorallocate($img,70,70,70));header("Content-type:image/jpeg");imagejpeg($img);?>火龙果整理uml.org.cn例4:图片水印例子index.php:<?p

hp$water_im=imagecreatefromgif("blue.gif");$im=imagecreatefromjpeg("Royale.jpeg");imagecopy($im,$water_im,100,100,0,0,20,2

0);imagedestroy($water_im);imagejpeg($im);?>文本水印例子index.php:<?php$im=imagecreatefromjpeg("Royale.jpeg");$text_color=imagecolorallocate($

im,90,200,100);//文字颜色imagestring($im,3,50,50,"ASimpleTextString",$text_color);imagejpeg($im);?>火龙果整理uml.org.cn通过本章的学习要求掌握XML文档的基本格式,PHP如

何对XML文档进行操作。13.1XML解析器以及PHP的XML函数库13.1.1XML(eXtensibleMarkupLanguage,可扩展标记语言),是用于标记电子文件使其具有结构性的标记语言。XML根据

SGML(StandardGeneralizedMarkupLanguage,通用标记语言标准)制定出来的,所有XML可以看成是SGML的一部分子集,XML现在已经被广泛应用在互联网的各种领域。XML可以看作是HTML的扩展,在HTML的世界里,数据与数据的显示部分都是被揉合在一起

的,例如<fontcolor=redsize=5>数据</font>,但在XML的世界里,数据与数据的显示是被分开了的,使得XML的数据可以在互联网上传播,但应用不同的显示风格就会得到不同的效果。XML已经被作为

了一种标准,在各种不同的数据库系统之间进行数据交换,因为XML的标准和规范以由W3C组织所认可并推广的。XML不是用来设计网页的,XML是一种数据文档,是一种在万维网应用中的新一代文标标准格式,用于保存应用程

序所用到的各种数据,例如电子商务、图书目录、商品目录、公文电子文件等各种数据;但是未来的网页都会以XML为基础进行开发,因为XML的特性使得XML已经成为了在线和离线数据的所遵循共同语言,但因为XML支持离线数据,所以现在众多在线数据库厂商(如MySQLMSSQLOracle等)都在为自己的数

据库系统增加XML文档数据功能,例如MSSQL就有在IIS中配置SQLXML功能的服务器端工具,并且MSSQL数据库内部已经增加了XML功能。XML的应用不仅体现在数据存储上,火龙果整理uml.org.cn它的另外一个应用是:在以

前,网页中某个版块如果要提取服务器端数据,必须要刷新整个页面才能完成,但当使用了XML技术之后,我们用不着刷新整个页面就可以更新页面中某个版块的显示内容,提高了B/S软件的性能。一个XML文档:<?xmlversion="1.0"encodin

g="gb2312"?><docroot><book><nameauthor="李四"type="第三版">ASP入门与提高</name><publisher>清华大学出版社</publisher><publishdate>2003-6-17</publishda

te><pricetype="RMB">38</price></book><book><nameauthor="王五"type="第二版">PHP入门与提高</name><publisher>清华大学出版社</publisher><publishdate>

2003-7-21</publishdate><pricetype="RMB">29</price></book>火龙果整理uml.org.cn<book><nameauthor="张三"type="第四版">JSP入门与提高<

/name><publisher>机械出版社</publisher><publishdate>2002-3-18</publishdate><pricetype="RMB">31</price></book><book><nameauthor="李四"ty

pe="第一版">ASP.NET入门与提高</name><publisher>电子出版社</publisher><publishdate>2003-12-20</publishdate><pricetype="RMB"/></book><

/docroot>在一个XML文档中,第一行必须是<?xmlversion="1.0"encoding="gb2312"?>,用于指明本文档格式为XML文档格式,浏览器将按XML格式文档进行处理,version指明XML的版本,目前通常采用的版本为xml1.0标准,e

ncoding指定XML文档的字符集,一般为utf-8(unicode)或gb2312(中文)字符集。火龙果整理uml.org.cn在一个XML文档中必须也只能有一个文档根标记(根元素),上例中为<docroot></d

ocroot>。在XML文档中所有标记必须有结束标记,否则XML文档为非法文档,如果一个标记为空标记,必须在标记内以/结束如上例中的:<pricetype="RMB"/>。在XML中每一个标记我们称之为一个元素,

元素可以有属性,如<pricetype="RMB"/>中的price元素的属性有type属性。上例表示了几本书的有关信息,其中在docroot根元素中,有多个book元素,每一个book元素表示了一本书的相关信息:如nam

e元素表示了书名,name元素中的author属性表示了该书的作者,type属性表示了该书的出版次数;publisher元素表示了书的出版社;publishdate元素表示了书的出版日期;price元素表示了书的价格,price元素的type

属性表示了价格所用的币制。火龙果整理uml.org.cn13.1.2XML解析器-完成数据的分析及数据的提取功能1、基于“树”的XML解析器(DOM解析器):这种模式解析器一次分析整个XML文档,并把分析结果保存到一个树状结构中,并且XML提供了一个基于DOM

(DocumentObjectModel)文档对象模型的接口对这颗“树”进行分析与处理。2、基于事件的XML解析器(Expad解析器):这种模式解析器把XML文档看成是一系列事件组成的。每发生一个事件就调用一个相应的事件回调函数来处理。这种解

析器从文档的开始一直扫描到结束,对每个事件做处理。事件主要包括标记开始,标记结束,数据处理开始等。例如,下面的标记相对应的事件:<test>//标记开始事件testbegins…//数据处理开始事件</test>//标记结束事件基于事件的XM

L解析器是比较低级的XML处理器,但它非常灵活,且不会一次性将XML读到内存,所以消耗的资源较少,比DOM处理器快得多。火龙果整理uml.org.cn13.1.3PHP的XML函数库Expat解析器相关函数:1、xml_parser_cr

eate-初始化XML解析器格式:intxml_parser_create(string[encoding])本函式用来初始化一个新的XML解析器。参数encoding可省略,为XML使用的字元集,内定值为ISO-8859-1,其它尚有US-ASCII、UTF

-8二种。成功则传回parser(解析器)句柄供其它函式使用,失败则传回false值。2、xml_set_element_handler-设置xml开始和结束标记事件的回调函数格式:booleanxml_set_element_han

dler(intparser,stringstartElementHandler,stringendElementHandler)该函数用于设定XML开始标记和结束标记的回调函数。其中parser参数为

xml_parser_create返回的XML解析器句柄,startElementHandler和endElementHandler参数分别为标记开始和标记结束时的回调函数。这两个回调函数定义的格式必须为如下格式:funct

ionstartElementHandler(intparser,stringname,arrayattribs){//你自己处理的代码}火龙果整理uml.org.cn其中第一个参数parser为XML解析器句柄(即用xml_parser_create返回的XML

解析器句柄),第二个参数name为XML元素的名称;第三个参数attribs,为包含这个元素的所有属性的关联数组,数组元素的下标(索引)为属性名称,数组元素的值为属性的值,因此你可以在上面的函数通过a

ttribs数组取出对应元素的各个属性的值。functionendElementHandler(intparser,stringname){//你自己处理的代码}其中第一个参数parser为XML解析器句柄(即用xml_parser_create返回的XML解析器句柄),第二

个参数name为XML元素的名称。使用方法:先定义这样的两个函数,然后通过xm_set_element_handler设置这两个回调函数。3、xml_set_character_data_handler-设置数据处理即读取元素数据的回调函

数格式:booleanxml_set_character_data_handler(intparser,stringhandler)本函数用于设置数据处理即读取元素数据的回调函数,handler即数据处理的回调函数。参数parser为解析器句柄。若无错误

则返回true,否则返回false。数据处理的回调函数格式为:functioncharacterData(intparser,stringData){}其中parser为解析器句柄,Data为元素中保存的数据内容。火龙果

整理uml.org.cn4、xml_parse-解析XML文档格式:booleanxml_parse(intparser,stringdata,int[isFinal])本函式用来解析XML格式的文档资料。参数parser为XML解

析器句柄。data参数中包含了XML解析器将要处理的内容,可以通过改变data参数的内容多次调用这个函数来处理XML文档。参数isFinal可省略,若设为true那么就是最后一次调用xml_parse()函数。若无错误则返回true,否则返回f

alse。5、xml_parser_free-释放XML解析器格式:booleanxml_parser_free(intparser)本函式用来释放目前XML解析器所使用的内存。参数parser为解析器句柄。若没有错误则返回true,否则返回fal

se。使用完parser解析器句柄后应该利用该函数释放parser解析器所占用的资源。13.1.4事件回调函数和错误信息1、标记开始的回调函数:格式:startElementHandler(intparser,stringname,arra

yattribs)当XML解析器在发现name标记开始时立即调用该函数。2、标记结束的回调函数:格式:endElementHandler(intparser,stringname)当XML解析器在发现name标记结束时立即调用该函数。火龙果整理uml.o

rg.cn3、处理标记内部数据的回调函数:格式:handler(intparser,stringdata)当XML解析器在读取XML标记(元素)中内容时所调用的函数,parser为解析器句柄,data为XML标记(元素)的内容。4、处理指令的回

调函数:格式:handler(intparser,stringtargetstringdata)在XML解析器发现XML文档内部包含<?targetdata?>格式的指令时调用该函数5、默认处理回调函数:格式:handler(intparser,stringdat

a)当没有其他回调函数可以处理的事件发生时调用的函数6、外部入口处理的回调函数:格式:inthandler(intparser,stringopenEntityNames,stringbase,stringsystemId,stringpublicId)当XML文档由外

部XML引用时调用的函数7、xml_get_error_code-获取错误代码格式:intxml_get_error_code(intparser)本函数可取得XML在处理时的错误代码。参数parser为

XML解析剖句柄。若parser有错则传回false值,否则就传回错误代码(如XML_ERROR_BINARY_ENTITY_REF....等等)。火龙果整理uml.org.cn8、xml_error_string-获取错误信息格式:stringxml_error_stri

ng(intcode)本函数可取得XML在处理时的错误信息。参数code为解析错误代码。若有错误,返回值为code代码的文字描述字串。13.2读取XML文件的标记读取下面的test.xml文档标记,并进行缩进,test.xml文档内容

为:<?xmlversion="1.0"encoding="gb2312"?><CONTENTS><HEADER><TITLECONTENT>transfered</TITLECONTENT></HEAD

ER><OBJECT><LINE><CELL>functionname</CELL><CELL>explanation</CELL></LINE><LINE><CELL>echo</CELL><CELL>returnthecontentofavaribale</CELL>

</LINE></OBJECT></CONTENTS>火龙果整理uml.org.cnindex.php:<pre><?php$file="test.xml";$depth=array();functionstartElement($parser,$name

,$attrs){global$depth;for($i=0;$i<$depth[$parser];$i++){print"";}print"$name\n";$depth[$parser]++;}functionendElement($parser,$name){gl

obal$depth;$depth[$parser]--;}火龙果整理uml.org.cn$xml_parser=xml_parser_create();xml_set_element_handler($xml_parser,"startElement","endElement");i

f(!$fp=fopen($file,"r")){die("不能打开XML文件");}while($data=fread($fp,4096)){if(!xml_parse($xml_parser,$data,feof($fp))){die(spr

intf("XML错误:%satline$d",xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));}}xml_p

arser_free($xml_parser);?></pre>火龙果整理uml.org.cn13.3处理、重新输出XML文件中的内容13.3.1返回HTML代码返回test.xml的HTML代码:

index.php内容:<?php$file="test.xml";$map_array=array("HEADER"=>"HEAD","TITLECONTENT"=>"TITLE","CONTENTS"=>"BORDY","OBJECT"=>"T

ABLEBORDER='1'","LINE"=>"TR","CELL"=>"TD");functionstartElement($parser,$name,$attrs){global$map_array;if($htmltag=$map_array[$name]){print"<$htmltag

>";}}火龙果整理uml.org.cnfunctionendElement($parser,$name){global$map_array;if($htmltag=$map_array[$name]){print"</$htmltag>";}}fu

nctioncharacterData($parser,$data){print$data;}$xml_parser=xml_parser_create();xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,true);xml_

set_element_handler($xml_parser,"startElement","endElement");xml_set_character_data_handler($xml_parser,"characterData")

;火龙果整理uml.org.cnif(!$fp=fopen($file,"r")){die("不能打开XML文件");}while($data=fread($fp,4096)){if(!xml_parse($xml_parser,$data,feof($fp))){di

e(sprintf("XML错误:%satline$d",xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));}}xml_parser_free($x

ml_parser);?>火龙果整理uml.org.cn13.3.2取XML的内容进行输出test.xml内容:<?xmlversion="1.0"encoding="gb2312"?><docroot><b

ook><nameauthor="李四"type="第三版">ASP入门与提高</name><publisher>清华大学出版社</publisher><publishdate>2003-6-17</publishdate><pricetype="RMB">38</price><

/book><book><nameauthor="王五"type="第二版">PHP入门与提高</name><publisher>清华大学出版社</publisher><publishdate>2003-7-21</publishdate><pricetype

="RMB">29</price></book>火龙果整理uml.org.cn<book><nameauthor="张三"type="第四版">JSP入门与提高</name><publisher>机械出版社</publisher><publishdate>2002-3-18</publ

ishdate><pricetype="RMB">31</price></book><book><nameauthor="李四"type="第一版">ASP.NET入门与提高</name><publisher>电子出版社</publisher><publishd

ate>2003-12-20</publishdate><pricetype="RMB"/></book></docroot>火龙果整理uml.org.cnindex.php的内容:<?phpheader("Content-Type:text/html;charset=

utf-8");$file="test.xml";functionstartElement($parser,$name,$attrs){switch(strtolower($name)){case"docroot":print"<table>";break;case"b

ook":print"<tr>";break;case"name"://print"<tdtitle=\"author:".$attrs[0]."publistimes:".$attrs["type"]."\">";print"<td>";break;case"publisher":p

rint"<td>";break;火龙果整理uml.org.cncase"publishdate":print"<td>";break;case"price"://print"<tdtitle=\"t

ype:".$attrs["type"]."\">";print"<td>";break;}}functionendElement($parser,$name){switch(strtolower($name)){case"docroot":print"<

/table>";break;case"book":print"</tr>";break;case"name":case"publisher":火龙果整理uml.org.cncase"publishdate":case"price":print"

</td>";break;}}functioncharacterData($parser,$data){print$data;}$xml_parser=xml_parser_create();xml_parser_set_option($xml_parse

r,XML_OPTION_CASE_FOLDING,true);xml_set_element_handler($xml_parser,"startElement","endElement");xml_set_chara

cter_data_handler($xml_parser,"characterData");if(!$fp=fopen($file,"r")){die("不能打开XML文件");}火龙果整理uml.org.cnwhile($data=fread($fp,4096)){if(

!xml_parse($xml_parser,$data,feof($fp))){die(sprintf("XML错误:%satline$d",xml_error_string(xml_get_error_code($xml_parser)),x

ml_get_current_line_number($xml_parser)));}}xml_parser_free($xml_parser);?>火龙果整理uml.org.cn实例一:留言簿MySQL数据库设计:数据库名GuestBookData数据表:createtablegu

estbook(idintauto_incrementprimarykey,hidetinyintdefault0,contenttext,reply_contenttext,reply_timevarc

har(20),usernamevarchar(20),sexvarchar(2),facevarchar(50),emotevarchar(50),emailvarchar(100),weburlvarchar(100),oicqvarchar(20),createipvarchar(20

),createtimevarchar(20));火龙果整理uml.org.cn字段说明:id留言唯一标志hide如果为1表示只允许管理员查看,为0表示所有人都可以查看content留言内容reply_content管理员回

复内容reply_time管理员回复时间username留言人姓名sex留言人性别(男,女)face头像(对应在images/face文件夹中,保存文件名)emote表情(对应在images/emote文件夹中,保存文件名)email电子邮箱weburl个人主页(http://格

式)oicqQQ号码createip留言IP地址createtime留言时间火龙果整理uml.org.cn实例二:新闻管理系统火龙果整理uml.org.cn实例三:论坛系统

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?