個人的にメモとしてまとめる
parse_url() の役割
parse_url() は、URLを解析して スキーム(プロトコル)、ホスト(ドメイン)、パス、クエリなど の情報を配列として取得できます。
具体例
$url = "https://hogehoge.com/path/to/page?query=123";
$parsed_url = parse_url($url);
print_r($parsed_url);
結果
Array (
[scheme] => https
[host] => hogehoge.com
[path] => /path/to/page
[query] => query=123
)
parse_url() の戻り値
parse_url($url) は、以下のようなキーを持つ 連想配列 を返します(存在しない部分は省略されます)。
キー ($parsed_url['キー名']) | 内容 |
---|---|
scheme | http または https(プロトコル) |
host | hogehoge.com (ドメイン) |
port | 80 や 443 など(省略されることもある) |
user | user(認証情報のユーザー名) |
pass | password(認証情報のパスワード) |
path | query=123(クエリパラメータ) |
fragment | section1(URLの #section1 部分) |
componentとは
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 コンポーネントのみを文字列 (PHP_URL_PORT を指定した場合だけは整数値) で取得するようにします。
componentを入れた場合
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>
結果
array(8) {
["scheme"]=>
string(4) "http"
["host"]=>
string(8) "hostname"
["port"]=>
int(9090)
["user"]=>
string(8) "username"
["pass"]=>
string(8) "password"
["path"]=>
string(5) "/path"
["query"]=>
string(9) "arg=value"
["fragment"]=>
string(6) "anchor"
}
string(4) "http"
string(8) "username"
string(8) "password"
string(8) "hostname"
int(9090)
string(5) "/path"
string(9) "arg=value"
string(6) "anchor"
こちらを活用すればparse_url($url) で host 部分を取得して
host部分が仕様のものと異なればNotFoundにリダイレクトしたり、何かと使用する場面はありそうですね。