Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】PHP_URL_SCHEME定数の使い方

PHP_URL_SCHEME定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

PHP_URL_SCHEME定数は、ウェブサイトのアドレスであるURL(Uniform Resource Locator)の特定の構成要素を表す定数です。この定数は、主にPHPのparse_url()関数と組み合わせて使用されます。parse_url()関数は、与えられたURL文字列を、例えば「http」や「https」のようなスキーム、ドメイン名を示すホスト、ファイルやディレクトリの場所を示すパス、検索条件を示すクエリといった様々な部分に分解し、それらの情報を配列として提供します。

PHP_URL_SCHEME定数をparse_url()関数の第二引数に指定することで、URLの中から「スキーム(またはプロトコル)」と呼ばれる部分のみを抽出することができます。スキームとは、URLの最も先頭にある「http://」や「https://」、「ftp://」などの部分で、そのURLがどのような方法でアクセスされるか、あるいはどのような種類のデータであるかを示す識別子です。

例えば、「https://www.example.com/page.html」というURLであれば、「https」がスキームに該当します。この定数を利用することで、プログラムはURLがセキュアなHTTPSを使用しているか、一般的なHTTPであるか、あるいはファイル転送プロトコル(FTP)であるかなどを簡単に判別できます。これにより、ウェブアプリケーション開発において、URLのプロトコルに応じた処理の分岐、セキュリティチェック、特定の種類のURLの抽出など、URLの検証や操作を効率的かつ正確に行うことが可能になります。システムが安全な接続を要求する場合などに、URLが期待するスキームを使用しているかを確認する際にも大変有用です。

構文(syntax)

1<?php
2$scheme = parse_url('https://www.example.com/path', PHP_URL_SCHEME);
3?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP_SELFとURLスキームを取得する

1<?php
2
3/**
4 * PHPスクリプト情報とURLスキームの取得例
5 * システムエンジニアを目指す初心者向けに、$_SERVER['PHP_SELF'] と PHP_URL_SCHEME 定数の使い方を示します。
6 */
7function showScriptAndUrlInfo(): void
8{
9    // --- 1. $_SERVER['PHP_SELF'] の利用例 ---
10
11    // $_SERVER['PHP_SELF'] は、現在実行中のスクリプトのパス(ファイル名を含む)を示します。
12    // 例: 'http://example.com/test/index.php' にアクセスした場合、この値は '/test/index.php' となります。
13    // これは、HTMLフォームの 'action' 属性に設定することで、フォームの送信先を現在のページに指定する際などに非常に便利です。
14    // セキュリティ上の注意: ユーザー入力がPHP_SELFに影響を与える場合があるため、出力する際は htmlspecialchars() でエスケープすることが重要です。
15    $phpSelf = $_SERVER['PHP_SELF'] ?? 'Unknown path';
16
17    echo "--- 現在のスクリプトのパス ---" . PHP_EOL;
18    echo "現在のスクリプトパス (\$ _SERVER['PHP_SELF']): " . htmlspecialchars($phpSelf) . PHP_EOL . PHP_EOL;
19
20    // --- 2. PHP_URL_SCHEME 定数の利用例 ---
21
22    // PHP_URL_SCHEME は、parse_url() 関数で使用する定数です。
23    // URLから「スキーム」(例: 'http', 'https', 'ftp' など)の部分を抽出するために利用されます。
24    // この定数自体が直接値を返すわけではなく、parse_url() 関数の動作を制御するフラグとして機能します。
25
26    echo "--- URLスキームの取得 ---" . PHP_EOL;
27
28    // 現在のページの完全なURLを構築してみましょう。
29    // スキーム(httpまたはhttps)を判定します。
30    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || ($_SERVER['SERVER_PORT'] ?? 80) == 443) ? "https" : "http";
31    // ホスト名(ドメイン名)を取得します。
32    $host = $_SERVER['HTTP_HOST'] ?? 'localhost';
33    // リクエストURI(パスとクエリパラメータを含む)を取得します。
34    $requestUri = $_SERVER['REQUEST_URI'] ?? '/';
35
36    // これらを結合して、完全なURLを作成します。
37    $fullUrl = $protocol . '://' . $host . $requestUri;
38
39    echo "解析対象のURL例: " . htmlspecialchars($fullUrl) . PHP_EOL;
40
41    // parse_url() 関数を使って、構築したURLからスキームを抽出します。
42    // 第1引数に解析したいURL、第2引数に PHP_URL_SCHEME 定数を指定します。
43    $scheme = parse_url($fullUrl, PHP_URL_SCHEME);
44
45    // 抽出結果をチェックし、表示します。
46    if ($scheme !== false && $scheme !== null) {
47        echo "抽出されたURLスキーム: " . htmlspecialchars($scheme) . PHP_EOL;
48    } else {
49        echo "URLスキームの抽出に失敗しました。URLが不正な形式の可能性があります。" . PHP_EOL;
50    }
51
52    echo PHP_EOL . "補足: PHP_URL_SCHEME は、URLの特定の構成要素を解析するための多くの定数の一つです。" . PHP_EOL;
53    echo "例えば、PHP_URL_HOST でホスト名、PHP_URL_PATH でパスなどを抽出できます。" . PHP_EOL;
54}
55
56// 上記で定義した関数を実行し、結果を出力します。
57showScriptAndUrlInfo();
58
59?>

