PHP入门第8章PHP与Web页交互.ppt

上传人:sccc 文档编号:5298480 上传时间:2023-06-23 格式:PPT 页数:27 大小:550.51KB
返回 下载 相关 举报
PHP入门第8章PHP与Web页交互.ppt_第1页
第1页 / 共27页
PHP入门第8章PHP与Web页交互.ppt_第2页
第2页 / 共27页
PHP入门第8章PHP与Web页交互.ppt_第3页
第3页 / 共27页
PHP入门第8章PHP与Web页交互.ppt_第4页
第4页 / 共27页
PHP入门第8章PHP与Web页交互.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《PHP入门第8章PHP与Web页交互.ppt》由会员分享,可在线阅读,更多相关《PHP入门第8章PHP与Web页交互.ppt(27页珍藏版)》请在三一办公上搜索。

1、变量,这里的变量不是PHP脚本中的普通变量,而是PHP脚本中获取服务器环境信息,请求信息(包括表单参数和cookie)的方法。通常把这些信息统称为EGPCS(environment、GET、POST、cookies、server)。这里主要讲解了如何获取这些变量的值,以及在php.ini文件中有关这些变量的设置。如果php.ini文件中的register_globals选项被启用,PHP就会为第一个表单参数、请求信息服务器环境创建一个独立的全局变量。这个功能非常方便,它可以让浏览器为程序初始化任何变量。但这个功能也非常危险。这一点将在后面的章节中介绍。如果忽略register_globals的

2、设置,PHP将创建6个包含EGPCS信息的全局数组,通过它们获取EGPCS传递的数据。,变量,$_COOKIE:获取COOKIE中传递的所有cookie值,数组的键名是cookie名称。$_POST:获取POST请求传递的参数,数组的键名是表单参数的名称。$_GET:获取GET请求传递的参数值,数组的键名是表单参数的名称$_FILES:获取上传文件的所有信息。$_SERVER:获取服务器的相关信息.$_ENV:获取环境变量的值,键名是环境变量的名称。以上这些变量不但是全局的,而且在函数的定义中也是可见的。$_REQUEST数组也由PHP自动生成,包含了$_GET,$_POST,$_COOKIE

3、三个数组的所有元素。PHP还会创建一个$_SERVERPHP_SELF的变量,用于存放当前脚本的路径和名称(相对于文档根目录,例如/08/stat.php)。,表单处理,表单处理包括:方法(Method)对参数进行自动引号处理 自处理页面 粘性表单多值参数粘性多值参数文件上传表单验证,表单处理,方法 客户端可以用两种HTTP方法向服务器传送表单数据:GET和POST。采用哪种方法是由表单标签()中的method属性所指定的。注意:理论上说在HTML中method是不区分大小写的,但是实际上有些浏览器要求method为大写。GET方法:一个GET请求把表单的参数编码成URL形式,称为查询字符串(

4、query string):/path/to/index.php?subject=despicable&length=3 POST方法:一个POST提求则通过HTTP请求的主体来传递表单参数,不需要考虑URL。,表单处理,GET方法与POST方法的区别 GET和POST方法的最明显区别是URL行。因为GET请求的所有表单参数都编码在URL中,用户可以把一个GET请求加入浏览器收藏夹,而对POST请求却无法这样做。HTTP规范指明GET请求是幂等的(idempotent)。即对于一个特定URL的GET请求(包含表单参数),与对应于这一特定URL的两个或多个GET请求是一样的。因此,Web浏览器可

5、以把GET请求得到的响应页面缓存起来。这是因为不管页面被请求了多少次,响应页面都是不变的。正因为幂等性,GET请求中用于那些响应页面永不改变的性况,例如将一个单词分解成小块,或者对数字进行乘法运算。,表单处理,GET方法与POST方法的区别 POST请求不具幂等性。这意味着它们无法被缓存,在每次刷新页面时,都会重新连接服务器。显示或者刷新页面时,你可能会看到浏览器提示“Repost form data?(重新发送表单数据)”。所以POST适用于响应内容可能会随时间改变的情况,例如:显示购物车的内容,或者在一个论坛中显示当前主题。现实中,幂等性常常被忽略。目前浏览器的缓存功能都很差,并且“刷新”

6、按钮很容易被用户点到,所以程序员通常只考虑是否想将参数显示在浏览器的URL地址栏上,如果不想显示,就用POST方法。但你要记住,在服务器的响应页面可能会变化的情况下(例如下订单或者更新数据库),不要使用GET方法。,表单处理,对参数进行自动引号处理 如果php.ini中的magic_quotes_gpc选项启用,那么PHP将在所有cookie数据以及GET和POST参数上自动调用addslashes()函数。这使得在数据库查询中使用表单参数变得简单,但同时也对那些没有在数据库查询中使用的表单参数造成了麻烦,因为这需要在单引号、双引号、反斜杆和空字节等前面添加上反斜杆以进行转义。例如,在文本框中

