parse_url

parse_url関数:URLを分解・分析する

使い方

$urlinfo = parse_url( $url );

URLとは正式名称をUniform Resource Locatorというらしいですが(今さっき知った。。)、
このページをご覧に型は、特定の資源を示す文字列ということがなんとくわかるかと思います。
URLが違えば表示されるページが違うということも経験として知っているでしょう。

でもURLについてきちんと仕様を理解している方は稀かもしれません。
ということでURLについての仕様を一部ご紹介します。(全部は説明しきれません!)

例えばこんなURLがあるかもしれません。


http://www.smcx.jp:8080/alias_name/sample.html?param1=ABC&param2=abc#headline

このURLは次のようような情報で成り立っています。

スキーマ http
接続ホスト www.smcx.jp
接続ポート番号 8080
ファイルへのパス /alias_name/sample.html
クエリパラメータ param1=ABC&param2=abc
ページフラグメント headline

このURLの意味を日本語でざっくりと説明すると、

www.smcx.jpというホストの8080番ポートにhttpプロトコルで接続して、/alias_name/sample.htmlというパスにparam1=ABC&param2=abcというパラメータを渡してコンテンツを取得し、headlineという名前の場所に対象のリソースがある。

と言えると思います。
※一部独特の言い回しがありますのでご注意を。

この1つのURLにはこれだけの情報が含まれています。
ブラウザはこのURLから接続しなければならない、サーバーの名前(接続ホスト)や接続プロトコル(スキーマ)などの情報を判断してサーバーに接続して該当ページの情報を読み込むのです。

と、前置きが長くなってしまいましたが、
URLを解析してURLのドメインやスキーマ、ポート番号、クエリパラメータなどの情報を取得したいと言う場面に遭遇したら、PHPのparse_urlと言う関数を思い出していただければ幸いです。
では関数の説明ですが、第1引数に指定されたURLを読み込んで、該当のURLから情報を分析、解析してその結果を連想配列で返してくれる関数です。
さっきのサンプルのURLを解析すると下記のような戻りを返してくれます。

array(6) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(11) "www.smcx.jp"
  ["port"]=>
  int(8080)
  ["path"]=>
  string(23) "/alias_name/sample.html"
  ["query"]=>
  string(21) "param1=ABC&param2=abc"
  ["fragment"]=>
  string(8) "headline"
}

※ポート番号だけint型の整数値が戻ることに注意。

さらに、こんなに全部の情報いらないよと言う方には、第2引数を指定すると良いのです。
第2引数には定数を指定することができ、定数を指定すると該当の情報のみを返してくれます。
第2引数に指定できる定数は下記があります。

PHP_URL_SCHEME スキーマ
PHP_URL_HOST 接続ホスト
PHP_URL_PORT 接続ポート番号
PHP_URL_USER 接続ユーザー
PHP_URL_PASS 接続ユーザーのパスワード
PHP_URL_PATH ファイルへのパス
PHP_URL_QUERY クエリパラメータ
PHP_URL_FRAGMENT ページのフラグメント

注意点

この関数は、URL形式が正しいかどうかを調べるために使用できますが、あまり推奨できません。
URLの形式としては正しくても、それがあなたが求めているURLなのかどうかは実際にアクセスしてみなければわからないことも多いですし、悪意のあるコードが埋め込まれているURLかもしれません。そのため、使用にあたっては十分注意してください。

使いどころ

使いどころも何も。ほら。ねえ!?
使いどころを考えるのが、め、めんどくさくなっただけじゃないですよ?!

公式サイト

http://jp1.php.net/manual/ja/function.parse-url.php