小魔女 发表于 2015-2-3 23:34:16

PHP教程之PHP 毛病处置

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

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


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

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

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

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_NOTICERun-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 的一局部)
如今,让咱们创立一个处置毛病的函数:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); }下面的代码是一个复杂的毛病处置函数。当它被触发时,它会获得毛病级别和毛病动静。然后它会输入毛病级别和动静,并终止剧本。
如今,咱们已创立了一个毛病处置函数,咱们需求肯定在什么时候触发该函数。
Set Error Handler

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

经由过程测验考试输入不存在的变量,来测试这个毛病处置法式:
<?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); ?>以上代码的输入应当相似如许:
Error: Undefined variable: test 触发毛病

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

在本例中,假如 "test" 变量大于 "1",就会产生毛病:
<?php $test=2; if ($test>1) { trigger_error("Value must be 1 or below"); } ?>以上代码的输入应当相似如许:
Warning: fopen(welcome.txt) : 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,咱们将利用咱们的自界说毛病处置法式并停止剧本:
Warning: fopen(welcome.txt) : failed to open stream: No such file or directory in C:\webfolder\test.php on line 21以上代码的输入应当相似如许:
Warning: fopen(welcome.txt) : 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 发送毛病动静

鄙人面的例子中,假如特定的毛病产生,咱们将发送带有毛病动静的电子邮件,并停止剧本:
Warning: fopen(welcome.txt) : failed to open stream: No such file or directory in C:\webfolder\test.php on line 23以上代码的输入应当相似如许:
Warning: fopen(welcome.txt) : failed to open stream: No such file or directory in C:\webfolder\test.php on line 24吸收自以上代码的邮件相似如许:
Warning: fopen(welcome.txt) : 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

实践是检验自己会不会的真理。

第二个灵魂 发表于 2015-3-5 07:52:13

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

深爱那片海 发表于 2015-3-12 00:50:16

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

灵魂腐蚀 发表于 2015-3-18 10:41:26

爱上php,他也会爱上你。

小女巫 发表于 2015-3-24 16:30:46

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

谁可相欹 发表于 2015-4-17 07:24:59

本文当是我的笔记啦,遇到的问题随时填充

小魔女 发表于 2015-4-17 18:52:57

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

变相怪杰 发表于 2015-4-20 19:32:14

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

透明 发表于 2015-4-26 12:43:34

做为1门年轻的语言,php一直很努力。

简单生活 发表于 2015-6-13 05:56:35

当然这种网站的会员费就几十块钱。

admin 发表于 2015-6-14 17:56:57

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

爱飞 发表于 2015-6-26 21:00:57

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

再见西城 发表于 2015-7-2 14:15:38

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

仓酷云 发表于 2015-7-7 06:49:58

本文当是我的笔记啦,遇到的问题随时填充

冷月葬花魂 发表于 2015-7-7 08:21:02

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

老尸 发表于 2015-7-13 21:18:18

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

乐观 发表于 2015-7-17 12:53:36

爱上php,他也会爱上你。
页: [1]
查看完整版本: PHP教程之PHP 毛病处置