PHP不影响正常运行的调试技巧

以前习惯用 echo,print_r 等方法来测试php输出,这样多多少少会影响到代码的正常运行,现改成“把测试变量输出到文本”的形式,可实现日志形式的调试,如接口服务端调试。代码如下:

Java代码  

  1. <?php  
  2. /** 
  3.  * 写文件函数 
  4.  * @param string $filename 文件名 
  5.  * @param string $writetext 要写入的文本字符串 
  6.  * @param string $openmod 文本写入模式('w':覆盖重写,'a':文本追加) 
  7.  * @return boolean 
  8.  */  
  9. function new_writefile($filename, $writetext, $openmod = 'w') {  
  10.     if (@$fp = fopen($filename, $openmod)) {  
  11.         flock($fp, 2);  
  12.         fwrite($fp, $writetext);  
  13.         fclose($fp);  
  14.         return true;  
  15.     } else {  
  16.         return false;  
  17.     }  
  18. }  
  19.   
  20. /** 
  21.  * 将“数组”转换成“数组字符串”(方便写入文本) 
  22.  * @param array $array 要转换的数组 
  23.  * @param int $level 转换级别/深度 
  24.  */  
  25. function new_arr2str($array, $level = 0) {  
  26.     $space = '';  
  27.     for ($i = 0; $i <= $level; $i++) {  
  28.         $space .= "\t";  
  29.     }  
  30.     $evaluate = "Array\n$space(\n";  
  31.     $comma = $space;  
  32.     foreach ($array as $key => $val) {  
  33.         $key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;  
  34.         $val = !is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12 || substr($val, 0, 1)=='0') ? '\''.addcslashes($val, '\'\\').'\'' : $val;  
  35.         if (is_array($val)) {  
  36.             $evaluate .= "$comma$key => " . new_arr2str($val, $level + 1);  
  37.         } else {  
  38.             $evaluate .= "$comma$key => $val";  
  39.         }  
  40.         $comma = ",\n$space";  
  41.     }  
  42.     $evaluate .= "\n$space)";  
  43.   
  44.     return $evaluate;  
  45. }  
  46.   
  47. /** 
  48.  * 写数组(其实用下面的“write函数”就足够用啦~~~) 
  49.  * @param array $array 要写入的数组 
  50.  * @param string $type 文本写入类型('w':覆盖重写,'a':文本追加) 
  51.  */  
  52. function writeArr($array, $type = 'w') {  
  53.     $filename = 'd:\php\wamp\www\write.txt';  
  54.     $writetext = test_arr2str($array);  
  55.     new_writefile($filename, $writetext, $type);  
  56. }  
  57.   
  58. /** 
  59.  * 写对象(包括 数字、字符串、数组) 
  60.  * @param string $writetext 要写入的文本字符串 
  61.  * @param string $type 文本写入类型('w':覆盖重写,'a':文本追加) 
  62.  */  
  63. function write($writetext, $type = 'a'){ // 'w':覆盖重写,'a':表示'文本追加'  
  64.     $filename = 'd:\php\wamp\www\write.txt';  
  65.     $writetext = "++++++++++++++++++++++++++++++++++++++++++\r\n" . print_r($writetext, true) . "\r\n";  
  66.     new_writefile($filename, $writetext, $type);  
  67. }  
  68.   
  69. //require_once('d:\php\wamp\www\write.php'); // add by wenjb(注意:本地测试用,不用提交到 svn)  

 应用如下:

Java代码  

  1. $arr = array(  
  2.     "w" => "wen",  
  3.     "j" => "jian",  
  4.     "b" => "bao"  
  5. );  
  6. write($arr);  

 输出结果如下:

Java代码  

  1. ++++++++++++++++++++++++++++++++++++++++++  
  2. Array  
  3. (  
  4.     [w] => wen  
  5.     [j] => jian  
  6.     [b] => bao  
  7. )  

 上面的仅仅是小技巧而已,最好还是用专业的调试工具去调试比较好。。。也可以

Java代码  

  1. $data222 = $arr;  
  2.   
  3. $text222 = print_r($data222, true);  
  4. $filename222 = 'd:\My Documents\1\write.txt';  
  5. file_put_contents($filename222, $text222);  

 

时间: 2024-12-04 01:57:48

PHP不影响正常运行的调试技巧的相关文章

[译] 前端调试技巧与诀窍

