仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1760|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之PHP 毛病处置

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:34:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在这里想谈谈自己这六个多月的PHP学习心得,希望对给比我还新的新手们有所帮助,讲的不是很深刻,甚至有的想法可能是错误的,希望不要误导新人才好,大家要有自己的主见。     
  在 PHP 中,默许的毛病处置很复杂。一条动静会被发送到阅读器,这条动静带有文件名、行号和一条描写毛病的动静。
PHP 毛病处置

  在创立剧本和 web 使用法式时,毛病处置是一个主要的局部。假如您的代码短少毛病检测编码,那末法式看上去很不专业,也为平安风险关闭了大门。
  本教程引见了 PHP 中一些最为主要的毛病检测办法。
  咱们将为您解说分歧的毛病处置办法:


  • 复杂的 "die()" 语句
  • 自界说毛病和毛病触发器
  • 毛病呈报
根基的毛病处置:利用 die() 函数

  第一个例子展现了一个翻开文本文件的复杂剧本:
  1. <?php $file=fopen("welcome.txt","r"); ?>
复制代码
假如文件不存在,您会取得相似如许的毛病:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 2
复制代码
为了不用户取得相似下面的毛病动静,咱们在会见文件之前检测该文件是不是存在:
  1. <?php if(!file_exists("welcome.txt")) { die("File not found"); } else { $file=fopen("welcome.txt","r"); } ?>
复制代码
如今,假设文件不存在,您会失掉相似如许的毛病动静:
  1. File not found
复制代码
比起之前的代码,下面的代码更无效,这是因为它采取了一个复杂的毛病处置机制在毛病以后终止了剧本。
  不外,复杂地终止剧本其实不老是得当的体例。让咱们研讨一下用于处置毛病的备选的 PHP 函数。
创立自界说毛病处置器

  创立一个自界说的毛病处置器十分复杂。咱们很复杂地创立了一个公用函数,可以在 PHP 中产生毛病时挪用该函数。
  该函数必需有才能处置最少两个参数 (error level 和 error message),然而可以承受最多五个参数(可选的:file, line-number 和 error context):
语法

  1. error_function(error_level,error_message, error_file,error_line,error_context)
复制代码
参数  描写 error_level  必须。为用户界说的毛病划定毛病呈报级别。必需是一个值数。
  拜见上面的表格:毛病呈报级别。
error_message 必须。为用户界说的毛病划定毛病动静。 error_file 可选。划定毛病在个中产生的文件名。 error_line 可选。划定毛病产生的行号。 error_context 可选。划定一个数组,包括了当毛病产生时在用的每一个变量和它们的值。 毛病呈报级别

  这些毛病呈报级别是毛病处置法式旨在处置的毛病的分歧的类型:
  值  常量  描写 2 E_WARNING 非致命的 run-time 毛病。不暂停剧本履行。 8 E_NOTICE  Run-time 告诉。
  剧本发明能够有毛病产生,但也能够在剧本正常运转时产生。
256 E_USER_ERROR 致命的用户生成的毛病。这相似于法式员利用 PHP 函数 trigger_error() 设置的 E_ERROR。 512 E_USER_WARNING 非致命的用户生成的正告。这相似于法式员利用 PHP 函数 trigger_error() 设置的 E_WARNING。 1024 E_USER_NOTICE 用户生成的告诉。这相似于法式员利用 PHP 函数 trigger_error() 设置的 E_NOTICE。 4096 E_RECOVERABLE_ERROR 可捕捉的致命毛病。相似 E_ERROR,但可被用户界说的处置法式捕捉。(拜见 set_error_handler()) 8191 E_ALL  一切毛病和正告,除级别 E_STRICT 之外。
  (在 PHP 6.0,E_STRICT 是 E_ALL 的一局部)
  如今,让咱们创立一个处置毛病的函数:
  1. function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); }
复制代码
下面的代码是一个复杂的毛病处置函数。当它被触发时,它会获得毛病级别和毛病动静。然后它会输入毛病级别和动静,并终止剧本。
  如今,咱们已创立了一个毛病处置函数,咱们需求肯定在什么时候触发该函数。
Set Error Handler

  PHP 的默许毛病处置法式是内建的毛病处置法式。咱们盘算把下面的函数改革为剧本运转时代的默许毛病处置法式。
  可以修正毛病处置法式,使其仅使用到某些毛病,如许剧本就能够分歧的体例来处置分歧的毛病。不外,在本例中,咱们盘算针对一切毛病来利用咱们的自界说毛病处置法式:
  1. set_error_handler("customError");
