Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】Dom\HTMLDocument::documentURIプロパティの使い方

documentURIプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

documentURIプロパティは、PHPのDom\HTMLDocumentクラスに属し、そのHTMLドキュメントのUniform Resource Identifier (URI) を保持するプロパティです。URIとは、ウェブ上のリソースを一意に識別するための文字列のことで、具体的にはウェブページのアドレス(URL)などがこれにあたります。

このプロパティを利用することで、現在プログラムで扱っているHTMLドキュメントが、ファイルシステム上のどこにあるのか、あるいはインターネット上のどのURLから取得されたものなのかを、文字列として確認することができます。Dom\HTMLDocumentクラスは、HTMLドキュメントをプログラムで操作できるようにするためのもので、このdocumentURIプロパティは、ドキュメントの生成元や現在のコンテキストを把握する上で重要な情報を提供します。

例えば、外部から読み込んだHTMLドキュメントを解析する際に、そのドキュメントの元のURIを知ることで、相対パスで記述されたリンクや画像などのリソースの絶対パスを解決する基準として利用できます。また、どのドキュメントを操作しているのかをログに出力したり、デバッグ情報を表示したりする際にも役立ちます。このプロパティは通常、読み取り専用であり、ドキュメントが読み込まれた後にそのURIを直接変更することはできません。システムエンジニアを目指す方々が、PHPでウェブコンテンツの操作や解析を行う際には、ドキュメントの出所を正確に把握するために、このdocumentURIプロパティの役割を理解することが大切です。

構文(syntax)

1<?php
2$htmlDocument = new Dom\HTMLDocument();
3$uri = $htmlDocument->documentURI;

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

このプロパティは、HTMLドキュメントのURI(Uniform Resource Identifier)を文字列で返します。URIは、ドキュメントがどこから取得されたかを示すアドレスのようなものです。

サンプルコード

PHP Dom\HTMLDocument documentURI を取得する

1<?php
2
3/**
4 * Dom\HTMLDocument を使用してHTMLコンテンツをロードし、その documentURI を表示します。
5 *
6 * この関数は、ウェブページのURI情報を取得する方法をシステムエンジニアを目指す初心者に示します。
7 * documentURI は、ドキュメントがどこからロードされたかを示す重要なプロパティです。
8 *
9 * @param string $htmlContent HTMLドキュメントとしてロードする文字列。
10 * @param string $baseUri     documentURI プロパティに設定される基準URI。
11 * @return void
12 */
13function displayHtmlDocumentUri(string $htmlContent, string $baseUri): void
14{
15    // Dom\HTMLDocument の新しいインスタンスを作成します。
16    // このオブジェクトはHTMLドキュメントを表現し、その構造や情報にアクセスできるようにします。
17    $document = new Dom\HTMLDocument();
18
19    // HTMLコンテンツを指定されたベースURIでロードします。
20    // $baseUri が documentURI プロパティの値として設定されます。
21    // これにより、ドキュメントがどのURIから来たかという情報が内部的に保持されます。
22    $document->loadHTML($htmlContent, $baseUri);
23
24    // documentURI プロパティからドキュメントのURIを取得します。
25    // このプロパティは読み取り専用で、ロードされたドキュメントの場所を文字列として返します。
26    $uri = $document->documentURI;
27
28    // 取得したURIを分かりやすいメッセージと共に表示します。
29    echo "ロードされたHTMLドキュメントのURI: " . $uri . "\n";
30}
31
32// --- サンプル使用例 ---
33
34// サンプルとして使用するHTMLコンテンツです。
35// これはシンプルなHTML5ドキュメントです。
36$sampleHtml = '<!DOCTYPE html><html><head><title>PHP documentURI サンプル</title></head><body><p>こんにちは、世界!</p></body></html>';
37
38// ドキュメントのベースURIとして設定する文字列です。
39// このURIが documentURI プロパティの値として反映されます。
40$sampleBaseUri = 'https://www.example.com/docs/page1.html';
41
42// 定義した関数を呼び出して、documentURI の動作を確認します。
43displayHtmlDocumentUri($sampleHtml, $sampleBaseUri);
44
45// 異なるURIで再度試すことも可能です。
46echo "\n--- 別のURIでの試行 ---\n";
47displayHtmlDocumentUri($sampleHtml, 'http://localhost/project/index.php');
48
49?>

PHP 8のDom\HTMLDocumentクラスには、ロードされたHTMLドキュメントのURI(Uniform Resource Identifier)を示すdocumentURIというプロパティがあります。このプロパティは、ドキュメントがどのウェブアドレスから読み込まれたかを示す文字列を保持しており、ウェブコンテンツの出所を把握する上で非常に役立ちます。

