查错秘籍—PHP大法
——与葵花宝典齐名
偶突然发现自己老了,酱紫很难和大家沟通滴,所以特别翻译成大家能听懂的语言和大家交流,酱紫大家就都开心了。(总结只是俺自己闲暇之余的粗陋之作,错误之处,欢迎大家指正,求大神不要因为我写错了什么打我)。
——————————————我是分割线,请不要看我—————————————
错误大致分两类:第一种是你能看到的提示性错误,一般写在了页面上,比如浏览器上,sublime上等等;还有就是你看不到的错误,这类型没什么提示,完全是按着以往经验来查。
——————————————说了是分割线,你还看我—————————————
1.有提示错误的时候:
童鞋们,有时候会碰上一些错误提示,但不知道如何解决该怎么办?
忠心的给出一些建议:
当浏览器报错时,卸载浏览器;sublime报错时,卸载sublime;appache报错重装appache,windows出错了简单,重装windows。电脑坏了,我给你找把锤子。以上就是我的经验总结,感谢大家百忙之中观看……
——————————————请看我(言归正传)———————————————
好吧,言归正传!
a.网页提示错误:
Syntax error:
语法错误。若果页面报错开头是这两个单词的话,很有可能是你自己在编写程序时语法错误。
解决方法:
第一步:看它末尾提示,比如是”line 11”,则表示是第11行或者第10行出错了。
第二步:
你敢保证,自己没有丢单词么?
你敢保证,自己没有写错了什么?比如“fuck”中少了”u”;
你敢保证,上一行或者本行的分号不是中文格式么?或者是没有丢分号么?
你敢保证,该加双引号的变量都加上了么?
……
Fetal error:
致命错误。
Fetal error:引起这种错误的可能有两种。
第一种:在一个复杂的程序中, 偶然出现内存不足就会导致fatal error。
第二种: fatal error 出在MySQL类中fetch的时候.
解决方案:
PHP异常处理中 可以通过set_error_handler来捕获. 但是却只能捕获
NOTICE/WARNING级别的错误, 对于E_ERROR是无能为力的。register_shutdown_function 能解决set_error_handler的不足。通过此函数注册好程序结束回调函数, 就可以捕获平时捕获不到的错误了. 再通过 error_get_last 对错误进行判断. 就容易找出难以定位的问题了.
例子:
<?php
function shutdown_function()
{
$e = error_get_last();
print_r($e);
}
register_shutdown_function('shutdown_function');
?>
Notice:
错误:
PHP Notice: Undefined variable 未定义变量
PHP Notice: Undefined index 未定义索引
看看吧,这些变量你都没有定义就在使用了。赶紧回去加点什么或哪里还需要再改改。
如果还是不行的话:
解决方案:
秘法一:在报错行之前加“@”,可以屏蔽某一行错误。
秘法二:在PHP页面中加入如下代码,可以屏蔽一大堆notice(显示所有错误不显示注意),你懂得。
error_reporting(E_ALL || ~E_NOTICE);
缺点是:若果页面中出现大量notice,其结果是影响php程序的性能。
Warning:
警告。
解决办法同上。
法一:好吧,加“@”。
法二:error_reporting(E_ALL || ~E_WARNING);
提示:大家把”notice”和”warning”中的方法忽略了吧,毕竟我们就是干这个的,职业道德不允许我们一错再错。除非我们是要先测试性能。
Parser error:
JS中的错误。可能是结构不对。
b.Sublime报错:这个相对简单。不要问我什么错误,看左下角对应查单词。还有“.”报错。
不过还有点注意的是,你的错误不一定是错在本行。
具体应该有几大错误类:
(1)可能是本行错误,比如语法错误(丢了字母,变量不存在神马的)。
(2)可能是上一行的错误,比如你丢了个分号等等。
(3)可能是结构性错误,比如你在使用if(){}else{}语句时大括号没丢吗?抑或是大括号 包含的内容范围包对了吗?
c.Edditplus:
如果你用的是EdditPlus编辑器,出错了怎么办?
小编推荐:您把代码Ctrl+C粘贴到Sublime中,让它帮我们报错,让我们先喽一眼,是不是很神奇。愚蠢的人类在我面前颤抖吧!
d.Cmd提示错误:
有些人,自己的浏览器报错了语法错误了,却非要上cmd来找,我替cmd伤心呐,因为这无异于要找个男孩子帮你传宗接代!
Cmd报错在我们目前所学的最多的地方是MySQL(你确定非要到火星上找你的 男/女朋友 吗?)
e.Appache错误:
Appache无法重启:语法错误,可能是虚拟主机Virtual-host中设置错误。
在dos(也就是cmd)界面中输入Httpd -t 对应查找。
如果不是虚拟主机配置错误的话,可能需要重启Appache;如果重启还是失败的话,就重启电脑(这一招有时候蛮灵的)。
2.无提示错误:
这种时候,像我们这种新手就开始迷茫了,错误不知道如何解决?
不要怕,我来帮你分析。
第一:你没有写错,不要再找单词错误了。
第二:你开始找以下几种错误了。
首先,可能是比如if…else…语句{}这类型带括号的括错地方了。
其次,检查是否有语句使用错误,比如某个变量放错了地方,某个变量根本就不用写,或某个函数你调用了吗?还有如“echo”这样的输出语句你输出的变量可能是你已声明的其它变量……等等。
还有:在php中也可以简单的使用echo语句和exit()函数进行试探性的查找。走到那一块不运行了,就在那里查找对应的错误。
在JS中常用document.write()或alert()方式来进行对应查找。