ファイルが壊れていてもXMLファイルを読み取る方法はありますか?
ファイルの書き込み中にXMLファイルを取得して出力しようとしていますが、ルート要素が書き込まれている途中で閉じられていないため、壊れたエラーが発生します。
とにかくこれを達成する方法はありますか?
$broken ='<root>
<item>foo</item>';
$d = new DOMDocument();
$d->loadXML($broken);
echo $d->saveXML($d); // useless, only prologue
$d->recover = true; // <-- it's limited, but will try its best.
$d->loadXML($broken);
echo $d->saveXML($d);
/*
* <?xml version="1.0" encoding="UTF-8"?>
* <root>
* <item>foo</item></root>
*/
ファイルロックを使用するか、書き込みをアトミックにして、他のプロセスが半分書き込まれたファイルを認識しないようにします。両方のアプローチのコードについては、この回答の中央を参照してください。
また、同時実行性を処理し、一貫した読み取りと書き込みを提供するもの、つまりデータベースを介して書き込みを仲介することもできます。本格的なスタンドアロンプロセスである必要はありません。sqliteまたは単純なKey-Valueストアを使用できます。