Я включаю эту простую функцию обработки ошибок для форматирования ошибок:
date_default_timezone_set('America/New_York'); // Create the error handler. function my_error_handler ($e_number, $e_message, $e_file, $e_line, $e_vars) { // Build the error message. $message = "An error occurred in script '$e_file' on line $e_line: \n<br />$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>" . print_r ($e_vars, 1) . "</pre>\n<br />"; echo '<div id="Error">' . $message . '</div><br />'; } // End of my_error_handler() definition. // Use my error handler. set_error_handler ('my_error_handler');
Когда я включаю его в скрипт со следующими
$dom = new DOMDocument(); $dom->loadHTML($output); $xpath = new DOMXPath($dom);
и проанализируйте веб-страницу (в этом случае http://www.ssense.com/women/designers/all/all/page_1 , с которой у меня есть разрешение на разбор). Я получаю ошибки, такие как
AN ERROR OCCURRED IN SCRIPT '/HSPHERE/LOCAL/HOME/SITE.COM/SCRIPT.PHP' ON LINE 59: DOMDOCUMENT::LOADHTML(): HTMLPARSEENTITYREF: NO NAME IN ENTITY, LINE: 57
а также
AN ERROR OCCURRED IN SCRIPT '/HSPHERE/LOCAL/HOME/SITE.COM/SCRIPT.PHP' ON LINE 59: DOMDOCUMENT::LOADHTML(): TAG NAV INVALID IN ENTITY, LINE: 58
Есть много ошибок, и страница никогда не заканчивает загрузку. Однако, если я не включаю этот обработчик ошибок, строка
$dom->loadHTML($output);
не вызывает никаких ошибок, и я получаю результаты, которые я ожидаю в течение нескольких секунд. Я предполагаю, что обработчик ошибок улавливает предупреждения, связанные с loadHTML (), которые иначе не сообщаются. (Даже если я использую
@$dom->loadHTML($output);
он по-прежнему сообщает об ошибках.) Как я могу изменить обработчик ошибок для размещения вызовов loadHTML () или иным образом исправить эту проблему?