第8章 错误处理和调试

《PHP与MySQL动态网站开发》笔记 luoluolzb 浏览1691次

错误类型

HTML错误、PHP错误、SQL错误和MySQL错误

基本问题:

PHP和MySQL版本问题:查看PHP和MySQL版本特性

web服务器或版本问题:查看web服务器特性

web浏览器或版本问题:使用不同的web浏览器运行页面

调试HTML

方法:

  1. 检查源代码
  2. 使用验证工具(validator.w3.org)
  3. 使用浏览器调试
  4. 使用Firefox插件
  5. 更换浏览器进行测试

display_errors开关

php.ini配置文件中display_errors为显示PHP错误的开关。

也可以使用ini_set()函数为当前脚本打开显示错误:ini_set('display_errors', 1);

注意:使用ini_set()函数后,如果脚本发生解析错误不会被显示

错误报告

错误有三种级别:

  • notice(注意):提醒可能的问题,脚本继续执行
  • warning(警告):提醒一个问题,脚本继续执行
  • error(错误):显示错误,脚本停止执行
    注意:显示错误报告需打开display_errors开关

错误报告等级:

等级值 符号常量 报告
1 E_ERROR 致命错误(停止脚本执行)
2 E_WARNING 运行错误警告
4 E_PARSE 解析错误
8 E_NOTICE 注意问题
256 E_USER_ERROR 用户生成的错误消息, 由trigger_error()生成
512 E_USER_WARGING 用户生成的警告,由trigger_error()生成
1024 E_USER_NOTICE 用户生成的注意,由trigger_error()生成
2048 E_STRICT 兼容性和互操作性的建议
8192 E_DEPR ECATED 警告无法在未来PHP版本中使用的代码
30719 E_ALL 所有的错误、警告和建议

调整脚本的错误报告行为:

error_reporting(number);

number是等级值,为0关闭所有报告,为E_ALL显示所有报告。对这些常量可以使用与或非运算符来进行搭配使用,如:E_ALL & E_STRICT可以显示不是注意的报告。

生成错误:triggererror(‘错误消息’, 等级值);
等级值只能是表中的E_USER*
@运算符可以抑制单个错误, 如@(1/0), 对文件包含函数使用可以抑制包含文件中的错误报告。

自定义错误处理

定义错误处理函数:

function fun_name($num, $msg, $file, $line, $vars){
    ...
}

参数依次可选,分别是:错误等级值、错误消息、错误文件名、错误行数、错误存在的变量
指定错误处理函数:

set_error_handler('fun_name');

将错误输出到文件中可以使用error_log()函数

php调试技术

常见PHP错误

错误 原因
空白页面 HTML问题或PHP错误,且关闭了display_errors或error_reporting
解析错误 忘记分号;不对称的{}、()、 [];字符串中使用了引号但没有转义
空变量值 忘记变量前的$;变量拼写错误或大小写错误;变量作用域不合适
调用未定义的变量 变量未赋值就使用;使用空变量值
声明函数 函数存在多个定义(检查文件包含)
头部已经发送 脚本中的PHP标签之前存在空白;已经打印数据;已经包含文件

调试方法:

  • 打开display_errors显示错误报告
  • 使用注释寻找错误的代码块
  • 使用print和echo函数输出执行了什么内容(多分支时)
  • 变量追踪,打印变量的名字和值
  • 使用print_r()可以打印数组或对象的值,var_dump()可以打印数组或对象的类型和值,也可以用于普通变量

用die()或exit()可以结束脚本执行。

SQL和MySQL调试技术

常见SQL错误:

  • 引号或括号不对称
  • 列值中有未转义的引号
  • 列名、表名或函数名拼写错误
  • 联结有歧义
  • 子句的顺序错误(FROM、WHERE、ORDER BY、LIMIT)

调试SQL查询问题:

  1. 用PHP输出查询结果
  2. 在MySQL命令行或者PHPmyadmin运行查询:如果结果和预期相同,则问题出在PHP脚本,否则出在SQL或MySQL数据库
  3. 一步步重写查询,直到发现问题所在

调试访问问题:

  1. 改变用户权限后需要重新加载MySQL
  2. 确认密码正确
  3. 确认MySQL在运行并在正确端口

本文标签: PHP

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
您需要登录后才发布评论。 点此登录
用户评论 (0条)

暂无评论,赶紧发表一下你的看法吧。