本文讲的是[译] 前端调试技巧与诀窍, 原文地址:Debugging Tips and Tricks 原文作者:SARAH DRASNER 译文出自:掘金翻译计划 译者:lsvih 校对者:loveky,ymz1124 前端调试技巧与诀窍 编写代码其实只是开发者的一小部分工作.为了让工作更有效率,我们还必须精通 debug.我发现,花一些时间学习新的调试技巧,往往能让我能更快地完成工作,对我的团队做出更大的贡献.关于调试这方面我有一些自己重度依赖的技巧与诀窍,同时我在 workshop 中经常建

VS2008调试技巧收集备用

VS2005调试技巧集合 http://blog.csdn.net/rainylin/archive/2007/09/06/1775125.aspx 下面有从浅入深的6个问题,您可以尝试回答一下 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢? 你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次

一探前端开发中的JS调试技巧

友情提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今天,如何在前端开发中降低开发成本,提升工作效率,掌握前端开发调试技巧尤为重要. 本文将一一讲解各种前端JS调试技巧,也许你已经熟练掌握,那让我们一起来温习,也许有你没见过的方法,不妨一起来学习,也许你尚不知如何调试,赶紧趁此机会

&lt;转&gt;反调试技巧总结-原理和实现

一. 前言    前段学习反调试和vc,写了antidebug-tester,经常会收到message希望交流或索要实现代码,我都没有回复.其实代码已经在编程版提供了1个版本,另其多是vc内嵌asm写的,对cracker而言,只要反下就知道了.我想代码其实意义不是很大,重要的是理解和运用.    做个简单的总结,说明下实现原理和实现方法.也算回复了那些给我发Message的朋友.     部分代码和参考资料来源:1.<<脱壳的艺术>> hawking2.<<window

VS2010中的调试技巧

这是我的博客中关于VS 2010和.NET 4发布系列的第二十六篇文章. 今天的博文将介绍Visual Studio中的一些实用调试技巧.这是受我朋友Scott Cate (他发表过几十篇很棒的VS技术文章) 启发.他最近告诉我,许多Visual Studio下的程序员,甚至一些很有经验的开发人员,都不知道这些技巧.希望这篇文章能帮你掌握这些技巧.它们都很简单,却能帮你节约大量的时间. 跳到当前光标处(Ctrl+F10) 我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按

javascript 调试: javascript调试技巧之:快速定位

赶紧总结一下javascript的调试技巧,这次首先是"快速定位"篇.快速定位,其实就是快速定位程序的错误,所以也算是调试.这个在实际的码代码时往往比较实用.大多数情况下,你的js代码不多(少于1000行),只要能迅速发现代码的错误,往往不用复杂的调试.关于常用的快速定位方法,我总结了一下几点,欢迎大家补充.1. 使用alertalert其实比较实用.本地调试中,在合适的位置写alert,打出来一些变量,虽然比较土,但是往往事半功倍!另外有一个alert技巧,想看看一个对象中的属性和它

C++编程语言的四个调试技巧

1.调试标记 适用预处理#define定义一个或多个调试标记,在代码中把调试部分使用#ifdef和#endif进行管理.当程序最终调试完成后,只需要使用#undef标记,调试代码就会消失.常用的调试标记为DEBUG, 语句序列: #define DEBUG#ifdef DEBUG调试代码#endif 2.运行期间调试标记 在程序运行期间打开和关闭调试标记.通过设置一个调试bool标记可以实现.这对命令行运行的程序更为方便.例如下面代码: #include<iostream>#include &

.NET程序调试技巧(一):快速定位异常的一些方法

  这篇文章主要介绍了.NET程序调试技巧(一):快速定位异常的一些方法,本文讲解了定位本机异常.在客户环境定位.net程序异常两方面的内容,需要的朋友可以参考下 作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现.因为这体现了一个程序员的技术水平.技术深度.经验等等. 那么在我们解决BUG的过程中,定位问题是非常重要的.有句话叫"发现问题是解决问题的一半. 本文讲述就快速定位异常(专指.NET程序异常)的方法.包括在本机定位异常,在客户环境定位.n

14个你可能不知道的JavaScript调试技巧

以更快的速度和更高的效率来调试JavaScript.熟悉工具可以让工具在工作中发挥出更大的作用.尽管江湖传言 JavaScript 很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug.文中已经列出了14个你可能不知道的调试技巧,但是可能需要你牢记在心,以便在下次需要调试JavaScript代码时使用!  1. debugger  除了console.log, debugger是我们最喜欢.快速且肮脏的调试工具.执行代码后,Chrome会在执行时自动停止.你甚至可以把它封装成条件