7、输入“PHPMRSOFT”,并单击提交按钮,你就会发现被分块的字符串其实是“PHPMRSOFT”。这就是magic_quotes_gpc的作用。,表单处理,为了处理用户输入的字符串,可以禁用php.ini中的magic_quotes_gpc选项或者对$_GET、$_POST、和$_COOKIES使用stripslashes()函数进行转义还原。其方法如下:$value=ini_get(magic_quotes_gpc)?stripslashes($_GETword):$_GETword;如果需要处理大量字符串,还可以封装一个自定义函数:function raw_param($name)retu

8、rn ini_get(magic_quotes_gpc)?stripslashes($_GET$name):$_GET$name;,表单处理,自处理页面 所谓自处理页面,就是一个PHP页面能同时用来生成表单和处理表单。实现此功能有两种方法:第一种方法,应用$_SERVERREQUEST_METHOD获取表单中method的值,如果它的值为GET,则生成表单;如果它的值为POST则处理表单。第二种方法,通过isset()函数判断指定的参数是否被创建,如果存在则执行处理表单的操作,否则执行生成表单的操作。,表单处理,粘性表单 很多网站使用一种称为“粘性表单”(sticky form)的技术。用这种

9、技术,设置一个查询表单的默认值为先前查询的值。例如:如果在百度(http:/)上查询“明日科技”,则在结果页面的顶端的另一个查询文本框中,包含先前的查询关键字“明日科技”。如果将查询的关键字改为“明日科技 编程词典”,那么只要简单地在后面补充即可。这就是粘性表单。,表单处理,多值参数 用HTML中的select标签创建选择列表,允许用户进行多重选择。为了确保PHP识别浏览器传递来的多个值,需要在HTML表单的字段名后加上“”,例如:CC+PHPPer1 现在,当用户提交表单时,$_POSTlanguages包含一个数组而不是一个字符串。这个数组包含用户所选择的值。,表单处理,粘性多值参数 实现

