현재 위치: > 최신 기사 목록> XML_PARSE 및 XML_GET_ERRORS를 사용하여 구문 분석 오류를 캡처하십시오

XML_PARSE 및 XML_GET_ERRORS를 사용하여 구문 분석 오류를 캡처하십시오

M66 2025-04-28

PHP에서 XML 데이터를 처리 할 때 XML 문자열을 XML_PARSE 기능을 사용하여 구문 분석 할 수 있습니다. 그러나 XML 파일은 종종 구분되지 않은 태그 또는 문자 인코딩 오류와 같은 포맷 문제가 있으므로 구문 분석 장애로 이어질 수 있습니다. 이러한 오류를 우아하게 잡고 처리하기 위해 XML_PARSE , XML_GET_ERROR_CODE , XML_ERROR_STRINGXML_GET_CURRENT_LINE_NUMBER 와 같은 함수를 사용할 수 있습니다.

이러한 기능을 사용하여 XML 구문 분석 오류를 감지하고보고하는 방법에 대한 완전한 예를 살펴 보겠습니다.

예 : XML 구문 분석 오류 캡처

 <?php
// 오류를 시뮬레이션하십시오 XML 끈(닫힌 태그 누락)
$xmlData = <<<XML
<note>
    <to>사용자</to>
    <from>관리자</from>
    <heading>상기시키다</heading>
    <body>이것은 테스트 메시지입니다
</note>
XML;

// 만들다 XML 파서
$parser = xml_parser_create();

// 设置파서选项
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); // 레이블 케이스를 유지하십시오
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);   // 공백 문자를 무시하십시오

// 구문 분석하십시오 XML 데이터
if (!xml_parse($parser, $xmlData, true)) {
    $errorCode = xml_get_error_code($parser);
    $errorMessage = xml_error_string($errorCode);
    $lineNumber = xml_get_current_line_number($parser);
    
    echo "? 분석 XML 오류가 발생했습니다:\n";
    echo "오류 메시지:$errorMessage\n";
    echo "오류 코드:$errorCode\n";
    echo "오류 행 카운트:$lineNumber\n";

    // 오류 로깅,或者引导사용자查看帮助页面
    // 예:로그 오류 로그 파일에 오류가 발생합니다
    error_log("XML 분석错误:$errorMessage 에서 $lineNumber 좋아요", 3, "/var/log/xml_errors.log");

    // 또는 도움말 링크를 표시합니다
    echo "도움말 문서를 참조하십시오:https://m66.net/xml/help\n";
} else {
    echo "? XML 분석成功!\n";
}

// 释放파서资源
xml_parser_free($parser);
?>

분석

  1. xml_parser_create ()
    나중에 XML 문자열을 구문 분석하는 데 사용되는 XML 파서 리소스를 만듭니다.

  2. xml_parse ()
    제공된 XML 문자열을 구문 분석합니다. 구문 분석이 실패하면 거짓이 반환됩니다.

  3. xml_get_error_code () / xml_error_string ()
    오류 코드를 가져 와서 읽을 수있는 오류 정보로 변환하십시오.

  4. xml_get_current_line_number ()
    오류가 발생하면 라인 번호를 얻으십시오. 이는 문제의 빠른 위치를 용이하게합니다.

  5. XML_PARSER_FREE ()
    메모리 누출을 피하기 위해 구문 분석 후 릴리스 리소스가 완료됩니다.

응용 프로그램 시나리오

이 방법은 다음 시나리오에 매우 적합합니다.

  • 사용자가 XML 파일을 업로드 할 때 확인 형식;

  • 타사 인터페이스가 XML 데이터를 반환 할 때 고장 내성 처리;

  • 자동화 된 데이터 가져 오기 시스템에서 로직 사전 점검;

  • 온라인 편집기에서 XML 형식의 즉시 확인.

  • DOM 또는 SimpleXML을 사용하여 LIBXML 확장을 사용하면보다 고급 XML 작동 방법을 제공하지만 대규모 데이터 스트림을 처리 할 때 XML_PARSE 와 같은 기본 원래 파서가 더 효율적입니다.

  • 외부 XML 데이터를 직접 신뢰하지 마십시오. 형식 오류 외에도 악성 엔티티 (XXE 공격)에 주입 될 수도 있습니다. 엔티티 구문 분석 기능을 끄는 것을 잊지 마십시오.