2013-12-18 148 views
1

我在php中有大约2000行代码...有些地方我有一些回声在这里和那里知道这或那个做得很好......但我更多的追踪和回声每一项任务都完成了......我在函数输入和函数返回之前都有什么回声......但是所有这些回声污染了代码和屏幕,并且在准备生产时将它删除或注释掉是一个极好的选择......如何正确调试php

的问题,怎么说,呼应这个那个,但是当我说调试关,停echo..how你,在你的代码...我因子评分是

global $debug_echo; 
$debug_echo = true; 

if ($debug_echo) {echo "function xyz - start";} 
if ($debug_echo) {echo "function xyz - end";} 
... 
... 

故有此,我可以在任何地方调试调试有一个改变......它有道理吗?

+0

我目前使用http://www.jetbrains.com/phpstorm/我的IDE与http://xdebug.org/用于调试 – Scuzzy

+0

退房firephp – JAL

回答

0

在一个核心文件,如config.php文件(通常包含在一个web应用程序的所有子文件),也有类似这样:真亦假

$debug = true; 

if($debug){ 
    ini_set('display_errors', 1); 
    error_reporting(E_ALL); 
}else{ 
    error_reporting(0); 
} 

然后就改为禁用调试。

如果您想在脚本中间转储错误(例如MySQL查询),那么这是一个完全不同的水壶。

看看这个幻灯片:http://www.slideshare.net/asgrim1/errors-exceptions-logging-php-hants-oct-13

2

最好的事情要做的调试,将使用一个常量。因此,在你的文件的顶部,或任何你想打开或关闭声明调试模式你这样做

define('DEBUG', true); 

那就要检查一下你只想做

if(DEBUG === true) { echo 'something here'; } 

你只需要申报不变一次,然后在代码的整个范围内都可用,只要它声明在某处。

+0

一个定义VAR充当全球性的? – menardmam

+0

它不是一个变量,它是一个常量,它将被用作全局变量,不能被重新定义。请参阅http://www.php.net/manual/en/language.constants.php以供参考。 – ollieread

0

这里是你可以做的:

function is_dev() { 
    return isset($_SERVER['APP_ENV'] AND $_SERVER['APP_ENV'] === 'DEV') 
} 

..In你的Apache虚拟主机配置/的.htaccess

SetEnv APP_ENV DEV 

如果您正在使用一个框架或动态创建您的SQL查询,如果is_dev()返回true,则可以输出它们。

if(is_dev()) { 
    echo $sql; 
}