XMLファイルをPHPで処理する場合、特に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処理コードを作成するのに役立ちます。