10、多值参数的表单具有粘性的方法:封装一个自定义函数,改编复选框创建的方式,以此来达到表单的粘性功能。自定义函数make_checkbox的语法如下:function make_checkbox($name,$checked,$option)foreach($option as$value=$label)printf(%s,表单处理,自定义函数make_checkbox创建具有相同名称的复选框,其中参数name指定复选框组的名称;参数checked设置复选框默认值;参数option定义复选框的名称和值。,表单处理,文件上传 文件上传,通过表单中的文件域提交上传文件,通过$_FILES数组处理文件,

11、通过is_uploaded_file()函数验证上传文件,通过move_uploaded_file()函数完成文件上传。在PHP中上传文件最大的问题是对超大文件的处理。PHP有两种方法避免出现这种情况:一个硬性限制和一个软性限制。(1)在php.ini中文件中,可以对上传文件进行硬性限制。包括:是否支持上传、上传文件的临时目录、上传文件的大小、指令执行的时间、指令分配的内存空间。(2)在表单中,在文件域之前添加一个名称为MAX_FILE_SIZE的隐藏域,通过它的值可以实现上传文件大小的软限制。,表单处理,$_FILES全局数组为一个多维数组,用于获取通过POST方法上传文件时的相关信息。如果

12、是单文件上传,那麽数组为二维数组,如果是多文件上传,那麽数组为三维数组。$_FILES数组中每个元素的含义,如下所示。$_FILESfilenamename:浏览器提供的文件名。使用价值不大,因为客户端机器上的文件名约定有可能和Web服务器不同(例如:如果客户机为Windows系统,文件名可能为“C:PHOTOSME.JPG”,而服务器为Unix系统,那么这个文件路径没什么意义)$_FILESfilenamesize:已上传文件的大小。单位为字节。如果用户试图上传一个过大的文件,它的大小将被置为0$_FILESfilenametmp_name:文件上传到服务器后,在服务器中的临时文件名$_FI

13、LESfilenametype:从客户端上传的文件类型。例如:“image/gif”,主类型为“图像”,子类型为GIF格式的文件,“text/html”代表文本的HTML文件,表单处理,$_FILESfilenameerror:返回在上传过程中发生错误的错误代号。错误代号有5种,如下所示:0:表示没有任何错误,文件上传成功1:表示上传文件的大小超出了PHP配置文件指令upload_max_filesize选项限制的值2:表示上传文件大小超出了HTML表单中MAX_FILE_SIZE选项所指定的值3:表示文件只被上传了一部分4:表示没有上载任何文件 PHP中应用is_uploaded_file(

14、)函数判断指定的文件是否是通过HTTP POST上传的,如果是则返回TRUE,则可以继续执行文件的上传操作,否则将不能够继续执行。语法:bool is_uploaded_file(string filename)说明:参数filename必须指定类似于$_FILESfilenametmp_name的变量,不可以使用从客户端上传的文件名$_FILESfilenamename,表单处理,通过is_uploaded_file()函数对上传文件进行判断,可以确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如/etc/passwd。PHP中应用move_uploaded_file()函数将文件上传到

15、服务器中指定的位置。如果成功返回TRUE,否则返回FALSE。语法:bool move_uploaded_file(string filename,string destination)说明:参数filename指定上传文件的临时文件名,即$_FILEStmp_name;参数destination指文件上传后保存的新路径和名称。说明:如果参数filename不是合法的上传文件,不会执行任何操作,move_uploaded_file()将返回FALSE。如果参数filename是合法的上传文件,但出于某些原因无法移动,同样也不会执行任何操作,move_uploaded_file()将返回FALS

16、E。此外还会发出一条警告。,表单处理,表单验证 在使用和存储表单提交的数据时,通常需要对这些数据进行验证,其验证的方法很多。首先是在客户端使用JavaScript。但是用户可以禁用JavaScript,甚至使用一个不支持JavaScript的浏览器,所以用这个方法还不够。更为稳妥的方式是通过PHP来完成验证。验证表单元素是否为空,首先通过isset()函数检测变量是否设置;然后通过empty()检测变量是否为空。通过PHP对具体的表单元素值进行验证,如果是单纯的数字、英文字符串、字符串大小写的区分等等,PHP中有相应的函数可以独立完成。但是,如果是对电话号码、Email或者IP地址等进行验证时

17、,必须借助正则表达式的帮助。,设置响应头内容,设置响应头内容有哪些:不同的内容类型重定向设置过期时间HTTP认证文件下载,设置响应头,使用header()函数来设置头部语法:void header(string string,bool replace,int http_response_code)参数说明:String:必要参数。输入的头部信息 replace:可选参数。指明是替换掉前一条类似的标头还是增加一条相同类型的标头。默认为替换,但如果将其设为false则可以强制发送多个同类标头http_response_code:可选参数。强制将HTTP响应代码设为指定值,此参数是php5.3.0以

18、后添加的。注意:设置header一定要在生成主体内容之前完成,这意味着所有header()(或setcookie(),如果你想设置cookie)要在文件的最前面,甚至在标签之前,不同的内容类型,Content-Type头指定被返回文档的类型。它通常是“text/html”,指明它是一个HTML文档,但还有其他一些有用的文档类型。例如“text/plain”让浏览器强制性地将内容当作纯文本来处理。这个类型就类似于自动的“查看源代码”,它在调试时很有用。,重定向,通过header()函数可以向浏览器发送一个新的URL,并让浏览器转向到这个地址。这样的重定向(redirection)操作,只需要通过

19、设置Location头即可。例如,通过header()函数重定向到http:/,其代码如下:header(Location:http:/);重定向操作更倾向于绝对路径,如果提供相对的URL(如“/index.php”),重定向会在服务器内部进行。这种方法很少用,因为浏览器并不知道它得到的页面是否是所请求的。如果在新的文档中存在相对URL,浏览器会将它们解释成相对于所请求的文档,而不是被发送的文档。,设置过期时间,服务器可以显式地通知浏览器文档的过期时间。代理服务器和浏览器缓存在过期之前可保持文件,或提前结束它。重新载入一个被缓存的页面不需要和服务器进行通讯。但是尝试获取一个已经过期的文档就需要

20、与服务器取得联系。为一个文档设置过期时间,应用的是Expires头:header(Expires:Mon,08 Jul 2011 08:08:08 GMT);例如:控制文档在页面生成后的2小时后过期。使用time()和gmstrftime()函数生成过期日期字符串:,HTTP认证,HTTP认证(HTTP authentication)通过请求的header和响应状态来工作。浏览器可以将用户名和密码放在请求的头里发送。如果认证凭证(credential,即指用户名和密码)未发送或者不匹配,服务器将发送一个“401 Unauthorized”响应并通过WWW认证头来确定当前认证的区域(realm)

21、(一个字符串,诸如“Marys Pictures”或“Your Shopping Cart”)。这通常会导致浏览器弹出一个“Enter username and password for”对话框,且该页面会重新请求更新头中的认证凭证 为了用PHP来处理认证,可检查用户名和密码($_SERVER数组中的PHP_AUTE_USER和PHP_AUTH_PW两个元素)并调用header()函数来设置区域,然后发送一个“401 Unauthorized”响应。其关键代码如下:header(WWW-Authenticate:Basic realm=Top Secret Files);header(HTTP

22、/1.0 401 Unauthorized);,HTTP认证,header()函数还可以强制客户端每次访问页面时获取最新资料,而不是使用存在于客户端的缓存。其关键代码如下:header(Expires:Mon,08 Jul 2011 08:08:08 GMT);header(Last-Modified:.gmdate(D,d M Y H:i:s).GMT);header(Cache-Control:no-store,no-cache,must-revalidate);header(Cache-Control:post-check=0,pre-check=0,false);header(Pragma:no-cache);,文件下载,根据服务器返回的头信息,应用header函数可以完成文件的下载操作。其关键代码如下:header(Content-type:application/octet-stream);header(Accept-ranges:bytes);header(Accept-length:.filesize($path);header(ContentDisposition:attachment;filename=.$filename);例如:通过header()函数生成Excel格式的下载文件,其关键代码如下:,Thank you,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号