2013-12-18 111 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; 
}