PHP中发生报错,按照道理可以开启报错提示来进行报错输出:

error_reporting();

ini_set('display_errors','on');

可以查看php.ini中的配置:

error_reporting = E_ALL

display_errors = On

的开启情况。

另外,我们也可以通过开启php.ini中的php报错日志来查看,例如:

error_log = "d:/wamp/logs/php_error.log"

此时也许我们会发现我们的apache服务器无法启动了,其实这是很多人碰到的情况,一旦开启php.ini中的error_log日志,apache就无法启动。

我这里已经解决掉了这个问题,为了模拟,我们到php.5.3.5中的ext目录下随便把一个.dll文件剪切掉,例如这个php_dblib.dll,这个是php5.3之后连接mssql的扩展库,是微软提供的而不是php本身,因为php5.3之后已不是原生支持连接mssql,把他剪切掉之后,我们重启apache,就会发现apache已无法启动,这个时候我们去看apache的apache_error.log日志,会发现如下报错:

[Thu Jan 16 11:30:12 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?

网上很多人出了此报错不知道原因,其实是因为php5.3.5中,如果开启了error_log,那么一定要保证加载的.dll必须存在,否则将无法启动apache,不信我们可以此时关掉apache,然后到php.ini中将error_log前面加上分号注释掉,然后此时再重启启动apache,会发现apache的报错日志apache_error.log中报错如下:

[Thu Jan 16 11:30:12 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Jan 16 11:38:46 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
PHP Warning:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n in Unknown on line 0
<br />
<b>Warning</b>:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - 找不到指定的模块。

in <b>Unknown</b> on line <b>0</b><br />
[Thu Jan 16 11:38:46 2014] [notice] Apache/2.2.17 (Win32) PHP/5.3.8 configured -- resuming normal operations
[Thu Jan 16 11:38:46 2014] [notice] Server built: Oct 18 2010 01:58:12
[Thu Jan 16 11:38:47 2014] [notice] Parent: Created child process 10316
PHP Warning:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n in Unknown on line 0
<br />
<b>Warning</b>:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - 找不到指定的模块。

in <b>Unknown</b> on line <b>0</b><br />
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Child process is running
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Acquired the start mutex.
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Starting 64 worker threads.
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Starting thread to listen on port 80.

说明确实没有正确加载php_mssql.dll,不信我们此时可以再把php.ini中的error_log开启,然后重启apache(此时无法启动apache),查看apache报错日志:

[Thu Jan 16 11:30:12 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Jan 16 11:38:46 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
PHP Warning:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n in Unknown on line 0
<br />
<b>Warning</b>:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - 找不到指定的模块。

in <b>Unknown</b> on line <b>0</b><br />
[Thu Jan 16 11:38:46 2014] [notice] Apache/2.2.17 (Win32) PHP/5.3.8 configured -- resuming normal operations
[Thu Jan 16 11:38:46 2014] [notice] Server built: Oct 18 2010 01:58:12
[Thu Jan 16 11:38:47 2014] [notice] Parent: Created child process 10316
PHP Warning:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n in Unknown on line 0
<br />
<b>Warning</b>:  PHP Startup: Unable to load dynamic library 'd:/wamp/bin/php/php5.3.5/ext/php_dblib.dll' - 找不到指定的模块。

in <b>Unknown</b> on line <b>0</b><br />
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Child process is running
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Acquired the start mutex.
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Starting 64 worker threads.
[Thu Jan 16 11:38:47 2014] [notice] Child 10316: Starting thread to listen on port 80.
[Thu Jan 16 11:42:11 2014] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Thu Jan 16 11:42:11 2014] [notice] Child 10316: Exit event signaled. Child process is ending.
[Thu Jan 16 11:42:12 2014] [notice] Child 10316: Released the start mutex
[Thu Jan 16 11:42:13 2014] [notice] Child 10316: All worker threads have exited.
[Thu Jan 16 11:42:13 2014] [notice] Child 10316: Child process is exiting
[Thu Jan 16 11:42:13 2014] [notice] Parent: Child process exited successfully.
[Thu Jan 16 11:42:31 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Jan 16 11:42:38 2014] [warn] pid file D:/wamp/bin/apache/Apache2.2.17/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?

会发现又出现之前的报错了,对吧。印证了此php5.3.5版本中确实存在打开error_log之后需保证apache加载的dll都应存在的版本特性。

好,此特性我们告一段落,知道此特性之后,我们只需要在开启error_log之前查看apache报错日志,将没能正确加载的dll都在php.ini中注释掉,确保apache启动时没有此类报错,则可以使用php的error_log了。

因为我已经将php_dblib.dll从ext中去除了,所以我代码中有一段访问数据库的脚本按理说应该报错,但是此时我通过web访问发现页面空白,没有任何报错,另外php的php_error.log文件中也是一片空白,这是什么情况?@_@,难道会有php报错是无法扑捉到的吗?!!

其实php中的php_error.log应该可以记录所有php报错,但是也有例外,是什么呢?当我去检查代码的时候,才发现我的数据库驱动脚本中是这么写的:

function db_connect()
{
if ($this->port != '')
{
$this->hostname .= ','.$this->port;
}

return @mssql_connect($this->hostname, $this->username, $this->password);
}

大家注意了没有,这个@mssql_connect啊,万恶的@啊,他竟然把本该输出的报错给按回去了,就是这里啊,神啊~~~找了我好半天啊,不信我们这个时候再把@去掉,然后重新访问此脚本,发现页面报错,到php报错日志中查看,也发现以下报错:

[16-Jan-2014 04:03:07] PHP Fatal error:  Call to undefined function mssql_connect() in D:\wamp\www\monite\system\database\drivers\mssql\mssql_driver.php on line 63

[16-Jan-2014 04:03:07] PHP Stack trace:

[16-Jan-2014 04:03:07] PHP   1. {main}() D:\wamp\www\monite\index.php:0

[16-Jan-2014 04:03:07] PHP   2. require_once() D:\wamp\www\monite\index.php:202

[16-Jan-2014 04:03:07] PHP   3. Cron_promote->__construct() D:\wamp\www\monite\system\core\CodeIgniter.php:308

[16-Jan-2014 04:03:07] PHP   4. CI_Loader->model() D:\wamp\www\monite\application\controllers\cron_promote.php:17

[16-Jan-2014 04:03:07] PHP   5. Cron_assets_expense_model->__construct() D:\wamp\www\monite\system\core\Loader.php:321

[16-Jan-2014 04:03:07] PHP   6. CI_Loader->database() D:\wamp\www\monite\application\models\BI\cron_assets_expense_model.php:11

[16-Jan-2014 04:03:07] PHP   7. DB() D:\wamp\www\monite\system\core\Loader.php:366

[16-Jan-2014 04:03:07] PHP   8. CI_DB_driver->initialize() D:\wamp\www\monite\system\database\DB.php:153

[16-Jan-2014 04:03:07] PHP   9. CI_DB_mssql_driver->db_connect() D:\wamp\www\monite\system\database\DB_driver.php:123

万恶的@,其实,php_error.log在你不做干预的时候会记录所有报错,除非你把他@掉。当然也许php还有其他报错和阻止报错的手段,等以后发现再补充~~

好吧好吧,就这样了,大家自己玩吧~~有什么新发现可以继续记录,嘿嘿~~

关于PHP中如何跟踪报错的手段相关推荐

  1. 《一起学习rgbdSLAM》中g2o部分报错的问题

    <一起学习rgbdSLAM>中g2o部分报错的问题 在高博的<一起学习rgbdSLAM>第六讲中使用到了g2o工具.但是由于版本问题,按照高博的写法来编写代码在编译过程中会报错 ...

  2. anconda安装后命令行中安装tensorflow报错

    现象  anconda安装后命令行中安装tensorflow报错 pip install --upgrade --ignore-installed tensorflow-gpu Building wh ...

  3. K.O. -------- Eclipse中Maven的报错处理

    ----------------------siwuxie095 K.O. -------- Eclipse 中 Maven 的报错处理 1.报错一: A 'Maven Build' configur ...

  4. python无法启动该程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  5. Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法

    Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法 1).容器中登录my ...

  6. python无法启动此程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  7. Eclipse中启动tomcat报错:A child container failed during start

    我真的很崩溃,先是workspace崩了,费了好久重建的workspace,然后建立了一个小demo项目,tomcat中启动却报错,挑选其中比较重要的2条信息如下: A child container ...

  8. Eclipse和MyEclipse使用技巧--解决MyEclipse中的js报错的小方法

    今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下: Syntax error on token &quo ...

  9. python下载库报错_下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决...

    下载python中Crypto库报错:ModuleNotFoundError: No module named 'Crypto'的解决 前言 最近在网上找了很多下载Crypto的方法,感觉作用都不算很 ...

最新文章

  1. 中国编程第一人,李开复欣赏他,百度留不住他...
  2. python语法基础知识总结-python语法基础知识
  3. 类似QQ管家页面jquery图片显隐轮换效果
  4. Android中Gson解析json数据使用@SerializedName注解
  5. 关于 jsp java servlet 中文汉字乱码的解决方法
  6. React-引领未来的用户界面开发框架-读书笔记(七)
  7. exit与_exit函fork与vfork函数
  8. 【OS学习笔记】五 VirtualBox的下载、安装和配置
  9. LeetCode MySQL 1747. 应该被禁止的Leetflex账户
  10. 保留小数点后三位_【Meta分析】Stata制作森林图时,如何保留三位小数?
  11. suma在c语言中表示什么变量,C语言题
  12. 计算机硬盘修复教程,DiskGenius数据恢复教程 教你电脑硬盘数据如何恢复
  13. python列表操作符_Python中list()列表操作符的案例分享
  14. Protel99SE覆铜笔记
  15. python绘制缓和曲线_曲线标
  16. 基于Java的超市水果管理系统_技术分享 - 基于JAVA SWING结合链表的水果超市管理系统...
  17. 详解Unity中的粒子系统Particle System (七)
  18. html页面中艺术字,html 生成艺术字
  19. 计算机专业学微积分有什么用,学微积分有什么用啊?
  20. android 感应器

热门文章

  1. Latex自定义文档纸张大小
  2. 学计算机c语言吗,学习C语言对学习计算机很重吗?
  3. 《Designing Data-Intensive Application》01数据系统的基石-可靠性/可扩展性/可维护性
  4. 题目:两道迷宫类型题
  5. 江苏省各地级市县经纬度查询大全
  6. 一元二次方程的简单回顾
  7. 用python花猫_Python竟能画这么漂亮的花,帅呆了(代码分享)
  8. 上海航芯|推出基于ACX200T的V2X解决方案
  9. [死磕 Spring 21/43] --- IOC 之 Factory 实例化 bean
  10. mysql分组查询最新数据