【PHP8.x】C14NFileメソッドの使い方
C14NFileメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
C14NFileメソッドは、DOMCdataSectionクラスに属し、現在のCDATAセクションを含むDOMツリーの一部を、XMLの正規化(Canonical XML、C14N)ルールに従って指定されたファイルに保存するメソッドです。XMLの正規化とは、XML文書のさまざまな表記上の違い(例えば、空白文字の扱い方、属性の順序、名前空間の宣言方法など)を吸収し、その内容が論理的に同一であることを保証するための標準的な処理を指します。これにより、異なる環境で作成されたXML文書であっても、その本質的な内容が変わっていないかを正確に比較したり、デジタル署名の検証を行ったりすることが可能になります。
このメソッドは、引数として出力先のファイルパスを受け取り、さらに正規化のオプション(排他的正規化を行うか否かなど)や、コメントノードを含めるかどうかのフラグを指定することができます。指定されたDOMノード以下の構造を、これらのオプションに基づいて正規化されたXML形式でファイルに書き出します。
しかしながら、このC14NFileメソッドはPHP 8.0.0で非推奨となり、PHP 9.0.0で削除されました。そのため、最新のPHP環境での利用は推奨されません。現在、同様の機能を実現するには、まずDOMNodeクラスが提供するC14N()メソッドを使用して正規化されたXMLを文字列として取得し、その結果の文字列をfile_put_contents()のようなファイル書き込み関数を用いてファイルに保存する方法が推奨されています。この代替手法を用いることで、システムの互換性を保ちつつ、XMLの正規化された形式をファイルに出力することが可能です。
構文(syntax)
1$domCdataSectionInstance->C14NFile(string $uri, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null);
引数(parameters)
string $uri, bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null
- string $uri: C14N化するXML文書のURIを指定する文字列
- bool $exclusive = false: 排他的C14Nを行うかどうかを指定する真偽値。デフォルトはfalse
- bool $withComments = false: コメントを含めてC14Nを行うかどうかを指定する真偽値。デフォルトはfalse
- ?array $xpath = null: C14N化の対象をXPath式で絞り込むための配列。nullの場合は文書全体を対象とする
- ?array $nsPrefixes = null: 名前空間プレフィックスを明示的に指定するための連想配列。nullの場合は自動的に決定される
戻り値(return)
int|false
このメソッドは、C14N (Canonical XML) 形式でセクションの内容をファイルに書き込んだ場合、その書き込みバイト数を整数で返します。書き込みに失敗した場合は false を返します。