PHPはウェブ開発に広く使われるプログラミング言語です。このサンプルコードでは、PHP 8において、ウェブページに関する情報取得に役立つ二つの要素、$_SERVER['PHP_SELF']PHP_URL_SCHEME定数の使い方を解説しています。

まず$_SERVER['PHP_SELF']は、現在実行中のPHPスクリプトがサーバー上のどこにあるかを示すパスを保持する特殊な変数です。例えば、http://example.com/dir/index.phpにアクセスした場合、この値は/dir/index.phpとなります。これはHTMLフォームの送信先を現在のページに設定する際などに利用されますが、セキュリティのためにhtmlspecialchars()関数で必ずエスケープして表示することが推奨されます。

次にPHP_URL_SCHEMEは、parse_url()関数と組み合わせて使用する定数です。この定数自体は引数を持たず、値を直接返すものでもありません。parse_url()関数にURLとPHP_URL_SCHEMEを第2引数として指定すると、そのURLの「スキーム」(例えばhttphttpsなど)の部分だけを文字列として抽出してくれます。サンプルコードでは、現在のページの完全なURLを構築し、そこからparse_url()PHP_URL_SCHEMEを使ってスキーム部分を正確に取得する例を示しています。これはURLの構成要素をプログラムで分析する際に非常に有用な機能です。

$_SERVER['PHP_SELF']は実行中のスクリプトのパスを示しますが、ユーザー入力が影響する可能性があるため、Webページに出力する際はhtmlspecialchars()で必ずエスケープしてください。これはクロスサイトスクリプティング(XSS)攻撃を防ぐための重要なセキュリティ対策です。

一方、PHP_URL_SCHEMEparse_url()関数と共に使用する定数で、URLから「http」や「https」といったスキーム部分を抽出するために使われます。この定数自体が値を直接返すのではなく、parse_url()関数の動作を制御するフラグとして機能します。parse_url()がURLの解析に失敗した場合はfalseを返すことがあるため、結果をチェックしてエラーハンドリングを行うことが大切です。サンプルコードのように$_SERVER変数の値が存在しない場合に備え、??演算子でデフォルト値を設定する書き方は安全性を高めます。

PHPでURLのスキームとパスを抽出する

