Резюме: у меня есть решение, которое я создал для мониторинга переменных и обработки кода в моей среде. Он хорошо работает для статических страниц, и приведенный ниже код является подходящим решением для этого. Однако, если страница содержит вызовы ajax, которые обновляют общие переменные после запуска страницы, этот метод мониторинга бесполезен. Чтобы сделать это, я хочу найти способ использовать вызов ajax, который будет рассказывать информацию, которая выполняется на месте, но я не могу понять, как включить это в этот код.
У меня есть следующий файл проверки ошибок для php, который я использую в своей среде разработки, с использованием магической функции register_tick_function для хранения кода во время его выполнения и отображения переменных для каждого шага. Включение этого на страницу позволяет запускать процесс галочки ...
<?php
register_tick_function(function(){
if (isset($GLOBALS["developer_debug"]) && $GLOBALS["developer_debug"] == 'active'){
$backtrace = debug_backtrace();
$line = $backtrace[0]['line'] - 1;
$file = $backtrace[0]['file'];
if ($file == __FILE__) return;
static $fp, $cur, $buf;
if (!isset($fp[$file])) {
$fp[$file] = fopen($file, 'r');
$cur[$file] = 0;
}
if (isset($buf[$file][$line])) {
$code = $buf[$file][$line];
} else {
do {
$code = fgets($fp[$file]);
$buf[$file][$cur[$file]] = $code;
} while (++$cur[$file] <= $line);
}
$line++;
if (defined('ERR_LOG')){ $error_log = ERR_LOG; } else {
$error_log = "../logs/error_log";
}
error_log("\n==========================================================\n", 3, $error_log);
error_log("\n $file : $line :: $code \n", 3, $error_log);
error_log("\n Variables: \n" . print_r(get_defined_vars(), true) . "\n", 3, $error_log);
$GLOBALS["_TROUBLESHOOTING"][] = "<code>\n $file : $line ::: ". htmlentities($code, ENT_QUOTES) . " \n</code>";
}
}, ["_SERVER" => $_SERVER, "_COOKIE"=>$_COOKIE, "_REQUEST"=>$_REQUEST, "_SESSION"=>$_SESSION, "_GLOBALS"=>$GLOBALS]);
// To use...
// declare(ticks=1);
// include_once('debug.php');
и в мои прямые загрузки страниц (например, index.php) я могу включить это js:
$(document).ready(function() {
var dev_top_button = document.createElement("Button");
dev_top_button.innerHTML = "Top Dev Data";
dev_top_button.style = "top:0;right:75%;position:absolute;z-index: 9999"
document.body.appendChild(dev_top_button);
var dev_bottom_button = document.createElement("Button");
dev_bottom_button.innerHTML = "Bottom Dev Data";
dev_bottom_button.style = "top:0;right:50%;position:absolute;z-index: 9999"
document.body.appendChild(dev_bottom_button);
$(dev_top_button).click(function(){
$("#debug_top").toggle();
});
$(dev_bottom_button).click(function(){
$("#debug_bottom").toggle();
});
});
и это на самой странице:
<code> echo "<div class='debug_outer' id='debug_top'><h3>Developer Information</h3><div class='debug_inner'><pre>";
if (isset($GLOBALS['_TROUBLESHOOTING']) && is_array($GLOBALS['_TROUBLESHOOTING']) && ! empty($GLOBALS['_TROUBLESHOOTING'])) {
$troubleshooting_return_array = $GLOBALS['_TROUBLESHOOTING'];
} else {
$troubleshooting_return_array = ['Empty'];
}
echo print_r(["_COOKIE" => $_COOKIE, "_REQUEST" => $_REQUEST, "_SESSION" => $_SESSION, "_TROUBLESHOOTING" => $troubleshooting_return_array, "_SERVER" => $_SERVER, "_GLOBALS" => $GLOBALS], true);
echo '
';
(и аналогичный вывод в конце страницы)
Таким образом, для большинства страниц этот метод быстрой проверки переменных страницы отлично работает. И в результате появляется приятная кнопка javascript, где я могу быстро проверить, какие у меня начальные и конечные переменные на странице, наряду с массивом _TROUBLESHOOTING, я могу легко вывести любые значения, которые мне нужны, для быстрого просмотра начала и конца страницы.
Так что эта система работает довольно хорошо для меня уже довольно давно. Проблема, однако, связана с вызовами ajax. Я пробовал несколько разных способов, но вызовы ajax обычно хотят и ожидают данные в определенном формате. Я хочу сделать третий элемент div для отображения данных вместе с кнопкой для этого, но мне сложно разобраться, как добавить любые выходные данные вместе с вызовом ajax, и он имеет вызывается при вызове ajax, чтобы узнать, как меняются все переменные, и отследить все, что я устраняю. Конечно, я могу помещать выходные данные в журналы ошибок каждый раз, но это намного медленнее в рабочем процессе и требует просмотра всех выходных данных с момента последней очистки журналов, а не просто просмотра моих данных, когда я ими манипулирую.
Есть ли у кого-нибудь хорошая идея, чтобы использовать Ajax-вызовы для использования этих существующих типов вызовов? Потому что путаница с возвращенными значениями вызовов ajax всегда будет приводить к неверным данным для самого вызова ajax.