




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
php中错误和异常处理的机制如果没有错误处理机制怎样?上面的代码没有处理错误,应当这样写程序更加健壮.解释了一下绝对路径和相对路径php处理错误的三种方法1. 使用简单的die 语句使用方法如下 :(1)if(!file_exists(aaa.txt) die(文件不存在); else /打开文件操作 echo ok;(2) 更简单的方法file_exists(aaa.txt) or die(文件不存在!);5分钟前 上传下载附件 (53.76 KB) 用户自定义错误处理器在php中对错误有不同的级别区分:2分钟前 上传下载附件 (48.24 KB) 案例入门 :?php /定义了一个函数(我用于处理错误的函数) function my_error($errno,$errmes) echo $errno; echo 错误信息是:; exit(); /改写set_error_handler处理器 /下面这句话的含义是 : 如果出现了 E_WARNING这个级别的错误,就去调用my_error函数. set_error_handler(my_error,E_WARNING); $fp=fopen(aa.txt,r); ?原理图:2分钟前 上传下载附件 (45.49 KB) 错误触发器需求: 有一段代码: 如果接受一个年龄, 如果年龄输入120, 我认为就是一一个错误./传统的方法if($age120) echo “年龄过大”; exit();/需求,输入一个薪水,如果大于10000,我认为有是错误.if($salary10000) echo “薪水多”; exit();1现在我们可以使用自定义错误触发器来完成!快速入门案例:/自定义错误函数 functionmy_error3($errno,$errmes) echo 错误号是:.$errno; function my_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(); echo ok;原理图 php错误日志保存保存错误日志的用处是便于,后续分析.基本方法是使用 error_log来实现.基本用法是:/自定义错误函数 functionmy_error3($errno,$errmes) $err_info=错误号是:.$errno.-.$errmes; echo $err_info; /把这个错误信息保存 /rn 表示向文件输入一个回车换行 / 表示向网页输出一个回车换行 error_log($err_info.rn,3,d:/myerr.txt); 现在我们要把时间保存下来. php中处理异常 基本语法try /可能出现错误或是异常的代码catch(Exception e) /对异常处理/1. 自己处理/2. 自己不处理,将其抛出.思考一个问题?怎样可以去有效的控制多条可能出现错误或是异常的代码?程序 try/ 第一句话 o/./.catch(Exception $e) /处理根据处理现在我们看看使用异常处理机制,怎样做?!快速入门案例:/我们使用异常机制 try addUser(shunping); updateUser(xxx); /catch 捕获Exception 是异常类(是php定义好一个类) catch(Exception $e) /echo 失败信息 =.$e-getMessage(); throw $e; function addUser($username) if($username=shunping) /添加ok else /添加error /抛出异常. throw new Exception(添加失败); function updateUser($username) if($username=xiaoming) /正常修改 else throw new Exception(修改失败); 异常使用的注意事项 :通过上面的案例,我们可以看出,使用try /代码catch(Exception $e) /对异常处理这种方式,可以更有效的控制错误.所以在开发中大量的使用.1. 当捕获到一个异常后,try 块里的后续代码不继续执行.2. 如果有一个异常发生,但是你没有catch 捕获,则提示一个Uncatched Exception.(系统.)3. 当catch一个异常,你可以处理,也可以不处理,不处理就可以throw new Exception(”信息”);代码:try a2(hello); catch(Exception $e) /获取. /echo $e-getMesage(); /可以继续抛出,这时将会启动php默认的异常处理器来处理 /你可以自己定义一个顶级异常处理. throw $e; 4. 你可以自定义异常类class MyException extends Exception 6. 使用多个 catch 代码块可以捕获不同种类的异常try /代码. /第一句话 /第二句话catch(PDOException $e) /catch(Exception $e)|7. 也可简单使用 Exception 捕获代码说明: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.html HTTP/1.1 【表示发送的get请求, 请求资源是/test/hello.html 】Accept: */* 【表示客户端可以接受任何数据】Referer: http:/localhost:80/test/abc.html 【1.表示我是从哪里来】Accept-Language: zh-cn 【页面语言】User-Agent: Mozilla/4.0【告诉服务我的浏览器的内核,操作系统】Accept-Encoding: gzip, deflate 【表示接受什么样的数据压缩格式.】Host: localhost:80 【主机:80】Connection: Keep-Alive 【表示不要立即断掉我们的请求.】现在我们想知道,客户端究竟给服务器发送的内容如果我这个http1.php. 不希望 3 这个用户访问.在服务器端,我们可以通过$_SERVER来获取我们需要的信息重要的有:HTTP_HOST REMOTE_ADDR 访问该页面的ipDOCUMENT_ROOT可以获取 apche的主目录REQUEST_URI 可以获取 请求的资源名 http请求有两种主要的方式get / post get 和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.1 200 OK 【200 ok 表示客户端请求成功】Server: Microsoft-IIS/5.0 【表示告诉浏览器 服务器的情况 】Date: Thu, 13 Jul 2000 05:46:53 GMT 【告诉浏览器 请求的页面 的时间 】Content-Length: 2291 【表示回送的数据有 2291个字节】Content-Type: text/html 【文档类型】 Cache-control: private 【缓存】hello 对状态码的说明1分钟前 上传下载附件 (42.31 KB) 举例说明Http响应的实际应用302状态码的使用 比如我们现在希望访问a.php 页面,让其自动重定向到b.php基本用法使用细节: 302 状态码也可以让其跳转到外网去 404 码404 最常见的状态码404一般说就是该页面不存在 304码使用304 码主要是告诉浏览器,请求的资源不需要更新?php echo “hello”; echo “?上面说明了 304的具体用法HTTP/1.1 304 Not ModifiedDate: Tue, 13 Sep 2011 02:10:38 GMTServer: Apache/2.2.17 (Win32) PHP/5.3.5Connection: Keep-AliveKeep-Alive: timeout=5, max=99ETag: 12d00000000572c-6f69-3e1d849f35000下面是比较详细的一个Http响应 Location: /index.php Server:apacheContent-Encoding: gzip 【内容编码支持gzip压缩算法】Content-Length: 80 【返回数据大小】Content-Language: zh-cn Content-Type: text/html; charset=GB2312 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【表示浏览器请求资源,最新时间】Refresh: 1;url=【告诉浏览器,间隔1秒,重定向到 baidu】Content-Disposition: attachment; filename=aaa.zipTransfer-Encoding: chunkedSet-Cookie:SS=Q0=5Lb_nQ; path=/search【讲Cookie】Expires: -1Cache-Control: no-cachePragma: no-cache Connection: close/Keep-Alive Date: Tue, 11 Jul 2000 18:23:51 GMT演示如何通过Http响应,控制浏览器间隔一定时间去跳转.演示如何通过Http响应控制页面缓存,在默认情况下,浏览器会缓存页面.更新时间:2013年02月26日15时35分 来源:演示Http实际应用的 文件下载文件下载的原理.1分钟前 上传下载附件 (47.46 KB) 代码如下:30) echo window.alert(过大); return ; /返回的文件 header(Content-type: application/octet-stream); /按照字节大小返回 header(Accept-Ranges: bytes); /返回文件大小 header(Accept-Length: $file_size); /这里客户端的弹出对话框,对应的文件名 header(Content-Disposition: attachment; filename=.$file_name); /向客户端回送数据 $buffer=1024; /为了下载的安全,我们最好做一个文件字节读取计数器 $file_count=0; /这句话用于判断文件是否结束 while(!feof($fp) & ($file_size-$file_count0) ) $file_data=fread($fp,$buffer); /统计读了多少个字节 $file_count+=$buffer; /把部分数据回送给浏览器; echo $file_data; /关闭文件 fclose($fp); /测试函数是否可用 down_file(顺平.jpg,/http/down/);?上机的小练习: php数据库编程说php有三种方式来操作我们的mysql数据库 mysql扩展库 mysqli扩展库 pdo mysql扩展库和mysql数据库的区别1.mysql数据库是用于存放数据.2.mysql数据库的三层结构示意图:58秒前 上传下载附件 (44.61 KB) 3. mysql扩展库是一堆函数.是PHP设计者提供给程序员用于完成对mysql数据库的各种操作(CRUD). 使用php的mysql扩展库完成对mysql操作的案例 编写一个程序,这个程序从user1表中读取数据,并打印在网页中。1. 环境搭建 1.1 启用mysql扩展库在php.ini文件中去配置mysql扩展库extension=php_mysql.dll可以通过 可以查看当前php支持什么扩展库1.2 创建一张用户表,供我们使用create table user1(id int primary key auto_increment,name varchar(32) not null,password varchar(64) not null,email varchar(128) not null,age tinyint unsigned not null)预先加入数据(开发中,我们肯定是通过界面操作)insert into user1 (name,password,email,age) values (zs,md5(123456),,30);insert into user1 (name,password,email,age) values (ls,md5(123456),,40);insert into user1 (name,password,email,age) values (ww,md5(123456),,50);insert into user1 (name,password,email,age) values (顺平,md5(123456),,50);1. 编写php程序完成对用户表的显示代码 string(1) 1 1= string(2) zs 2= string(32) e10adc3949ba59abbe56e057f20f883e 3= string(11) 4= string(2) 30 /mysql_fetch_assoc mysql_fetch_array while($row=mysql_fetch_row($res) /第一种取法是 同 $row$i /echo $row0-$row1-$row2; /echo ; /var_dump($row); /第二种取法 foreach($row as $key = $val) echo -$val; echo ; /6. 释放资源,关闭连接(必须) mysql_free_result($res); /这句话可以没有,建议有./ mysql_close($conn);?细节 :1. 使用完 $res 结果集后,一定要及时的释放资源.2. mysql_close() 如果没有的话,系统也会自动的关闭3. 从$res获取行数据的时候,处理 mysql_fetch_row($res),还有三个方法.分别是mysql_fetch_row($res),返回一个索引的数组(推荐.)mysql_fetch_assoc($res),返回一个关联数组mysql_fetch_array($res),返回索引数组和关联数组 (两套)mysql_fetch_object($res) ,把一行数据,当做一个对象返回.演示通过mysql扩展库,进行dml操作代码:0) echo 操作成功; else echo 没有影响到行数; mysql_close($conn);?从上面的两个文件看出,代码的复用性和可维护性不高,PHP编程中,通常是将对数据库的操作,封装成一个工具类SqlTool conn=mysql_connect($this-host,$this-user,$this-password); if(!$this-conn) die(连接数据库失败.mysql_error(); mysql_select_db($this-db,$this-conn); mysql_query(set names utf8); /方法. / 完成select dql publicfunction execute_dql($sql) $res=mysql_query($sql,$this-conn) or die(mysql_error(); return $res; /完成 update,delete ,insert dml publicfunction execute_dml($sql) $b=mysql_query($sql,$this-conn); /echo 添加的id=.mysql_insert_id($this-conn); if(!$b) return 0;/失败 else if(mysql_affected_rows($this-conn)0) return 1;/表示成功 else return 2;/表示没有行数影响. ?请编写一个函数,可以接受一个表名,然后把表的头和记录显示在网页/请编写一个函数,可以接受一个表名,然后把表的头和记录显示在网页 function show_tab_info($table_name) $conn=mysql_connect(localhost,root,root); if(!$conn) die(连接失败.mysql_error(); echo hello; mysql_select_db(test,$conn); mysql_query(set names utf8); /$sql=select * from $table_name; $sql=desc $table_name; $res=mysql_query($sql,$conn); /我要知道总有多少行,和多少列 $rows=mysql_affected_rows($conn); $colums=mysql_num_fields($res); echo $rows=$colums; echo ; /表头 for($i=0;$i$colums;$i+) $field_name=mysql_field_name($res,$i); echo $field_name; echo ; while($row=mysql_fetch_row($res) echo ; for($i=0;$i$colums;$i+) echo $row$i; echo ; echo ; /* while($field_info=mysql_fetch_field($res) echo.$field_info-name; */ /var_dump($field_info); show_tab_info(user1); 使用php 的mysqli扩展库去操作mysql数据库简单介绍:mysqli (mysql improve mysql扩展库的增强版)mysql 扩展库 和mysqli 扩展库的比较1. mysqli 的稳定性和安全性,效率有所提高2. mysqi 支持面向对象编程 ,同时 mysqli 扩展库考虑到php老程序员,提供面向过程的编程风格.mysqli 有两套编程风格:1分钟前 上传下载附件 (33.42 KB) 用appserver php版本5.2.x$mysqli=new MySQLi(“localhost”,”root”,”roo3t”,”test”);/安照变相对象的方式if($mysqli-connect_error) die($mysqli-connect_error);/ 考虑兼容低版本if(mysqli_connect_error() die(“连接error”. mysqli_connect_error() mysqli 编程的快速入门编写一个程序,这个程序从user1表中读取数据,并打印在网页中。(使用mysqli完成.)1. 先使用mysqli面向对象的风格,完成案例 1.1. 配置php.ini 文件让php支持mysqli扩展库extension=php_mysqli.dll1.2 建库,建表.这里我们使用原来的user1表.1.3 编写代码connect_error) die(连接失败.$mysqli-connect_error); /2. 操作数据库(发送sql) $sql=select * from user1; /$res 是结果集.mysqli result $res=$mysqli-query(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届新疆伊犁州奎屯一中 化学高二上期中考试试题含解析
- 家电公司合同管理办法
- 家电公司战略风险管理细则
- 湖南省浏阳一中、醴陵一中2026届化学高一上期末达标检测模拟试题含解析
- 22.2.1直接开平方法和因式分解法(教学课件)数学华东师大版九年级上册
- 基础卷-2023年小升初数学模拟卷二(苏教版)答案解析
- 2022年河南省开封市高中高三下学期5月三模英语试题
- 保安手册掌握要点课件
- 机关薪酬方案(3篇)
- 浙江宁波市2026届高三化学第一学期期末复习检测试题含解析
- (2025年标准)分次支付协议书
- 2025年保税区面试题目及答案
- 乡镇网络安全知识培训课件
- 驾驶员安全培训考试试题及答案
- 《礼仪规范教程》 课件 概述篇 以礼相待 第一课 礼仪的概述
- 2025年新疆焊工理论考试题库
- 2025年工会考试真题附答案
- 财产行为税法培训课件
- 国际压力性损伤-溃疡预防和治疗临床指南(2025年版)解读
- 机械制造技术基础(课程精完整版)课件
- 护士注册健康体检表下载【可直接打印版本】
评论
0/150
提交评论