【PHP8.x】Dom\Document::documentURIプロパティの使い方
documentURIプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
documentURIプロパティはDom\Documentクラスに属し、現在のドキュメントのURI(Uniform Resource Identifier)を保持するプロパティです。URIとは、Web上のリソースやローカルファイルなどの場所を示す一意な識別子のことを指します。
このプロパティは、Dom\Documentオブジェクトが表すHTMLまたはXMLドキュメントがどこから読み込まれたか、その元のURIを示す情報を取得するために利用されます。例えば、Webサイトから取得したHTMLや、ファイルシステム上のXMLファイルをDom\Document::load()やDom\Document::loadHTML()メソッドなどで読み込んだ際に、そのドキュメントの元のURLやファイルパスがこのdocumentURIプロパティに自動的に設定されます。
システムエンジニアを目指す方々がドキュメントを操作する際、このプロパティを参照することで、現在扱っているドキュメントの出所や基点をプログラム内で確認できます。特に、ドキュメント内の相対パスで記述された他のリソース(画像ファイルやスタイルシートなど)を解決する際の基準として利用したり、複数のドキュメントを処理する際にそれぞれの識別情報として活用したりする際に役立ちます。このプロパティが保持する値は文字列(string)型です。
構文(syntax)
1<?php 2 3$document = new Dom\Document(); 4$document->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1></body></html>'); 5echo $document->documentURI; 6 7?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
このプロパティは、DOMDocumentオブジェクトが読み込まれているXMLまたはHTMLドキュメントのURI(Uniform Resource Identifier)を文字列として返します。
サンプルコード
Dom\Document::documentURI を取得する
1<?php 2 3/** 4 * Dom\Document::documentURI プロパティの使用方法を示すサンプルコードです。 5 * 6 * この関数は、HTML文字列をDom\Documentオブジェクトにロードし、 7 * そのドキュメントのURI (Uniform Resource Identifier) を取得して出力します。 8 * 9 * documentURI プロパティは、ロードされたドキュメントの場所を示す文字列を返します。 10 * 一般的に、文字列からドキュメントをロードした場合、このプロパティは空文字列を返します。 11 * ファイルからドキュメントをロードした場合(例: loadHTMLFile() メソッド使用時)は、 12 * そのファイルのURI(例: 'file:///path/to/your/file.html')が設定されます。 13 * 14 * @return void 15 */ 16function demonstrateDocumentURIProperty(): void 17{ 18 // Dom\Document クラスの新しいインスタンスを作成します。 19 // PHP 8以降では、DOM拡張機能のクラスは Dom 名前空間に属します。 20 $document = new Dom\Document(); 21 22 // 解析するHTML文字列を定義します。 23 $htmlContent = '<html><head><title>サンプルドキュメント</title></head><body><h1>こんにちは!</h1></body></html>'; 24 25 // 定義したHTML文字列をDom\Documentオブジェクトにロードします。 26 // このメソッドは、HTMLを解析してDOMツリーを構築します。 27 // エラーが発生した場合に false を返す可能性がありますが、ここでは簡潔さのためエラーハンドリングを省略します。 28 $document->loadHTML($htmlContent); 29 30 // Dom\Document::documentURI プロパティからドキュメントのURIを取得します。 31 // 上記のように文字列からロードした場合、通常この値は空文字列になります。 32 $uri = $document->documentURI; 33 34 // 取得したURIをコンソールに出力します。 35 echo "ドキュメントURI: " . $uri . "\n"; 36} 37 38// 上記で定義したサンプル関数を実行します。 39demonstrateDocumentURIProperty(); 40
このサンプルコードは、PHP 8で導入されたDom\DocumentクラスのdocumentURIプロパティの使用方法を示しています。Dom\Documentクラスは、HTMLやXML文書をプログラムで操作するための機能を提供します。
documentURIプロパティは、ロードされたドキュメントのURI(Uniform Resource Identifier)を文字列として取得するために使用されます。このプロパティには引数がなく、常に文字列型の値を返します。
具体的な挙動として、サンプルコードではまずDom\Documentオブジェクトを作成し、loadHTML()メソッドを使ってHTML文字列をロードしています。このメソッドで文字列からドキュメントをロードした場合、documentURIプロパティの値は通常、空文字列になります。一方、もしloadHTMLFile()メソッドのようにファイルからドキュメントをロードした場合は、そのファイルのパスを示すURI(例えば'file:///path/to/file.html'のような形式)が設定されます。
サンプルコードは、HTML文字列をロードした後、$document->documentURIという形式でプロパティにアクセスし、取得したURIを画面に出力しています。これにより、文字列からロードしたドキュメントのURIが空であることを確認できます。このプロパティを理解することで、Dom\Documentオブジェクトがどのリソースから生成されたかを特定する際に役立ちます。
このサンプルコードで Dom\Document::documentURI プロパティは、HTML文字列からロードした際に空文字列を返すことに注意が必要です。このプロパティにファイルパスを示すURIが設定されるのは、通常 loadHTMLFile() のようにファイルからドキュメントを読み込んだ場合です。PHP 8以降ではDOM関連クラスが Dom 名前空間に移動しており、以前のバージョン向けのコードを参考にするとエラーになる可能性があります。また、loadHTML() などのメソッドはHTMLの解析に失敗すると false を返すことがあるため、実運用ではエラーハンドリングを適切に実装し、返り値を必ず確認するようにしてください。
PHP: Dom\Document::documentURIでドキュメントURIを取得する
1<?php 2 3/** 4 * Dom\Document::documentURI の使用例 5 * 6 * この関数は、一時的なHTMLファイルを作成し、それを Dom\Document クラスで読み込みます。 7 * その後、documentURI プロパティを使って、読み込まれたドキュメントのURI(ファイルパス)を取得し表示します。 8 * 9 * キーワード「php documentroot」は、ここではWebサーバーのドキュメントルートではなく、 10 * Dom\Document オブジェクトが扱う「ドキュメントのルートURI」を指すものとして解釈します。 11 * 例えば、ファイルシステム上のファイルパスが Dom\Document のURIとして扱われることを示します。 12 */ 13function demonstrateDocumentURI(): void 14{ 15 // 一時的なHTMLファイルの内容 16 $htmlContent = '<!DOCTYPE html>' . 17 '<html>' . 18 '<head><title>Test Document</title></head>' . 19 '<body><h1>Hello, DOM documentURI!</h1></body>' . 20 '</html>'; 21 22 // 一時ファイルを作成するためのパスを生成 23 // sys_get_temp_dir() はシステムの一時ディレクトリのパスを返す 24 // uniqid() は一意なファイル名を生成する 25 $tempFilePath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid('dom_test_') . '.html'; 26 27 // ファイルにHTML内容を書き込む 28 if (file_put_contents($tempFilePath, $htmlContent) === false) { 29 echo "エラー: 一時HTMLファイルの作成に失敗しました。\n"; 30 return; 31 } 32 33 echo "一時HTMLファイルを作成しました: " . $tempFilePath . "\n\n"; 34 35 try { 36 // Dom\Document の新しいインスタンスを作成 37 $dom = new Dom\Document(); 38 39 // 一時ファイルからHTMLを読み込む 40 // この際、ファイルパスがドキュメントのURIとして扱われます。 41 if ($dom->loadHTMLFile($tempFilePath)) { 42 echo "HTMLファイルを Dom\Document に読み込みました。\n"; 43 44 // documentURI プロパティでドキュメントのURIを取得 45 // このURIは、ドキュメントの「基点」となるパスまたはURIを示します。 46 $documentUri = $dom->documentURI; 47 48 echo "読み込まれたドキュメントのURI (documentURI): " . $documentUri . "\n"; 49 echo "このURIは、ファイルシステムのパスを基にしたURIです。\n"; 50 } else { 51 echo "エラー: ファイルからHTMLの読み込みに失敗しました: " . $tempFilePath . "\n"; 52 } 53 } catch (Exception $e) { 54 echo "処理中にエラーが発生しました: " . $e->getMessage() . "\n"; 55 } finally { 56 // スクリプトの実行後、作成した一時ファイルを削除する 57 if (file_exists($tempFilePath)) { 58 unlink($tempFilePath); 59 echo "\n一時HTMLファイルを削除しました: " . $tempFilePath . "\n"; 60 } 61 } 62} 63 64// 関数の実行 65demonstrateDocumentURI(); 66
PHPのDom\Document::documentURIプロパティは、Dom\Documentクラスが扱うHTMLやXMLドキュメントのURI(Uniform Resource Identifier)を文字列として取得するために使用されます。このプロパティは引数を取らず、ドキュメントの基点となるURIを文字列型で返します。
サンプルコードでは、一時的なHTMLファイルを作成し、そのファイルパスを取得します。次に、Dom\Documentオブジェクトを作成し、loadHTMLFile()メソッドを使ってこの一時HTMLファイルを読み込みます。この際、読み込んだファイルのパスがドキュメントのURIとして内部的に設定されます。そして、$dom->documentURIとしてこのプロパティにアクセスすることで、読み込んだドキュメントの基点となるURI、すなわちファイルパスを文字列として取得し表示しています。
ここでキーワードとして提示されている「php documentroot」は、Webサーバーのドキュメントルートを指すものではなく、Dom\Documentオブジェクトが現在扱っているドキュメントの「ルートとなるURI」を意味します。このプロパティは、ドキュメントがファイルシステム上のどこにあるか、あるいはどのURIからロードされたかを正確に知ることができ、ドキュメントの出所を追跡する際に役立ちます。
このサンプルコードでは、Dom\Document::documentURIプロパティがWebサーバーの「ドキュメントルート」ではなく、DOMオブジェクトが読み込んだドキュメント自体の「基点となるURI」、特にファイルパスを指すことに注意してください。loadHTMLFile()でファイルを読み込むと、そのファイルの絶対パスがdocumentURIに設定されます。一時ファイルを作成する際は、システムの一時ディレクトリを利用し、一意なファイル名を生成するようにしましょう。また、処理の完了時やエラー発生後には、作成した一時ファイルを必ず削除し、不要なファイルが残らないように管理することが重要です。予期せぬエラーに備えてtry-catch-finally構文で例外処理を行うことも、安全で堅牢なコードを書く上で心がけるべき点です。