Как заблокировать вывод отладки php от фиксации в SVN? - PullRequest
8 голосов
/ 26 сентября 2011

Я бы хотел заблокировать отладочные функции var_dump, print_r, etc... от передачи в репозиторий, чтобы QA мог анализировать события и не сообщать об ошибках типа «На всех страницах огромный блок текста !!»

Я пробовал регулярное выражение (не очень хорошая идея ... предположительно).

Я также пробовал token_get_all, но по какой-то причине он возвращает T_STRING для каждой из функций отладки, которые ядумаю, будет работать, но это кажется странным ...

Есть ли третий способ лучше?

Ответы [ 4 ]

0 голосов
/ 28 сентября 2011

Альтернативный способ - вообще не использовать var_dump и связанные с ним функции. Лучшие практики кодирования включают

  1. Модульное тестирование с PHPUnit и
  2. Использование удаленного отладчика, например Xdebug
0 голосов
/ 27 сентября 2011

Возможно, это не тот ответ, который вы ищете, но я настоятельно рекомендую вам удалить все print_r, var_dump и т. Д. Из вашего кода.

  1. Держите ваш код в чистоте все время
  2. Эти теги предназначены только для отладки.
  3. когда вы делаете коммит, вы должны убедиться, что все работает как положено. Изменение кода коммита или наличие кода на вашем компьютере, отличном от действующего, гарантирует ошибки и проблемы.

Удалите эти теги, не храните их в своем коде, даже на локальном компьютере .

0 голосов
/ 27 сентября 2011

Вы можете написать снифф PHP_CodeSniffer и заставить SVN выполнить его как ловушку перед фиксацией. Это отклонило бы принятие такого кода.

0 голосов
/ 26 сентября 2011

Исходя из моего нового понимания, вот что у меня есть:

$debug_functions = array('print_r', 'var_dump', 'var_export');

foreach($files as $file=>$ext){
    $file_contents = file_get_contents($file);
    //break the content into tokens
    $tokens = token_get_all($file_contents);
    foreach($tokens as $t){
        //if the token id is an int (sometimes it isn't)
        if(is_int($t[0])){
            //if it matches our debug stuff...
            if($t[0] == T_STRING && (in_array($t[1], $debug_functions) || preg_match('/xdebug_.*?/', $t[1]))){
                echo 'Debug output '. $t[1] . ' found on line '. $t[2] . PHP_EOL;
            }
        }
    }
}
...