Я разрабатываю веб-приложение и использую PHP и javascript/jQuery. У меня проблема с выходом предупреждений/ошибок из XDebug. Я вызываю PHP-скрипты из AJAX для извлечения данных, и большинство из них возвращают массивы, которые я использую для передачи JSON-строк. Проблема в том, что если есть предупреждение/ошибка, XDebug пишет HTML-теги в выходном файле, и когда я пытаюсь декодировать строку JSON в моем javascript, это терпит неудачу. Есть ли способ настроить XDebug для вывода их в переменную, чтобы я мог отображать их, если мне нужно, без испорчения моего JSON-декодирования? Я попытался показать быстрый пример:PHP/XDebug вывести переменную?
RemoveFile.php:
if (!unlink($_GET['Filename'])){ //if file not found XDebug will output warning here
$errors[] = "File not found";
echo json_encode($errors);
}
RemoveFile.js:
function RemoveFile(filePath){
$.get('RemoveFile.php', {
Filename: filePath
}).done(function (data){
var dataArray = JQuery.parseJSON(data); //Fails if XDebug outputs HTML
}
}
Update
Я понял, что мне нужно делать, потому что я не хочу, чтобы открыть файл журнала для проверки ошибки и ошибки, отображаемые в момент их создания, чтобы облегчить отладку. Я создал собственный обработчик ошибок, чтобы включить в файлы, которые я не хотел выводить, но все же выводя их на другие файлы:
VarErrorHandler.php:
function VarErrorHandler($errno, $errstr, $errfile, $errline){
switch ($errno) {
case E_USER_ERROR:
$errors[] = "ERROR: Fatal error on line $errline in file $errfile [$errno] $errstr";
exit(1);
break;
case E_USER_WARNING:
$errors[] = "WARNING: [$errno] $errstr";
break;
case E_USER_NOTICE:
$errors[] = "NOTICE: [$errno] $errstr";
break;
default:
$errors[] = "Unknown error type: [$errno] $errstr";
break;
}
/* Don't execute PHP internal error handler */
return true;
}
$old_error_handler = set_error_handler("VarErrorHandler");
Так что теперь в любых файлах, которые я не хочу выводить ошибки добавляют:
//include and set custom error handler
require_once("VarErrorHandler.php");
//to stuff here
//Reset original error handler
restore_error_handler();
Затем отображать их на стороне клиента, показывая массив ошибок т.е.
function RemoveFile(filePath){
$.get('RemoveFile.php', {
Filename: filePath
}).done(function (data){
var dataArray = JQuery.parseJSON(data); //Fails if XDebug outputs HTML
//Alert Errors
alert(dataArray.errors.join("\n"));
}
}
Да жаль ... у меня есть толстые пальцы сегодня и выложены до того, как я закончил LOL –