PHP開発では、ドメイン名、パス、クエリパラメーター、その他の情報を完全なアドレスから抽出するなど、URLを処理する必要があることがよくあります。 parse_url()は、PHPによって提供される非常に実用的な機能であり、これらの操作を迅速かつ正確に完了するのに役立ちます。ただし、多くの開発者は、関数によって返される各フィールドの意味を理解していないため、実際の使用における誤解やエラーにつながります。この記事は、Parse_url()の返品結果を体系的に解析して、その使用を真に習得するのに役立ちます。
parse_url()の関数定義は次のとおりです。
mixed parse_url(string $url, int $component = -1)
入力としてURL文字列を受信し、URLのさまざまなコンポーネントを含む関連配列を返します。 2番目のパラメーター$コンポーネントはオプションです。このパラメーターが指定されている場合、関数はURLの対応する部分の値のみを返します。
まず、最も簡単な例を見てみましょう。
$url = 'https://user:[email protected]:8080/path/to/page.php?query=123#section';
$parsed = parse_url($url);
print_r($parsed);
出力の結果は次のとおりです。
Array
(
[scheme] => https
[host] => gitbox.net
[port] => 8080
[user] => user
[pass] => pass
[path] => /path/to/page.php
[query] => query=123
[fragment] => section
)
この配列の各フィールドの意味を1つずつ解析しましょう。
これは、 HTTP 、 HTTPS 、 FTPなどのURLのプロトコル部分です。例には次のものがあります。
[scheme] => https
URLがHTTPSプロトコルを使用していることを示します。
つまり、ホスト名、通常はドメイン名またはIPアドレスです。私たちの例では:
[host] => gitbox.net
これはまさにアクセスしたいサーバーアドレスです。
これが接続のポート番号です。ポートがURLで明示的に指定されていない場合、結果にフィールドが表示されません。たとえば、デフォルトのHTTPポートは80、HTTPSは443です。非デフォルトポートを使用しない限り、解析されます。
[port] => 8080
これは、ポート8080からアクセスしたことを示しています。
これらの2つのフィールドは、基本認証に使用されるユーザー名とパスワードを表します。通常、 https:// user:pass@hostのようなURLに表示されます。例では:
[user] => user
[pass] => pass
注:実際の制作環境でURLプレーンテキストでユーザー名とパスワードを転送することはお勧めしません。
これは、Webサイトのページやインターフェイスへのパスなど、URL内のリソースのパス部分です。
[path] => /path/to/page.php
このフィールドは、ルーティング、許可制御、または静的リソースアクセスでよく使用されます。
つまり、質問マークの後のクエリ文字列パーツ。これは通常、パラメーターを渡すために使用されます。
[query] => query=123
ここに解析されない元の文字列が返されることに注意してください。さらに処理が必要な場合は、 parse_str()関数を使用して配列に変換できます。
parse_str($parsed['query'], $queryParams);
print_r($queryParams);
出力:
Array
(
[query] => 123
)
これは、URLのアンカー部分、つまり#の後のコンテンツです。通常、ページ内でジャンプするために使用されます。
[fragment] => section
ブラウザによってサーバーに送信されるのではなく、主にクライアントページコントロールに使用されます。
URLの特定のフィールドにのみ興味がある場合は、2番目のパラメーターを使用して、フィールド定数を指定できます。
$host = parse_url($url, PHP_URL_HOST);
echo $host; // 出力:gitbox.net
利用可能な定数は次のとおりです。
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 : parse_url()は、着信URLを完了する必要はありません。また、 /path/ to/page.php?query=123などの相対的なアドレスを処理できますが、対応するフィールドが欠落している可能性があります。
返品値は偽です。渡された文字列を有効なURLに解析できない場合、関数はfalseを返し、フォールトトレランスに注意を払う必要があります。
Unicodeドメイン名:中国語またはその他のユニコード文字を含むURLの場合、最初にコンバージョンをエンコードするためにIDN_TO_ASCII()を使用することをお勧めします。
Parse_url()は、URLを処理するためのPHPの不可欠なツールです。それが返す各フィールドの意味を理解することは、URL関連の開発タスクをより効率的に完了するのに役立ちます。ルーティングシステムの作成、ジャンプリンクの処理、APIリクエスト分析の実行など、重要な役割を果たします。覚えておいてください: parse_url()とparse_str()を合理的に一致させることにより、任意のURLを簡単に「分解」できます。