码迷,mamicode.com
首页 > Web开发 > 详细

如何调试PHP程序

时间:2016-05-02 16:46:59      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

 

一、PHP自带的调试功能

 

1、修改php.ini 

 

(1)开发环境

需要打开报错输出显示,方便开发者调试。

  1. display_errors = On

 

(2)生产环境

不能直接将错误输出,而是记入日志,以免透露路径、数据库连接、数据表等信息遭到黑客攻击。

  1. display_errors = Off
  2. log_errors = On
  3. error_log = /path/

 

注:

 方式

路径

是否append

如果目录指向的文件不存在

error_log = php_errors.log

相对路径

自动创建

error_log = E:/phpStudy/php53n/php_errors.log

绝对路径

自动创建

 

 

2、利用PHP file_put_contents() 函数

 

  1. $a = 123;
  2. file_put_contents("error.log", "a is : " . $a . PHP_EOL, FILE_APPEND);

 

注1:如果目录指向的文件不存在怎么办?

  会自动创建。

---------------------------------------------

注2:PHP_EOL是什么?

  换行符。

  unix系列用 \n

  windows系列用 \r\n

  mac用 \r

  PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性。

---------------------------------------------

注3:Linux下可能有读写权限,建议先放开权限。

  chmod 777 文件名

  chmod -R 777 文件夹 (递归该文件夹下所有文件) 

---------------------------------------------

 

3、其他一些语言特性、功能的使用 

 

(1)少用错误控制运算符"@"

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

 

如果一个缺陷发生在这个表达式中,从PHP的输出中看不到任何错误,这增加了调试的难度。所以能不用则不用。

 

注: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。

 

例:

  1. $a = 123;
  2. echo @$b; //不报错

 

(2)有些函数自带有debug功能

例:

  1. $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);

一般这样的函数(主要是网络通信类的),会自己提供调试参数:$errno$errstr

你可以加一句:

  1. if (!$fp) echo "$errstr ($errno)<br />\n";

就能看到连接失败的原因了。

这些函数有:fsockopenpfsockopenstream_socket_serverstream_socket_client 等。

还有些函数是调试一个功能用的,比如:mysql_errnosocket_last_errorsocket_strerror 等。

 

二、引进调试工具

 如:Xdebug

 

如何调试PHP程序

标签:

原文地址:http://www.cnblogs.com/xjnotxj/p/5452485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!