PHP dev & debug: var_dump, var_export, error_log and FirePHP (Part 1)

总结一下最近比较常用或是刚刚发现觉得比较好用的php dev & debug tool,肯定不全面,欢迎大伙补充。 1. var_dump() 用法很简单,就是你要dump什么data就传给这个方法什么data(其支持可变参数,不过一般还是习惯一个data一个var_dump())。它的好处很像ruby里的PP(pretty print),不过limit是只能输出到标准输出(php-cli是输出到控制台,php网页便是browser). [cc lang=”php” nowrap=”false”] [/cc] [cc lang=”php”] array 0 => string ‘var_dump’ (length=8) 1 => string ‘var_export’ (length=10) 2 => string ‘error_log’ (length=9) 3 => array 0 => string ‘Firebug’ (length=7) 1 => array 0 => string ‘FirePHP’ (length=7) [/cc] 2. var_dump(), die() 之前提到var_dump()的一个limit是网页page只能输出到浏览器,如果遇到页面redirect的,该限制的不足就会体现出来,处理这个问题的一个办法是配合使用die(),让程序halt在var_dump()之后,这样页面没机会跳转,我们亦有充足的时间查看浏览器上的输出。 [cc lang=”php” nowrap=”false”] [/cc] 3. error_log() die()有利有弊,因为有时候可能我们并不想就此halt程序,解决var_dump()限制的另外一个方法是釜底抽薪,换用error_log()。 error_log望文生义貌似是用来log error的,这里我们也可以用来log我们关心的data。 要使用error_log,需要在php.ini里面设置一下: [cc lang=”ini”] log_errors = On error_log = /path/to/php_errors.log [/cc] 试一下效果,由于error_log的message必须是string,我们这里简单的cast一下: [cc lang=”php” nowrap=”false”] [/cc] tail一下log file: [cc lang=”bash”] [02-Jul-2010 16:38:03] Array [/cc] 貌似不是很useful,自己implode()成string又太麻烦了,而且不general,看来我们还需要其它function的配合。 4. error_log(), var_dump(), output buffering control 首先想到的是前面的var_dump()到底能不能输出到log,其实也不是不行,就是有点麻烦。利用php的output buffering,我们可以把var_dump()的输出redirect到string,这时再用error_log输出这个string应该可以解决问题。 [cc lang=”php” nowrap=”false”] [/cc] 可惜事不遂人愿,log file得到了如下的browser friendly输出,disable xdebug-var-dump extension和禁止php error_prepend_string和error_append_string可能可以得到相对清晰的输出,但这不是我们想要的。 [cc lang=”bash”] [02-Jul-2010 16:56:53]

array
0 => string ‘var_dump’ (length=8)
1 => string ‘var_export’ (length=10)
2 => string ‘error_log’ (length=9)
3 =>
array
0 => string ‘Firebug’ (length=7)
1 =>
array
0 => string ‘FirePHP’ (length=7)

[/cc] 5. error_log(), var_export() 看来我们还是得忍痛舍弃var_dump(),一个replacement是var_export()。var_export()的第二个参数接受一个boolean值,我们可以用它来指定是否需要作为结果返回还是直接输出。 [cc lang=”php” nowrap=”false”] [/cc] 这回log file终于干净很多了: [cc lang=”bash”] [02-Jul-2010 17:10:29] array ( 0 => ‘var_dump’, 1 => ‘var_export’, 2 => ‘error_log’, 3 => array ( 0 => ‘Firebug’, 1 => array ( 0 => ‘FirePHP’, ), ), ) [/cc] ok,文章已经太长,已经超出了我能忍受的范围,遂决定就此打住,定为part 1,下篇part 2会介绍FirePHP,敬请期待~

Buy me a coffee
  • Post author: Samson Wu
  • Post link: 1952.html
  • Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
0%