复制代码
因为咱们但愿咱们的自界说函数来处置一切毛病,set_error_handler() 仅需求一个参数,可以添加第二个参数来划定毛病级别。
实例

  经由过程测验考试输入不存在的变量,来测试这个毛病处置法式:
  1. <?php //error handler function function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } //set error handler set_error_handler("customError"); //trigger error echo($test); ?>
复制代码
以上代码的输入应当相似如许:
  1. Error: [8] Undefined variable: test
复制代码
触发毛病

  在剧本顶用户输出数据的地位,当用户的输出有效时触发毛病的很有效的。在 PHP 中,这个义务由 trigger_error() 完成。
例子

  在本例中,假如 "test" 变量大于 "1",就会产生毛病:
  1. <?php $test=2; if ($test>1) { trigger_error("Value must be 1 or below"); } ?>
复制代码
以上代码的输入应当相似如许:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 20
复制代码
您可以在剧本中任何地位触发毛病,经由过程添加的第二个参数,您可以划定所触发的毛病级别。
能够的毛病类型:



  • E_USER_ERROR - 致命的用户生成的 run-time 毛病。毛病没法恢复。剧本履行被中止。
  • E_USER_WARNING - 非致命的用户生成的 run-time 正告。剧本履行不被中止。
  • E_USER_NOTICE - 默许。用户生成的 run-time 告诉。剧本发明了能够的毛病,也有能够在剧本运转正常时产生。
例子

  在本例中,假如 "test" 变量大于 "1",则产生 E_USER_WARNING 毛病。假如产生了 E_USER_WARNING,咱们将利用咱们的自界说毛病处置法式并停止剧本:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 21
复制代码
以上代码的输入应当相似如许:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 22
复制代码
如今,咱们已进修了若何创立本人的 error,和若何处分它们,如今咱们研讨一下毛病纪录。
毛病纪录

  默许地,依据在 php.ini 中的 error_log 设置装备摆设,PHP 向办事器的毛病纪录体系或文件发送毛病纪录。经由过程利用 error_log() 函数,您可以向指定的文件或近程目标地发送毛病纪录。
  经由过程电子邮件向您本人发送毛病动静,是一种取得指定毛病的告诉的好举措。
经由过程 E-Mail 发送毛病动静

  鄙人面的例子中,假如特定的毛病产生,咱们将发送带有毛病动静的电子邮件,并停止剧本:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 23
复制代码
以上代码的输入应当相似如许:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 24
复制代码
吸收自以上代码的邮件相似如许:
  1. Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 25
复制代码
这个办法不合适一切的毛病。惯例毛病应该经由过程利用默许的 PHP 纪录体系在办事器长进行纪录。
即使你理解不了PHP,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。
不帅 该用户已被删除
沙发
发表于 2015-2-4 02:28:15 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
金色的骷髅 该用户已被删除
板凳
发表于 2015-2-9 11:14:46 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
精灵巫婆 该用户已被删除
地板
发表于 2015-2-25 03:11:06 | 只看该作者
实践是检验自己会不会的真理。
第二个灵魂 该用户已被删除
5#
发表于 2015-3-5 07:52:13 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
深爱那片海 该用户已被删除
6#
发表于 2015-3-12 00:50:16 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-18 10:41:26 | 只看该作者
爱上php,他也会爱上你。
小女巫 该用户已被删除
8#
发表于 2015-3-24 16:30:46 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
谁可相欹 该用户已被删除
9#
发表于 2015-4-17 07:24:59 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
小魔女 该用户已被删除
10#
 楼主| 发表于 2015-4-17 18:52:57 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
变相怪杰 该用户已被删除
11#
发表于 2015-4-20 19:32:14 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
透明 该用户已被删除
12#
发表于 2015-4-26 12:43:34 | 只看该作者
做为1门年轻的语言,php一直很努力。
简单生活 该用户已被删除
13#
发表于 2015-6-13 05:56:35 | 只看该作者
当然这种网站的会员费就几十块钱。
admin 该用户已被删除
14#
发表于 2015-6-14 17:56:57 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
爱飞 该用户已被删除
15#
发表于 2015-6-26 21:00:57 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
再见西城 该用户已被删除
16#
发表于 2015-7-2 14:15:38 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
17#
发表于 2015-7-7 06:49:58 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
冷月葬花魂 该用户已被删除
18#
发表于 2015-7-7 08:21:02 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
老尸 该用户已被删除
19#
发表于 2015-7-13 21:18:18 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
乐观 该用户已被删除
20#
发表于 2015-7-17 12:53:36 | 只看该作者
爱上php,他也会爱上你。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-30 12:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表