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

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

作成日: 更新日:

基本的な使い方

C14NFileメソッドは、XML文書の正規化(Canonical XML、C14N)を実行し、その結果を指定されたファイルに書き出すメソッドです。XML正規化とは、XML文書の表現形式を一意に定めるための国際標準です。具体的には、空白文字の扱い、属性の順序、名前空間の宣言方法など、論理的には同じでも異なる物理的表現となり得るXMLの差異を吸収し、常に同じバイト列に変換することで、文書の比較やデジタル署名の検証における信頼性を確保します。

このメソッドは、PHPのDOM拡張機能において、XMLノードの基本となるDOMNodeクラスの一部として提供されていました。Dom\AttrクラスはDOMNodeを継承しているため、以前のPHPバージョンではDom\Attrオブジェクトに対してもこの機能が利用できると解釈されることがありました。

しかし、PHP 8.0のリリースからは、このC14NFileメソッドを含むXML正規化関連のメソッドは非推奨(deprecated)とされました。さらに、PHP 8.2のバージョンからは、これらのメソッドは完全に削除されています。したがって、現在PHP 8環境でシステム開発を行う際には、Dom\AttrクラスのインスタンスからC14NFileメソッドを呼び出すことはできません。呼び出しを試みると、未定義のメソッドとしてエラーが発生します。もしXMLの正規化が必要な場合は、他の代替手段やライブラリの利用を検討する必要があります。

構文(syntax)

1<?php
2// Dom\Attr クラスのインスタンスを準備する例
3$document = new Dom\Document();
4$element = $document->createElement('root');
5$attribute = $document->createAttribute('id');
6$attribute->value = 'example-id';
7$element->appendChild($attribute);
8$document->appendChild($element);
9
10$domAttrInstance = $element->attributes->getNamedItem('id');
11
12// Dom\Attr::C14NFile メソッドの構文
13// 第一引数: 出力ファイルのURI (string)
14// 第二引数: 排他的正規化を行うか (bool, オプション, デフォルトは false)
15// 第三引数: コメントを含めるか (bool, オプション, デフォルトは false)
16if ($domAttrInstance instanceof Dom\Attr) {
17    $domAttrInstance->C14NFile('output.xml', true, false);
18}

引数(parameters)

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

  • string $uri: 保存するXMLファイルのURIを指定します。
  • bool $exclusive = false: trueに設定すると、属性のみを排他的に保存します。
  • bool $with_comments = false: trueに設定すると、コメントも一緒に保存します。
  • ?array $xpath = null: 指定したXPath条件に一致するノードのみを処理します。
  • ?array $ns_prefixes = null: 名前空間プレフィックスを配列で指定します。

戻り値(return)

int|false

C14NFileメソッドは、属性をCANONICAL XML形式でファイルに書き込む際に発生するエラーコードを整数で返します。書き込みが成功した場合はfalseを返します。

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