PHP에서 XML 파일을 처리 할 때 특히 XML이 불완전하거나 잘못된 경우 구문 분석 오류가 발생합니다. 기본적으로 LIBXML 확장자는 오류 메시지를 직접 출력하여 혼란스러운 페이지 디스플레이 또는 민감한 정보를 누출 할 수 있습니다. PHP는 이러한 오류를 우아하게 잡고 처리하기 위해 Libxml_use_internal_errors 기능을 제공하여 오류를 수집하고 직접 출력을 피할 수 있으므로보다 유연한 오류 처리를 달성 할 수 있습니다.
이 기사는 libxml_use_internal_errors 함수를 사용하는 방법을 자세하게 소개하고 샘플 코드를 결합하여 실제 개발에서 XML 구문 분석 오류를 잡고 처리하는 방법을 보여줍니다.
libxml_use_internal_errors는 libxml의 내부 오류 처리 메커니즘을 가능하게하거나 비활성화하는 PHP의 함수입니다. 활성화 된 후 LIBXML은 직접 오류를 출력하지 않지만 오류 정보를 저장합니다. 이 프로그램은 처리를위한 다른 기능을 통해 이러한 오류를 얻을 수 있습니다.
기능 프로토 타입 :
bool libxml_use_internal_errors ([ bool $use_errors = true ] )
매개 변수 $ use_errors : 내부 오류 처리를 활성화할지 여부, 기본값으로 true .
반환 값 : 통화 전 오류 처리 상태 (부울 값).
기본적으로 XML 구문 분석이 실패하면 오류가 직접 인쇄되어 페이지 레이아웃이 손상되고 오류에 대한 세심한 제어가 부족할 수 있습니다.
libxml_use_internal_errors (true)를 사용한 후에는 구문 분석 오류가 직접 출력되지 않지만 캐시됩니다. libxml_get_errors () 를 통해 오류 목록을 가져오고 필요에 따라 형식 또는 기록을 얻을 수 있습니다.
다음 예제는 libxml_use_internal_errors를 사용하여 XML 문자열을 구문 분석하고 오류가 발생할 때 오류 메시지를 캡처하는 방법을 보여줍니다.
<?php
// 할 수 있게 하다 libxml 내부 오류 처리
libxml_use_internal_errors(true);
// 구문 분석 XML 끈(잘못 작성되었습니다)
$xmlString = <<<XML
<root>
<item>Example</item
</root>
XML;
// 새로운 것을 만들어냅니다 DOMDocument 물체
$doc = new DOMDocument();
// 로드하십시오 XML 끈
if (!$doc->loadXML($xmlString)) {
echo "XML 분석이 실패했습니다,오류 메시지는 다음과 같습니다:<br>";
// 오류를 가져 와서 가로 릅니다
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo displayLibxmlError($error);
}
// 지우기 오류 캐시
libxml_clear_errors();
} else {
echo "XML 성공적인 분석!";
}
/**
* 형식 및 디스플레이 libxml 오류 메시지
*
* @param LibXMLError $error
* @return string
*/
function displayLibxmlError($error) {
$return = "<br>";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}
$return .= trim($error->message);
$return .= " on line $error->line";
return $return;
}
?>
위 코드에서 :
libxml_use_internal_errors (true)를 사용하여 오류 수집을 활성화하십시오.
domdocument :: loadxml 로 XML을로드하고 실패하면 libxml_get_errors 에 전화하여 오류를 얻습니다.
사용자 정의 함수 displayLibxMlerror를 통한 형식 및 출력 오류 정보.
구문 분석 후 libxml_clear_errors () 에 전화하여 오류 버퍼를 지 웁니다.
실제 프로젝트에서 XML은 대부분 파일에서 읽히고 유사한 방법을 사용할 수 있습니다.
<?php
libxml_use_internal_errors(true);
$xmlFile = 'https://gitbox.net/example.xml';
$doc = new DOMDocument();
if (!$doc->load($xmlFile)) {
echo "짐 XML 파일이 실패했습니다,오류는 다음과 같습니다:<br>";
foreach (libxml_get_errors() as $error) {
echo displayLibxmlError($error);
}
libxml_clear_errors();
} else {
echo "XML 文件짐成功。";
}
function displayLibxmlError($error) {
$return = "<br>";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}
$return .= trim($error->message);
$return .= " on line $error->line";
return $return;
}
?>
여기서 샘플 URL의 도메인 이름을 요구 사항을 충족하는 gitbox.net 으로 바꾸십시오.
libxml_use_internal_errors (true)는 XML 구문 분석 오류를 포착하는 핵심입니다.
오류 메시지를 직접 출력하여 프로그램 제어 및 로깅에 편리합니다.
libxml_get_errors () 와 libxml_clear_errors ()를 결합하면 오류 정보를 효과적으로 관리 할 수 있습니다.
문자열, 파일 또는 원격 주소에서 XML이로드되는 다양한 시나리오에 적합합니다.
이 기능의 사용을 마스터하면 개발자가보다 강력하고 친근한 XML 처리 코드를 작성하는 데 도움이 될 수 있습니다.