《PHP8上級試験対策》parse_url()関数でURLを分解する仕組みを理解しよう

  • URLをコピーしました!

はじめに

PHPでURLを構文解析したいときに使われるのが parse_url() 関数です。
「URLのどこまでを認識してくれるのか?」を理解しておくと、Webアプリ開発やリバースプロキシ設定、APIリクエストの分解などでとても役立ちます。この記事では、上級試験にも出題されやすい parse_url() の動作を具体的な例で整理します。

キーワード: parse_url / 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部分対応するキー
httpsscheme"https"
useruser"user"
passwordpass"password"
www.example.comhost"www.example.com"
:443port443
/path/path/filepath"/path/path/file"
?queryquery"query"
#fragmentfragment"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構文の分解順序と戻り値の確認

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次