第6回 Net_URL クラス - URL構築ライブラリ - PEAR講座
くまっち先生のPEAR講座
Lecutures on PHP
第6回 Net_URL クラス - URL構築ライブラリ (その1)
ネットワーク上の住所「URL」
Webサイトの住所を示すために利用される「URL」。今ではすっかり馴染み深い存在となりつつあるこのURL、ただの文字列と思って適当に書いてしまっては機能しません。形式にはやはりそれなりのルールが存在しているのです。
今回のPEAR講座は、このURLの内容を正しく作成することのできる「Net_URL」を取り上げ、その機能と実際のコードを紹介していきます。
URLのルール
そもそもURLとはどのようなものなのでしょう?
正式名称はUniform Resource Locatorというもので、通常はそれぞれの頭文字をとった略称でURLと呼ばれています。本来の位置づけとして、ネットワーク上で動作しているサービスおよびリソースを表記するための形式的な文字列で、サービス、リソースを利用するために特定する値としても使用されるものです。
Webサイトへアクセスする際に利用することが一般的となった今では、URLはそのWebサイトの場所を示すための住所(アドレス)である、と捉えるほうが容易ではないでしょうか。
またURLは、前述したとおり形式に以下のルール(フォーマット)が決められています。以下がその内容です。
[スキーム]:[スキーム毎の決められたフォーマット]
スキームとは、サービス、リソースの種類を示す情報です。例えば馴染みのあるWebサイトのURLでいうと、「http」がスキームにあたります。セミコロン以降は、指定されるスキーム毎に決められている異なったフォーマットを指定することになります。リスト1はその一例です。
リスト1. http URLの例
http://www.phppro.jp/index.php
~~~~ ===============**********
A B C
A: スキーム
B: ホスト
C: パス
httpスキームにおけるフォーマットは、ホスト部分とパス部分の混合になっています。ホスト部分は、インターネットドメイン記法によって示される、いわばサーバ名にあたる箇所になります。またパス部分は、そのホストに要求するファイル(情報)の場所を示す箇所になります。
このフォーマットは、httpスキームだけでなく、FTPリソースに接続するためのURLであるftpスキーム、Telnetリソースに接続するためのURLであるtelnetスキームなど、特定のホストに対してアクセスしようとするタイプのリソースで使用されるURLでは共通のものになっています。リスト2は、そのフォーマットのより詳細な仕様です。
リスト2. httpスキーム等におけるURLフォーマットルール
[scheme]://[user]:[password]@[host]:[port][path]?[query]
* scheme : スキーム名。プロトコル名であることが多い。
* user : ホストに接続する際に使用するユーザ名。(省略可)
* password : ホストに接続する際に使用するパスワード。(省略可)
* host : インターネットドメイン記法によって示されるホスト名
* port : 上記ホストの接続先ポート番号。
なおスキーム自身には予めポート番号が定められており、
本項目を省略した場合そのポート番号が自動的に使われる。
* path : ホスト内に要求するパス。ファイルパスである場合が多い。
* query : pathと共に要求する付加要素情報。
一方、上記のフォーマットとは異なるURLも存在します。電子メールを送信するために利用されるmailtoスキームのURLは、リスト3のようなフォーマットになります。HTMLにおける、メールを送信するためのリンクを作成する際などで見かける内容ですが、リスト1, 2とは異なる内容になっていることがお分かりかと思います。
リスト3. URL mailtoスキームのフォーマット
mailto:example@example.com
~~~~~~ ======= ***********
A B C
A: スキーム
B: ローカルアドレス
C: ドメイン
Net_URLを使って簡単URL構築
Net_URLは、前述したリスト2のフォーマットで示されるURLを作成するための支援パッケージです。 リスト4はこのNet_URLを利用したプログラムコード例とその実行結果です。
リスト4. Net_URL使用例(1)
require_once 'Net/URL.php';
$url = new Net_URL();
// URLの構築
$url->protocol = 'http';
$url->host = 'www.phppro.jp';
$url->path = '/index.php';
print $url->getURL() . "\n";
// リクエストパラメータ (query) の付与
$url->addQueryString('foo', '111');
$url->addQueryString('bar', '222');
print $url->getURL() . "\n";
(実行結果)
http://www.phppro.jp/
http://www.phppro.jp/?foo=111&bar=222
Net_URLクラスを使用することで簡単に目的のURLが正しいフォーマットで作成することができます。 またリスト5のように、既に存在しているURLを各々のパーツに分解(パース)することも可能です。
リスト5. Net_URL使用例(2)
$url = new Net_URL('http://www.example.com/path/to/example/?foo=bar&baz');
print "HOST: {$url->host}\n";
print "PATH: {$url->path}\n";
print "Query (Request)\n";
foreach ($url->querystring as $key => $value) {
print " $key : $value\n";
}
(実行結果)
HOST: www.example.com
PATH: /path/to/example/
Query (Request)
foo : bar
baz :
- 1
- 2





ページのトップへ


今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!