はじめに
PHPでURLを構文解析したいときに使われるのが parse_url() 関数です。
「URLのどこまでを認識してくれるのか?」を理解しておくと、Webアプリ開発やリバースプロキシ設定、APIリクエストの分解などでとても役立ちます。この記事では、上級試験にも出題されやすい parse_url() の動作を具体的な例で整理します。
目次
parse_url()とは?
parse_url() は、URL文字列を構成要素に分解して配列で返す関数です。
スキーム(https)、ホスト名(example.com)、ポート番号、パス、クエリ文字列、フラグメント(#以降)などをまとめて取得できます。
parse_url(string $url, int $component = -1): array|string|int|false実行例
<?php
declare(strict_types=1);
error_reporting(-1);
$url = 'https://user:password@www.example.com:443/path/path/file?query#fragment';
$r = parse_url($url);
var_dump($r);実行結果
array(8) {
["scheme"]=>
string(5) "https"
["host"]=>
string(15) "www.example.com"
["port"]=>
int(443)
["user"]=>
string(4) "user"
["pass"]=>
string(8) "password"
["path"]=>
string(15) "/path/path/file"
["query"]=>
string(5) "query"
["fragment"]=>
string(8) "fragment"
}この出力は 正解です。
各要素の対応関係
| URL部分 | 対応するキー | 値 |
|---|---|---|
https | scheme | "https" |
user | user | "user" |
password | pass | "password" |
www.example.com | host | "www.example.com" |
:443 | port | 443 |
/path/path/file | path | "/path/path/file" |
?query | query | "query" |
#fragment | fragment | "fragment" |
図解:parse_url() の分解イメージ
https://user:password@www.example.com:443/path/path/file?query#fragment
|--scheme--| |----認証情報----| |------ホスト------| |--port--| |-----path-----| |query| |fragment|応用:特定要素だけを取り出す
第2引数にコンポーネント定数を指定すると、該当部分だけを取得できます。
echo parse_url($url, PHP_URL_HOST); // www.example.com
echo parse_url($url, PHP_URL_PATH); // /path/path/file注意点
相対URLの場合
parse_url('/path/test');
// ["path"] => "/path/test"ホストやスキームは返されません。
誤記に注意
pase_url() → ❌(誤り)
parse_url() → ✅(正しい)まとめ
| 項目 | 内容 |
|---|---|
| 関数名 | parse_url() |
| 戻り値 | URLを構成要素ごとに分解した配列 |
| 主なキー | scheme, host, port, user, pass, path, query, fragment |
| 試験の狙いどころ | URL構文の分解順序と戻り値の確認 |