サンプルコードではまず、Dom\HTMLDocumentのインスタンスを作成し、loadHTMLメソッドを使ってHTMLコンテンツと「ベースURI」をロードしています。このloadHTMLメソッドに渡された「ベースURI」が、そのままdocumentURIプロパティの値として設定されます。これにより、ドキュメントが内部的にどのURIに紐付いているかの情報が保持されます。

その後、$document->documentURIという記述で、ロードされたドキュメントのURI情報を簡単に取得できます。このプロパティは引数を取らず、常に文字列型のURIを返します。取得したURIは、ドキュメントがどこから来たのかを明確に示し、システムエンジニアを目指す初心者の方にとって、ウェブページの構造や情報管理の基礎を理解する上で重要な要素となります。

documentURIは、Dom\HTMLDocumentがどこからロードされたかを示す読み取り専用のプロパティです。その値は、loadHTMLメソッドでHTMLコンテンツと共に指定したベースURIが反映されます。このプロパティを直接設定することはできませんので注意してください。

この機能はPHPのDOM拡張モジュールに依存しているため、ご利用のPHP環境でDOM拡張が有効になっていることを確認してください。通常はデフォルトで有効ですが、サーバー環境によっては無効になっている場合があります。

また、loadHTMLで読み込むHTMLコンテンツの文字エンコーディング、特に日本語などを扱う場合はUTF-8に統一することをお勧めします。これにより文字化けなどの問題を避け、意図した通りの処理が可能になります。安全なコードのためにも、エラー発生時のハンドリングも考慮することが重要です。

PHP Dom\HTMLDocument::documentURIでファイルURIを取得する

1<?php
2
3use Dom\HTMLDocument;
4
5/**
6 * HTMLファイルを読み込み、そのドキュメントURIを表示する関数。
7 *
8 * Dom\HTMLDocument::documentURIプロパティは、読み込まれたHTMLドキュメントのURIを返します。
9 * ファイルから読み込んだ場合は、そのファイルの絶対パスをURI形式 (例: "file:///...") で返します。
10 *
11 * @param string $htmlFilePath 読み込むHTMLファイルの絶対パス
12 */
13function displayHtmlDocumentUri(string $htmlFilePath): void
14{
15    // Dom\HTMLDocument オブジェクトを新しく作成します。
16    $document = new HTMLDocument();
17
18    // HTMLファイルを指定されたパスから読み込みます。
19    // loadHTMLFileは成功時にtrue、失敗時にfalseを返します。
20    if (!$document->loadHTMLFile($htmlFilePath)) {
21        echo "エラー: HTMLファイルを「" . $htmlFilePath . "」から読み込めませんでした。\n";
22        echo "ファイルが存在するか、または読み取り権限があるか確認してください。\n";
23        return;
24    }
25
26    // documentURI プロパティにアクセスして、読み込まれたドキュメントのURIを取得します。
27    $uri = $document->documentURI;
28
29    echo "--- Dom\\HTMLDocument::documentURI の使用例 ---\n";
30    echo "読み込まれたHTMLドキュメントのURI: " . $uri . "\n\n";
31
32    echo "【documentURI について】\n";
33    echo "  'documentURI' は、Dom\\HTMLDocumentオブジェクトが表す特定のHTMLドキュメントが、\n";
34    echo "  どこから読み込まれたかを示すURIです。'loadHTMLFile' でファイルパスを渡した場合、\n";
35    echo "  多くの場合 'file://' スキームから始まるファイルの絶対パスが返されます。\n";
36    echo "  これは、PHPスクリプトがWebサーバー経由で実行されたとしても同様です。\n\n";
37
38    // キーワード 'php documentroot' に関連付けて解説します。
39    echo "【php documentroot (\$_SERVER['DOCUMENT_ROOT']) との比較】\n";
40    // $_SERVER['DOCUMENT_ROOT'] は、Webサーバーのドキュメントルートディレクトリのファイルシステムパスを示します。
41    // CLI環境で $_SERVER['DOCUMENT_ROOT'] が設定されていない場合を考慮します。
42    if (isset($_SERVER['DOCUMENT_ROOT'])) {
43        echo "  Webサーバー環境におけるPHPの 'DOCUMENT_ROOT' は、\n";
44        echo "  Webサーバーが公開しているコンテンツの最上位ディレクトリ(例: /var/www/html)のファイルシステムパスです。\n";
45        echo "  現在の DOCUMENT_ROOT (ファイルシステムパス): " . $_SERVER['DOCUMENT_ROOT'] . "\n";
46        echo "  'documentURI' が特定のHTMLファイル自身のURIを示すのに対し、\n";
47        echo "  'DOCUMENT_ROOT' はWebサーバーのルートディレクトリを示すため、\n";
48        echo "  両者は目的と示す情報が異なります。混同しないように注意が必要です。\n";
49    } else {
50        echo "  このスクリプトはCLI (コマンドラインインターフェース) で実行されているため、\n";
51        echo "  Webサーバーの 'DOCUMENT_ROOT' (\$_SERVER['DOCUMENT_ROOT']) は利用できません。\n";
52        echo "  'DOCUMENT_ROOT' は、Webサーバー経由でPHPスクリプトが実行される際に設定されます。\n";
53    }
54    echo "--------------------------------------------------\n";
55}
56
57// --- 単体で動作可能なサンプルコードのための準備 ---
58
59// テスト用のHTMLファイルを一時的に作成します。
60$sampleHtmlFileName = 'test_document_for_uri.html';
61$sampleHtmlContent = <<<HTML
62<!DOCTYPE html>
63<html lang="ja">
64<head>
65    <meta charset="UTF-8">
66    <title>documentURIテスト</title>
67</head>
68<body>
69    <h1>Dom\\HTMLDocument::documentURI プロパティのテスト</h1>
70    <p>このファイルはPHPスクリプトによって一時的に作成されました。</p>
71    <p>このページのドキュメントURIは 'documentURI' プロパティで取得されます。</p>
72</body>
73</html>
74HTML;
75
76// ファイルへの書き込みが失敗した場合はスクリプトを終了します。
77if (file_put_contents($sampleHtmlFileName, $sampleHtmlContent) === false) {
78    die("エラー: テスト用HTMLファイルの作成に失敗しました。\n");
79}
80
81// 作成したHTMLファイルの絶対パスを取得します。
82// loadHTMLFileには絶対パスを渡すことで、documentURIがより明確なURIを返します。
83$absoluteHtmlFilePath = realpath($sampleHtmlFileName);
84
85// 関数を呼び出してドキュメントURIを表示
86displayHtmlDocumentUri($absoluteHtmlFilePath);
87
88// --- テスト用ファイルのクリーンアップ ---
89// サンプルコード実行後に不要なファイルを削除します。
90if (file_exists($sampleHtmlFileName)) {
91    unlink($sampleHtmlFileName);
92}
93
94?>

