Я использовал для рендеринга весь мой html в php, а затем после завершения эхо-строки html. Когда на моем тестовом сайте произошла ошибка php (это ошибка во время разработки, например, ошибка с ошибкой), я бы повторил ошибку и ушел. Очень легко увидеть ошибку и быстро ее исправить. Когда сайт будет активным, я покажу общую ошибку и отправлю информацию об ошибке по электронной почте. Эти живые ошибки менее распространены, и письмо является идеальным.
В настоящее время я перехожу к рендерингу страницы с помощью javascript / jquery. Теперь, когда возникает ошибка PHP, ошибка не отображается на странице. Я могу получить сообщение об ошибке по электронной почте, но иногда даже не подозреваю, что произошла ошибка. В консоли нет ошибок, и страница, за исключением верхнего и нижнего колонтитула, будет пустой.
Следовательно, для того, чтобы затем показать ошибки php, я сначала делаю весь свой PHP-код. Ошибки будут отображаться так, как ожидалось. В php я повторяю html верхнего и нижнего колонтитула. Затем код javascript работает с содержимым div. Любые ошибки php после этого момента остаются невидимыми или их трудно найти. Я могу отправить сообщение об ошибке, которое теперь является моим методом отладки – кажется неправильным.
Вот мой текущий обработчик ошибок:
$message = "<p>Nice Job moron: A pos error occurred in script '$e_file' on line $e_line: $e_message\n<br />"; // Add the date and time: $message .= "Date/Time: " . date('njY H:i:s') . "\n<br />"; // Append $e_vars to the $message: $message .= "<pre>Error Variables:<br />" . print_r ($e_vars, 1) . "</pre>\n</p>"; // what is the url? $message .= "<p><pre>URL: " .getPageURL() . "</pre>\n</p>"; $message .= '<pre>Session variables:<br />' . print_r($_SESSION,1). "</pre>\n</p>"; $message .= '<pre>Bactrace:<br />' . print_r(debug_backtrace(),1). "</pre>\n</p>"; if (!LIVE) { // Send an email to the admin: mail(SUPPORT_EMAIL, 'TEST Site Error!', $message, 'From: ' . SUPPORT_EMAIL); // Development (print the error). echo '<div class="error">' . $message . '</div><br />'; } else { // Send an email to the admin: mail(SUPPORT_EMAIL, 'Site Error!', $message, 'From: ' . SUPPORT_EMAIL); // Only print an error message if the error isn't a notice: include(HEADER_FILE); if ($e_number != E_NOTICE) { echo '<div class="error">A system error occurred. We apologize for the inconvenience.</div><br />'; } echo '<div class="error">An Error has occurred and has been emailed to the administrator. Please note the conditions that caused this error and send a note to the administrator</div><br />'; }
Вот обработчик ошибок, который я нашел в stackoverflow из вопроса. Как показать все ошибки времени выполнения PHP в браузере с помощью Javascript. Я ожидал бы, что это сработает, однако это не так. Похоже, что выполнение сценариев прекращается, и никакой рендеринг html не происходит.
//new error handling $("#content").append('<p id="PHPError"> </p>'); $("#content").append('<button onclick="PHPErrors()">Show me all PHP runtime errors</button>'); var nerrors = 0; // PHP Errors count in Javascript function PHPErrors() { // Javascript Function that wraps the PHP Code <?php // MyErrorHandler is my function that my custom error handler // uses with error parameters in that given order. function myErrorHandler($errno, $errstr, $errfile, $errline) { echo 'ERror'; echo "document.getElementById('PHPError').innerHTML += " . "\"$errno: $errstr ($errline)<br>\";\r\n"; echo "nerrors = nerrors + 1;\r\n"; return true; } // That's the line the set my custom new error-handling // disabling the default error handling $old_error_handler = set_error_handler("myErrorHandler"); // Below random PHP code full of errors $b = $a; // PHP Error 1 $c = $a +1; // PHP Error 2 $d = $a + 1; // PHP Error 3 $e = $_SESSION['glove']; // PHP Error 4 ?> // No PHP runtime error deserves a nice messagen if (nerrors===0) { document.getElementById('PHPError').innerHTML = "Well done! PHP without errors."; } } // End Javascript Function $(document).ready(function() {PHPErrors()});
Ниже приведен длинный вывод источника страницы. Игнорируя некоторые данные и функции, я вижу вывод заголовка и нижнего колонтитула, затем начинается сценарий. Он умирает после вызова функции php с неопределенной переменной. Я также отмечаю, что мои теги скриптов повсюду, может быть проблемой.
<!DOCTYPE html > <html lang="en"> <head> <meta charset="utf-8"> <title>Create MFG Brand</title> <link rel="stylesheet" href="https://www.embrasse-moi.com/POS_TEST/Engine/includes/css/style.css" type="text/css" media="all" /> <script>var POS_URL ='https://www.embrasse-moi.com/POS_TEST';</script><script>var LOGOUT_URL ='https://www.embrasse-moi.com/POS_TEST/Engine/login/logout.php';</script><script>POS_ENGINE_URL = "https://www.embrasse-moi.com/POS_TEST/Engine"</script> <script type="text/javascript" src="https://www.embrasse-moi.com/POS_TEST/3rdParty/jQuery/jquery-1.11.2.min.js"></script> <link type="text/css" href="https://www.embrasse-moi.com/POS_TEST/3rdParty/jQueryUI/jquery-ui-1.11.4.custom/jquery-ui.css" rel="Stylesheet" /> <script type="text/javascript" src="https://www.embrasse-moi.com/POS_TEST/3rdParty/jQueryUI/jquery-ui-1.11.4.custom/jquery-ui.min.js"></script> <script src="https://www.embrasse-moi.com/POS_TEST/Engine/includes/javascript/javascript_library.2015.06.02.js"></script> <script src="https://www.embrasse-moi.com/POS_TEST/Engine/includes/javascript/check_login.2013.02.16.js"></script> </head> <body style="background-color:rgb(255,255,125);"> <div id="header" class =></div> <div id="content" onmousemove ="UserInput()" onclick="UserInput()" onkeypress="UserInput()" onscroll="UserInput()"> <script src="brand.2015.08.03.js"></script> <script src="https://www.embrasse-moi.com/POS_TEST/Engine/includes/javascript/mySQLTable.2015.08.04.js"></script> </div><div id="footer"> </div> </body> </html> <script> $("#content").append('<p id="PHPError"> </p>'); $("#content").append('<button onclick="PHPErrors()">Show me all PHP runtime errors</button>'); var nerrors = 0; function PHPErrors() { ERrordocument.getElementById('PHPError').innerHTML += "8: Undefined variable: a (113)<br>"; nerrors = nerrors + 1; ERrordocument.getElementById('PHPError').innerHTML += "8: Undefined variable: a (114)<br>"; nerrors = nerrors + 1; ERrordocument.getElementById('PHPError').innerHTML += "8: Undefined variable: a (115)<br>"; nerrors = nerrors + 1; ERrordocument.getElementById('PHPError').innerHTML += "8: Undefined index: glove (116)<br>"; nerrors = nerrors + 1; if (nerrors===0) { document.getElementById('PHPError').innerHTML = "Well done! PHP without errors."; } } $(document).ready(function() {PHPErrors()}); var type = "view"; var pos_manufacturer_id = 7; var mfg_tbl_def = [json data sent by php]; var mfg_data = {json data from php}; var account_link = [json data from php]; var act_table_def = [json data from php]; var account_select_table_def = ERrordocument.getElementById('PHPError').innerHTML += "8: Undefined variable: table_object_name (285)<br>"; nerrors = nerrors + 1;