【PHP8.x】C14NFileメソッドの使い方
C14NFileメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
『C14NFileメソッドは、Dom\DocumentTypeオブジェクトが表す文書型定義ノードを正規化し、その結果を指定されたファイルに出力するメソッドです。ここで言う正規化(C14N)とは、XML文書の論理的な意味を変えることなく、その物理的な表現を標準的な形式に統一する処理を指します。これにより、例えば属性の順序や空白の扱いなどが統一され、内容が同じであれば誰が処理しても同一のバイト表現となることが保証されます。このメソッドは、出力先のファイルパスを必須の引数として受け取ります。さらに、オプションの引数を指定することで、特定の名前空間のみを対象とする排他的正規化を行うか、コメントを出力に含めるかといった詳細な動作を制御することが可能です。処理が成功した場合はファイルに書き込まれたバイト数を返し、失敗した場合はfalseを返します。主にXML署名などで文書の一貫性を厳密に検証する際、文書型定義部分の標準的な表現をファイルとして取得するために利用されます。
構文(syntax)
1<?php 2 3// DTD (文書型定義) を含むXML文字列を準備します 4$xmlString = <<<XML 5<?xml version="1.0"?> 6<!DOCTYPE root [<!ELEMENT root ANY>]> 7<root></root> 8XML; 9 10// DOMDocumentオブジェクトを作成し、XMLを読み込みます 11$doc = new DOMDocument(); 12$doc->loadXML($xmlString); 13 14// XMLからDocumentTypeノードを取得します 15// $doc->doctype は Dom\DocumentType のインスタンスです 16$doctype = $doc->doctype; 17 18// DocumentTypeノードを正規化(C14N)し、その結果をファイルに保存します 19$doctype->C14NFile('output_doctype.xml'); 20 21?>
引数(parameters)
string $uri, bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null
- string $uri: 正規化するXML文書のURI
- bool $exclusive = false: 排他正規化を有効にするかどうか(デフォルトは無効)
- bool $withComments = false: コメントも含めて正規化するかどうか(デフォルトは無効)
- ?array $xpath = null: 正規化の対象を絞り込むXPath式配列
- ?array $nsPrefixes = null: 名前空間プレフィックスの配列
戻り値(return)
int|false
C14NFileメソッドは、XML文書の正規化(CANONICAL XML)をファイルに書き出す際に、書き込みが成功した場合は整数値(通常は書き込んだバイト数)、失敗した場合はfalseを返します。