1<?php
2
3/**
4 * URLからスキームとパスを抽出し表示する関数。
5 *
6 * システムエンジニアを目指す初心者向けに、PHPのparse_url関数と
7 * URLコンポーネント定数の基本的な使い方を示します。
8 *
9 * @param string $url 解析対象のURL文字列。
10 */
11function displayUrlComponents(string $url): void
12{
13    echo "--- URL解析: {$url} ---\n";
14
15    // parse_url関数はURLを解析し、その各部分を連想配列、または指定した定数で返します。
16    // リファレンス情報にあるPHP_URL_SCHEMEはURLのスキーム部分
17    // (例: http, https, ftp) を取得するために使用します。
18    $scheme = parse_url($url, PHP_URL_SCHEME);
19    echo "スキーム (PHP_URL_SCHEME): " . ($scheme ?? 'N/A (検出できませんでした)') . "\n";
20
21    // キーワード 'php_url_path' に関連して、PHP_URL_PATHはURLのパス部分
22    // (例: /api/resource, /index.html) を取得するために使用します。
23    $path = parse_url($url, PHP_URL_PATH);
24    echo "パス (PHP_URL_PATH): " . ($path ?? 'N/A (検出できませんでした)') . "\n";
25
26    echo "\n"; // 出力を見やすくするための改行
27}
28
29// --- サンプル実行 ---
30// いくつかのURLで関数を呼び出し、URLのスキームとパスを抽出します。
31
32// 標準的なHTTPSのURL
33displayUrlComponents('https://www.example.com/api/users?id=123#profile');
34
35// HTTPのURLでパスがシンプルな場合
36displayUrlComponents('http://localhost:8080/index.html');
37
38// FTPのURLとディレクトリパス
39displayUrlComponents('ftp://ftp.example.org/pub/data.zip');
40
41// パスがないURLの例
42displayUrlComponents('https://www.google.com');
43
44// スキームやパスが不正または欠落しているURLの例
45// parse_urlが失敗した場合、または該当コンポーネントがない場合はnullを返します。
46displayUrlComponents('invalid-url-string');

このサンプルコードは、PHPでURL(Uniform Resource Locator)を解析し、その構成要素を抽出するためのparse_url関数と、特定の要素を指定する定数の使い方を示しています。特に、URLのプロトコルを示す「スキーム」と、リソースの場所を示す「パス」の取得に焦点を当てています。

parse_url関数は、第1引数に解析したいURL文字列を受け取ります。そして、第2引数に、どの部分を抽出するかを指定する定数を指定します。リファレンスにあるPHP_URL_SCHEMEは、URLの「http」や「https」、「ftp」といったスキーム部分を取得するために使用します。キーワードにあるphp_url_pathに関連するPHP_URL_PATH定数も同様に、URLの「/api/users」や「/index.html」といったパス部分を取得するために用いられます。

parse_url関数は、指定された要素の文字列を戻り値として返しますが、もし該当する要素がURLに存在しない場合や、URLの形式が不正で解析に失敗した場合はnullを返します。サンプルコードのdisplayUrlComponents関数は、この挙動を利用して、与えられたURLからスキームとパスを抽出し、その結果を表示します。抽出できなかった要素は「N/A」と表示されるため、結果が分かりやすくなっています。

PHPのparse_url関数は、指定されたURLの解析に失敗した場合や、要求されたスキームやパスなどのコンポーネントが存在しない場合に、falseまたはnullを返します。サンプルコードのように?? 'N/A'nullの場合を処理するのは適切ですが、関数がfalseを返す可能性も考慮し、結果を常に確認する習慣をつけましょう。PHP_URL_SCHEMEPHP_URL_PATHなどの定数は、parse_url関数にURLのどの部分を抽出するかを指定するためのものであり、これらの定数自体が値を返すわけではありません。抽出したURLコンポーネントをファイルパスやデータベースクエリなどに利用する際は、セキュリティリスクを避けるため、必ず入力値の検証(バリデーション)や無害化(サニタイズ)を行ってください。また、parse_urlはURLエンコードされた文字列を自動的にデコードしませんので、必要に応じてurldecode関数を使用してください。

関連コンテンツ

関連IT用語

関連プログラミング言語