【PHP8.x】DOMProcessingInstruction::C14NFile()メソッドの使い方
C14NFileメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
『C14NFileメソッドは、DOMProcessingInstructionオブジェクトが表すXML処理命令ノードをW3Cの仕様に準拠した正規形(Canonical Form)に変換し、その結果を指定されたファイルに保存する処理を実行するメソッドです。XMLの正規化とは、意味的な内容を変えることなく、XML文書を一貫性のあるバイト表現に変換するプロセスを指します。これにより、例えばデジタル署名の検証のように、異なる環境で生成されたXML文書であってもバイトレベルでの厳密な比較が可能になります。このメソッドは、同じクラスに属するC14Nメソッドと似ていますが、C14Nメソッドが正規化された結果を文字列として返すのに対し、C14NFileメソッドは直接ファイルへ出力する点が異なります。第一引数で出力先のファイルURIを指定し、オプションの引数を利用して、コメントノードを含めるか、排他的正規化を適用するかといった詳細な制御も可能です。処理に成功した場合は書き込まれたバイト数を、失敗した場合はfalseを返します。
構文(syntax)
1<?php 2// DOMDocumentと処理命令(Processing Instruction)ノードを準備します 3$doc = new DOMDocument(); 4$doc->loadXML('<?xml version="1.0"?><?target data?><root/>'); 5$piNode = $doc->childNodes[1]; // <?target data?> を取得 6 7// 出力先のファイルパス 8$filePath = 'canonicalized_pi.xml'; 9 10// 処理命令ノードを正規化(C14N)し、指定したファイルに保存します 11$bytesWritten = $piNode->C14NFile($filePath); 12?>
引数(parameters)
string $uri, bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null
- string $uri: 正規化するXML文書のURIを指定します。
- bool $exclusive = false: 排他的正規化を行うかどうかを指定します。trueの場合、指定されたXPath式に一致するノードのみが正規化されます。
- bool $withComments = false: コメントを含めて正規化するかどうかを指定します。trueの場合、コメントも正規化対象となります。
- ?array $xpath = null: 排他的正規化を行う場合に、正規化対象とするノードを指定するためのXPath式を格納した配列です。
- ?array $nsPrefixes = null: 名前空間のプレフィックスを正規化対象として指定するための配列です。
戻り値(return)
int|false
C14NFileメソッドは、DOMツリーの正規化処理が成功した場合は整数(1)を返します。処理が失敗した場合はfalseを返します。