第6回 Net_URL クラス - URL構築ライブラリ - PEAR講座

PHPセキュリティ

くまっち先生の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はその一例です。

   リスト1http URLの例

    http
://www.phppro.jp/index.php
    
~~~~ ===============**********
     
A    B              C

    A
スキーム
    B
ホスト
    C
パス

httpスキームにおけるフォーマットは、ホスト部分とパス部分の混合になっています。ホスト部分は、インターネットドメイン記法によって示される、いわばサーバ名にあたる箇所になります。またパス部分は、そのホストに要求するファイル(情報)の場所を示す箇所になります。

このフォーマットは、httpスキームだけでなく、FTPリソースに接続するためのURLであるftpスキーム、Telnetリソースに接続するためのURLであるtelnetスキームなど、特定のホストに対してアクセスしようとするタイプのリソースで使用されるURLでは共通のものになっています。リスト2は、そのフォーマットのより詳細な仕様です。

   リスト2httpスキーム等におけるURLフォーマットルール

    
[scheme]://[user]:[password]@[host]:[port][path]?[query]

    
scheme   スキーム名。プロトコル名であることが多い。
    
user     ホストに接続する際に使用するユーザ名。(省略可)
    
password ホストに接続する際に使用するパスワード。(省略可)
    
host     インターネットドメイン記法によって示されるホスト名
    
port     上記ホストの接続先ポート番号。
                 なおスキーム自身には予めポート番号が定められており、
                 本項目を省略した場合そのポート番号が自動的に使われる。
    
path     ホスト内に要求するパス。ファイルパスである場合が多い。
    
query    pathと共に要求する付加要素情報。

一方、上記のフォーマットとは異なるURLも存在します。電子メールを送信するために利用されるmailtoスキームのURLは、リスト3のようなフォーマットになります。HTMLにおける、メールを送信するためのリンクを作成する際などで見かける内容ですが、リスト1, 2とは異なる内容になっていることがお分かりかと思います。

   リスト3URL mailtoスキームのフォーマット

    mailto
:example@example.com
    
~~~~~~ ======= ***********
     
A      B       C

    A
スキーム
    B
ローカルアドレス
    C
ドメイン

Net_URLを使って簡単URL構築

Net_URLは、前述したリスト2のフォーマットで示されるURLを作成するための支援パッケージです。 リスト4はこのNet_URLを利用したプログラムコード例とその実行結果です。

    リスト4Net_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を各々のパーツに分解(パース)することも可能です。

    リスト5Net_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

  



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

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

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)