PHP常见报错解析
{错误类型}: {错误原因} in {错误文件} on {错误行数}
说明了在哪个文件的哪一行中因何种原因出现了何种错误。
常见的错误类型一般有下面几种:
Parse error(解析错误)一般都伴随着Syntax errors(句法错误) ,说明你的程序不符合PHP的语法。
它是级别最高的错误,整个脚本根本不会被执行。
一般都是由一个表达式缺少";" 或各种括号引号不成对引起的。看详细的信息就能知道问题的所在。
一般句法错误都会给你提示一个解析器代号,告诉你出现的问题是在哪里。比如:
Parse error: syntax error, unexpected T_STRING in xxx.php on line 9
T_STRING 是一个解析器代号,顾名思义,它代表字符串,很多错误原因都会带解析器代号。通过它你可以更直接的了解到错误的原因。
unexpected意思是非预期的,换句话说也就是多余的。
更多解析器代号请参考:http://www.php.net/manual/zh/tokens.php 或php手册 英文版中叫:List of Parser Tokens 中文版中叫:解析器代号列表
上面的错误的意思是说你的第九行有一个非预期的字符串。
我的代码:
1-7: 略
8 : test(array('a'))
9 : xxx();
10 : >
这个问题如何解决呢?把第九行的xxx删掉,的确符合PHP语法了。
但是那不是我想要的,实际上是我的第8行缺少了一个";",解决办法是在第8行结尾加分号。
注意:这个例子还说明了一个问题,错误报告说是哪行,问题不一定就非在哪行,也可能是它的前面一行或几行造成的。最典型的例子是某程序提示出错行数在 文件的最后一行,你去看,发现那行除了“>”以外没有别的字符,这种情况一般是缺少引号导致的。你要往前面找不成对的引号或者别的什么标点。如果你 非要抬杠,认准了行号不松口,那就不是php的问题了。
Fatal Error(致命错误),仅次于Parsing Error的错误,执行到发生错误的行时,脚本会终止运行。
在程序符合PHP语法的基础上,使用了未定义的函数,或require一个不存在的文件,死循环导致程序执行超时,都会导致fatal error。
一般表现为:
Fatal Error: Call to undefined function func() in php100.php on line 某某
就是说在某某行你调用了一个未定义的func函数,这时候一般就是看你是否忘了包含该包含的文件,是否写错了函数名,是否写错了文件名。(PHP100.com)
Warning(警告),比致命错误级别稍低,但程序不会因为脚本错误而终止。
一般出现在include一个不存在的文件,或者一个程序需要一个参数,但是你没传参数,并且你也没指定参数的默认值。
Warning视情况可以避免出现,实在没法避免,可以加@强行屏蔽。
Notice(通知),级别最低,一般可以无视,不会影响到脚本的运行。多数发生在变量或数组下标未定义的情况。
注意:多数notice都可忽略,但是少数的notice也可能会反映出比较严重的问题。
比如 Notice: Undefined variable: sql in xxx.php on line xx
你看到有个变量"sql"未定义,这就可能很危险了,在register_globals=on的情况下,没准这个错误直接就成为了别人操作数据库的后门。
此外还有一些别的类型的错误,平时不常见,我就不多说了。
总结
综上所述,PHP的错误提示会告诉我们很多事情,为我们查找错误提供了极大的方便。好好利用它,会大大的提高我们的工作效率和工作质量。
不过,它带来好处的同时,也可能会透露服务器的敏感信息,容易让攻击者发现服务器的漏洞。
php开发环境一定要打开全部错误提示,打开错误显示。最大限度的减少事故的发生。
生产环境千万要把错误显示关闭,改用日志来记录错误。别给有心人以可乘之机。
不同的错误种类包括:
E_ERROR:通常会显示出来,也会中断程序执行。
E_WARNING:通常都会显示出来,但不会中断程序的执行。
E_NOTICE:在脚本正常运行下发生的代码错误。
E_PARSE:语法解析错误。
E_CORE_ERROR:在PHP启动时发生的致命错误。
E_CORE_WARNING:报告在PHP启动时发生的非致命性错误。
E_COMPILE_ERROR:编译时发生的致命错误,指出脚本的错误。
E_USER_ERROR:用户产生的错误信息。
E_USER_WARNING:用户产生的警告信息。
E_USER_NOTICE:用户引发的注意消息。
E_STRICT:编码标准化警告,运行时发生的错误。
E_RECOVERABLE_ERROR:接近致命的运行时错误,若未被捕获则视同E_ERROR。
E_ALL:捕获所有的错误和警告。
PHP常见报错解析的更多相关文章
- web报表工具FineReport使用中遇到的常见报错及解决办法(二)
web报表工具FineReport使用中遇到的常见报错及解决办法(二) 这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己. 出现问题先搜一下文档上有没有,再看看度娘 ...
- java常见报错及解决
Java常见报错信息: Java 常见异常种类 Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定 ...
- JavaScript 调试常见报错以及原因
JavaScript 调试常见报错以及原因 测试环境 chrome 版本 66.0.3359.170(正式版本) (64 位) TypeError 类型错误 不是操作符所接受的数据类型. //---- ...
- 内置Jetty配置JSP支持过程中的常见报错
目录 1. 常见报错及解决 1.1 JSP support not configured 1.2 JSTL标签解析 1.3 JSP编译 1.4 JSP实现依赖 1.5 EL表达式支持 2. 小结 1. ...
- HDFS集群常见报错汇总
HDFS集群常见报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DataXceiver error processing WRITE_BLOCK operation 报 ...
- 03:git常见报错解决方法
1.1 git常见报错解决方法 1.warning: LF will be replaced by CRLF in .idea/workspace.xml. 参考博客:https://www.cnbl ...
- Nginx 常见报错
Nginx 常见报错 启动报错:[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 原因:这个是nginx重启时经常遇到 ...
- Django 连接 MySQL 数据库及常见报错解决
目录 Django 连接 MySQL数据库及常见报错解决 终端或者数据库管理工具连接 MySQL ,并新建项目所需数据库 安装访问 MySQL 的 Python 模块 Django 相关配置 可能会遇 ...
- C语言开发中常见报错的解决方案
C语言开发中常见报错的解决方案 整理来源于网络,侵权请通知删除.*禁止转载 ---- fatal error C1003: error count exceeds number; stopping c ...
随机推荐
- (转)iOS 各种控件默认高度(图示)
1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半透明 ...
- android 解析json数据格式
json数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid" ...
- $_SERVER变量 以及 PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
PHP $_SERVER['PHP_SELF'] $_SERVER['PHP_SELF'] 表示当前 php 文件相对于网站根目录的位置地址,与 document root 相关. 假设我们有如下网址 ...
- RedHat下GCC及G++的安装
GCC的安装: 切换到安装光盘目录下: #mount /dev/cdrom /mnt/cdrom #cd /mnt/cdrom 安装GCC依赖的*rpm程序,必须按照顺序依次执行: #rpm - ...
- 忘记mysql 5.7的密码
for windows: http://blog.chinaunix.net/uid-27570589-id-3511820.html 一.将net stop mysql; 二.在命令行中 C:\Us ...
- R语言——包的添加和使用
R是开源的软件工具,很多R语言用户和爱好者都会扩展R的功能模块,我们把这些模块称为包.我们可以通过下载安装这些已经写好的包来完成我们需要的任务工作. 包下载地址:https://cran.r-proj ...
- 【转】NSHashtable and NSMaptable
本文转自Nidom的博客,原文:<NSHashtable & NSMaptable> NSSet, NSDictionary, NSArray是Foundation框架关于集合 ...
- javascript 实现jsonp
jsonp原理其实也简单,虽然ajax不能跨域,但是通过src这个属性我们可以实现跨域,其实和我们引入第三方jquery调用它的方法一样的. html: <!DOCTYPE html> & ...
- Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
http://www.crifan.com/intro_ios_simulator_in_xcode_and_usage_summary/
- javascript 字符串转为对像函数eval("string")
javascript有一个很有用的函数eval("string")这个函数可以把字符串转换为对象或者可以执行的语句,例如你的代码可以用obj2=eval("documen ...