【PHP8.x】C14NFileメソッドの使い方

C14NFileメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

C14NFileメソッドは、PHPのDOMNodeクラスに属し、XML文書の正規化(Canonicalization)を行い、その結果を指定されたファイルに書き出すためのメソッドです。XMLの正規化とは、XML文書の表現に影響を与えない構文上の差異(例えば、属性の順序、名前空間の宣言方法、空白文字の扱いなど)を標準化し、論理的に同じ内容を持つXML文書が常に同じバイト列に変換されるようにする処理を指します。これにより、デジタル署名などのセキュリティ関連の操作において、XML文書の内容が改ざんされていないことを保証するために利用されます。

このメソッドは、対象となるDOMノードとその子孫ノードを、Canonical XML 1.0の規則に従って正規化します。正規化されたXMLデータは、第一引数で指定したファイルパス($uri)に直接保存されます。第二引数の$exclusivetrueに設定することで、排他的正規化(Exclusive XML Canonicalization)を適用でき、第三引数の$with_commentstrueにすると、出力にコメントを含めることが可能です。さらに、XPath式や名前空間プレフィックスの配列を渡すことで、正規化の対象となる要素をより細かく指定できます。

C14NFileメソッドは、処理が成功した場合、ファイルに書き込まれたバイト数を整数値で返します。何らかの理由で処理が失敗した場合はfalseを返します。この機能は、特にWebサービスやセキュリティシステムでXMLデータを扱う際に、データの整合性を保証するために非常に重要な役割を果たします。

構文(syntax)

1<?php
2// DOMNode クラスのインスタンスが必要です。
3// DOMDocument は DOMNode を継承しているため、ここでは DOMDocument のインスタンスを使用します。
4$domNodeInstance = new DOMDocument();
5$domNodeInstance->loadXML('<root><example_element/></root>');
6
7// C14NFile メソッドの構文
8// string $uri            : 出力先のURI (通常はファイルパス)
9// bool $exclusive       : オプション - 排他的正規化を行うか (デフォルトは false)
10// bool $with_comments   : オプション - コメントを含めるか (デフォルトは false)
11$uri = 'output_normalized.xml';
12$exclusive = false;
13$with_comments = false;
14
15$bytesWritten = $domNodeInstance->C14NFile($uri, $exclusive, $with_comments);
16
17// オプション引数を省略した呼び出し方
18// $bytesWritten = $domNodeInstance->C14NFile($uri);
19?>

引数(parameters)

string $uri, bool $exclusive = false, bool $with_comments = false, ?array $xpath = null, ?array $ns_prefixes = null

  • string $uri: 正規化するXML文書のURIを指定する文字列
  • bool $exclusive = false: 排他的正規化を行うかどうかを指定する真偽値
  • bool $with_comments = false: コメントを含めて正規化するかどうかを指定する真偽値
  • ?array $xpath = null: 正規化の対象とするノードをXPathで指定する配列
  • ?array $ns_prefixes = null: 名前空間のプレフィックスを正規化の際に使用するかどうかを指定する配列

戻り値(return)

bool

C14NFileメソッドは、ノードを正規化してファイルに保存できるかどうかを示す真偽値(trueまたはfalse)を返します。

【PHP8.x】C14NFileメソッドの使い方 | いっしー@Webエンジニア