PHPのDom\HTMLDocument::documentURIプロパティは、HTMLドキュメントオブジェクトが参照しているURIを文字列として返します。このプロパティは引数を持ちません。具体的には、loadHTMLFileメソッドでローカルのファイルパスを指定してHTMLを読み込んだ場合、documentURIは「file:///」スキームで始まるそのファイルの絶対パスをURI形式で提供します。この機能は、Webページをスクレイピングする際や、ローカルに保存されたHTMLファイルの出所を特定する際に役立ちます。

PHPにおける「php documentroot」($_SERVER['DOCUMENT_ROOT'])は、Webサーバーがコンテンツを公開している最上位ディレクトリのファイルシステムパスを示します。一方、documentURIは、個々のDom\HTMLDocumentオブジェクトが解析した特定のHTMLドキュメントの読み込み元URIを示します。両者は指し示す対象と目的が根本的に異なるため、混同しないように注意が必要です。

提供されたサンプルコードでは、まず一時的なHTMLファイルを作成し、そのファイルをDom\HTMLDocumentオブジェクトに読み込ませています。その後、documentURIプロパティにアクセスして、読み込まれたHTMLファイルのURIを取得し、その結果を表示しています。これにより、documentURIがどのように機能し、どのようなURIを返すのかを具体的に理解することができます。

Dom\HTMLDocument::documentURIは、loadHTMLFileメソッドで読み込んだHTMLドキュメントの絶対パスをURI形式(通常file://スキーム)で返します。これはWebサーバーのドキュメントルートを示す$_SERVER['DOCUMENT_ROOT']とは異なる情報であり、混同しないよう注意が必要です。documentURIはあくまで特定のドキュメントの読み込み元を示します。また、loadHTMLFileは指定されたファイルが存在しない場合や、読み取り権限がない場合に失敗することがありますので、戻り値を必ず確認し、適切にエラー処理を行うことが安全なコードの利用には不可欠です。コマンドライン環境では$_SERVER['DOCUMENT_ROOT']は利用できない点も覚えておきましょう。

関連コンテンツ

関連IT用語

関連プログラミング言語