오류 관리는 PHP를 사용하여 XML을 처리 할 때 핵심 링크입니다. PHP는 XML 오류와 관련된 다양한 기능을 제공하며, 그 중 XML_GET_ERROR_CODE () 및 LIBXML_CLEAR_ERRORS ()는 XML 구문 분석 오류를 디버깅하고 처리 할 때 특히 중요합니다. 올바른 이해와이를 함께 사용하면 오류 스택의 오염을 피하고 프로그램 견고성과 유지 관리를 향상시킬 수 있습니다.
PHP는 LIBXML 라이브러리를 사용하여 XML을 구문 분석하고 내부 오류 스택을 통해 오류 정보를 수집합니다. 구문 분석 작업에서 오류가 발생할 때마다 이러한 오류는 스택에 축적됩니다. 시간이 지남에 따라 정리되지 않으면 다음 분석에서 "잔여"오류가 발생하여 혼란과 부정확 한 오류 처리가 발생합니다.
이것이 또한 libxml_clear_errors () 가 매우 중요한 기능인 이유입니다. 현재 오류 스택을 지우는 데 사용되어 다음 파싱이 "깨끗한"상태로 시작하도록합니다.
우선, XML_GET_ERROR_CODE ()는 이전 XML 확장 (즉, XML_PARSER_CREATE () 파서를 사용하는 방법)에 적합하지만 libxml_get_errors () 및 libxml_plear_errors () 와 libxml_plear_errors (libxml_plear_errors () 는 libxml extensions에 사용되며 Domnly 와 함께 사용되어 있습니다. 간단한 렉스 .
이 둘은 혼합물에 사용될 수 없지만 작용 메커니즘을 이해하고 다른 맥락에서 적절한 기능을 선택할 수 있습니다.
다음 예제는 libxml_clear_errors ()를 사용하여 domdocument 로 제기 된 오류를 정리하는 방법을 보여주고 오류 메시지를 우아하게 처리하는 방법을 설명합니다.
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadXML('<root><invalid></root>'); // 실수:레이블이 닫히지 않았습니다
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo displayXmlError($error), "\n";
}
// 清理실수堆栈
libxml_clear_errors();
도우미 함수 displayxmlerror ()는 오류의 출력을 아름답게 할 수 있습니다.
function displayXmlError($error)
{
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return = "경고하다 {$error->code}: ";
break;
case LIBXML_ERR_ERROR:
$return = "실수 {$error->code}: ";
break;
case LIBXML_ERR_FATAL:
$return = "致命실수 {$error->code}: ";
break;
}
$return .= trim($error->message);
$return .= " 좋아요: {$error->line}, 목록: {$error->column}";
return $return;
}
여기서는 libxml_use_internal_errors (true)를 활성화하여 브라우저에 직접 출력하는 대신 오류를 잡을 수 있습니다. 그런 다음 모든 오류 정보는 libxml_get_errors () 를 통해 얻어지고 수동으로 처리 한 다음 Libxml_clear_errors ()를 통해 오류 스택을 지우려면 후속 XML 구문 분석과의 간섭이 없도록합니다.
이벤트 중심 레거시 XML 구문 분석 방법을 사용하는 경우 :
$parser = xml_parser_create();
if (!xml_parse($parser, '<root><invalid></root>')) {
$errorCode = xml_get_error_code($parser);
$errorString = xml_error_string($errorCode);
echo "XML 실수: {$errorString}";
}
xml_parser_free($parser);
여기에서 xml_get_error_code ()는 최신 오류 코드를 가져 오는 데 사용됩니다. 그러나이 방법은 여러 오류를 축적하지 않으므로 청소에 libxml_clear_errors ()를 사용할 필요가 없습니다.
적절한 파서를 선택하십시오 : domdocument 또는 simplexml을 사용하여 더 강력하고 관리하기 쉬운 libxml_* 함수와 결합하십시오.
처리 직후 정리 : libxml_get_errors ()를 호출 한 후에는 스택을 지우려면 libxml_clear_errors ()를 사용해야합니다.
캡슐화 오류 처리 로직 : 기능의 구문 분석 및 오류 처리를 캡슐화하여 재사용하고 코드를 깔끔하게 유지할 수 있습니다.
테스트 및 디버깅 : 디버그 환경에서 상세한 오류 출력을 활성화하고 생산 환경에서 직접 출력을 비활성화하며 로그 만 있습니다.
XML을 처리하는 데 어떤 방식으로 사용하든 오류 스택을 이해하고 정리하는 것이 프로그램 안정성을 보장하는 핵심 단계입니다. libxml_clear_errors ()를 사용하면 오류 스택 간섭을 효과적으로 피할 수 있으며 xml_get_error_code ()는 구식 파서에서 빠른 위치에 적합합니다. 합리적 으로이 두 가지를 선택하고 결합하면보다 강력하고 유지 관리 가능한 XML 처리 로직을 구축하는 데 도움이됩니다.
추가 XML 처리 관행 및 예외 관리 전략을 보려면 https://gitbox.net/articles/php-xml-error handling을 방문하십시오.