传智播客 韩顺平 php从入门到精通 79-99讲异常处理与进阶课堂笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

php中错误和异常处理的机制如果没有错误处理机制怎样??php//打开文件-$fp=fopen(“aaa.txt”,”r”);echo“ok”;?上面的代码没有处理错误,应当这样写程序更加健壮.?php//$fp=fopen(aaa.txt,r);//echook;//1.判断文件是否存在.//2.绝对路径和相对路径if(!file_exists(aaa.txt)){echo文件不存在!;exit();}else{$fp=fopen(aaa.txt,r);echo文件打开成功;//....关闭fclose($fp);}?解释了一下绝对路径和相对路径php处理错误的三种方法1.使用简单的die语句使用方法如下:(1)if(!file_exists(aaa.txt)){die(文件不存在);}else{//打开文件操作}echook;(2)更简单的方法file_exists(aaa.txt)ordie(文件不存在!!!);用户自定义错误处理器在php中对错误有不同的级别区分:案例入门:?php//定义了一个函数(我用于处理错误的函数)functionmy_error($errno,$errmes){echofontsize='5'color='red'$errno/fontbr/;echo错误信息是:;exit();}//改写set_error_handler处理器//下面这句话的含义是:如果出现了E_WARNING这个级别的错误,就去调用my_error函数.set_error_handler(my_error,E_WARNING);$fp=fopen(aa.txt,r);?原理图:错误触发器需求:有一段代码:如果接受一个年龄,如果年龄输入120,我认为就是一一个错误.//传统的方法if($age120){echo“年龄过大”;exit();}//需求,输入一个薪水,如果大于10000,我认为有是错误.if($salary10000){echo“薪水多”;exit();}1现在我们可以使用自定义错误触发器来完成!快速入门案例://自定义错误函数functionmy_error3($errno,$errmes){echo错误号是:.$errno;}functionmy_error4($errno,$errmes){echo出大事了.$errno;exit();}//指定E_USER_WARNING错误级别的函数set_error_handler(my_error3,E_USER_WARNING);set_error_handler(my_error4,E_USER_ERROR);$age=700;if($age120){//调用触发器,时候同时指定错误级别.trigger_error(输入年龄过大1,E_USER_ERROR);//exit();}echook;原理图php错误日志保存保存错误日志的用处是便于,后续分析.基本方法是使用error_log来实现.基本用法是://自定义错误函数functionmy_error3($errno,$errmes){$err_info=错误号是:.$errno.--.$errmes;echo$err_info;//把这个错误信息保存//\r\n表示向文件输入一个回车换行//br/表示向网页输出一个回车换行error_log($err_info.\r\n,3,d:/myerr.txt);}现在我们要把时间保存下来.php中处理异常①基本语法try{//可能出现错误或是异常的代码}catch(Exceptione){//对异常处理//1.自己处理//2.自己不处理,将其抛出.}思考一个问题?怎样可以去有效的控制多条可能出现错误或是异常的代码?程序try{//第一句话o//...//....}catch(Exception$e){//处理[根据处理}现在我们看看使用异常处理机制,怎样做?!!!!!!!!!!快速入门案例://我们使用异常机制try{addUser(shunping);updateUser(xxx);}//catch捕获Exception是异常类(是php定义好一个类)catch(Exception$e){//echo失败信息=.$e-getMessage();throw$e;}functionaddUser($username){if($username==shunping){//添加ok}else{//添加error//抛出异常.thrownewException(添加失败);}}functionupdateUser($username){if($username==xiaoming){//正常修改}else{thrownewException(修改失败);}}异常使用的注意事项:通过上面的案例,我们可以看出,使用try{//代码}catch(Exception$e){//对异常处理}这种方式,可以更有效的控制错误.所以在开发中大量的使用.1.当捕获到一个异常后,try{}块里的后续代码不继续执行.2.如果有一个异常发生,但是你没有catch捕获,则提示一个UncatchedException.(系统.)3.当catch一个异常,你可以处理,也可以不处理,不处理就可以thrownewException(”信息”);代码:try{a2(hello);}catch(Exception$e){//获取.//echo$e-getMesage();//可以继续抛出,这时将会启动php默认的异常处理器来处理//你可以自己定义一个顶级异常处理.throw$e;}4.你可以自定义异常类classMyExceptionextendsException{}6.使用多个catch代码块可以捕获不同种类的异常try{//代码....//第一句话//第二句话}catch(PDOException$e){//}catch(Exception$e){|}7.也可简单使用Exception捕获代码说明:?php//定义了一个异常classMyException1extendsException{}classMyException2extendsException{}functionA(){thrownewMyException1(a);}functionB(){thrownewMyException2(b)}functionC(){try{A();//抛出MyException1B();//抛出MyException2}catch(Exception1$e1){$e1-getMessage();}catch(Exception2$e2){$e2-getMesage();}}?请思考问题?try{$i=8/0;}catch(Exception$e){echo“ok”;echo$e-getMessage();}上面的代码并不会执行”ok”,原因是$i=8/0;并没有抛出异常.所以可以看出,能不能catch到异常,要取决于,有没有真的抛出异常.对PHP文件来说php(html、css、javascript、php脚本、flash...),它的不同部分,是在不同的地方(服务端,客户端)执行http协议1.http协议是建立在tcp/ip协议基础上.2.我们的web开发数据的传输都是依赖于http协议.3.http协议全称是超文本传输协议http协议的-http请求(request)基本结构请求行消息头----空行消息体(实体内容)举例:GET/test/hello.htmlHTTP/1.1【表示发送的get请求,请求资源是/test/hello.html】Accept:*/*【表示客户端可以接受任何数据】Referer:【1.表示我是从哪里来】Accept-Language:zh-cn【页面语言】User-Agent:Mozilla/4.0【告诉服务我的浏览器的内核,操作系统】Accept-Encoding:gzip,deflate【表示接受什么样的数据压缩格式.】Host:localhost:80【主机:80】Connection:Keep-Alive【表示不要立即断掉我们的请求.】现在我们想知道,客户端究竟给服务器发送的内容如果我这个http1.php.不希望192.168.1.33这个用户访问.在服务器端,我们可以通过$_SERVER来获取我们需要的信息重要的有:HTTP_HOSTREMOTE_ADDR访问该页面的ipDOCUMENT_ROOT可以获取apche的主目录REQUEST_URI可以获取请求的资源名http请求有两种主要的方式get/postget和post的区别有哪些1.安全性get请求的数据会显示在地址栏上,post请求的数据,放在http协议的消息体2.从可以提交数据的大小看.2.1http协议本身并没有限制数据大小.2.2浏览器在对get和post请求做显示,get请求数据2k+35,post没有显示.3.get请求可以更好的添加到收藏夹.现在我们实际使用一些http请求,完成一个防盗链的练习.☞http请求不是固定,是根据实际情况的,比如REFEER.Http响应(response)简单定义:一个Http响应代表服务器给浏览器回送的数据,同时告诉浏览器应当怎样处理数据.1.基本结构状态行消息头信息--空行实体信息快速入门HTTP/1.1200OK【200ok表示客户端请求成功】Server:Microsoft-IIS/5.0【表示告诉浏览器服务器的情况】Date:Thu,13Jul200005:46:53GMT【告诉浏览器请求的页面的时间】Content-Length:2291【表示回送的数据有2291个字节】Content-Type:text/html【文档类型】Cache-control:private【缓存】hello对状态码的说明举例说明Http响应的实际应用302状态码的使用比如我们现在希望访问a.php页面,让其自动重定向到b.php基本用法使用?php//header(“Location:新的页面”);header(“Location:”);exit();?细节:302状态码也可以让其跳转到外网去404码404最常见的状态码404一般说就是该页面不存在304码使用304码主要是告诉浏览器,请求的资源不需要更新?phpecho“hello”;echo“imgsrc=”Sunset.jpg”width=”100px”“?上面说明了304的具体用法HTTP/1.1304NotModifiedDate:Tue,13Sep201102:10:38GMTServer:Apache/2.2.17(Win32)PHP/5.3.5Connection:Keep-AliveKeep-Alive:timeout=5,max=99ETag:12d00000000572c-6f69-3e1d849f35000下面是比较详细的一个Http响应Location::apacheContent-Encoding:gzip【内容编码支持gzip压缩算法】Content-Length:80【返回数据大小】Content-Language:zh-cnContent-Type:text/html;charset=GB2312Last-Modified:Tue,11Jul200018:23:51GMT【表示浏览器请求资源,最新时间】Refresh:1;url=【告诉浏览器,间隔1秒,重定向到baidu】Content-Disposition:attachment;filename=aaa.zipTransfer-Encodin

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功