PHP開発では、 Parse_url()は、 Scheme、Host、Port、Path、QueryなどのコンポーネントにURLを分解するために使用される非常に一般的な関数です。ただし、 LocalHostまたはイントラネットアドレスを扱う場合(192.168.xx、10.xxx、または127.0.0.0.1など)、 Parse_url(特にursedis firm(特に詳細)があります。標準化。
parse_url()はURL文字列を受信し、URLのさまざまなコンポーネントを含む関連配列を返します。
$url = "http://localhost:8080/test/index.php?foo=bar";
$parsed = parse_url($url);
print_r($parsed);
出力の結果は次のとおりです。
Array
(
[scheme] => http
[host] => localhost
[port] => 8080
[path] => /test/index.php
[query] => foo=bar
)
これは、 LocalHostがホスト名として正しく認識され、ポート、パス、クエリパラメーターも正常に抽出されることを意味します。
スキーム( http://など)なしでは、特にlocalhost/testなどのURLを扱う場合、 parse_url()の動作が変化します。例えば:
$url = "localhost/test";
$parsed = parse_url($url);
print_r($parsed);
出力は次のとおりです。
Array
(
[path] => localhost/test
)
現時点では、 LocalHostはホスト名としてではなく、パスの一部として誤って扱われます。 parse_url()がホストを正しく認識するためには、URLはスキーム://で開始する必要があります。
解決策: parse_url()を使用する前に、URLに完全なスキームが含まれていることを確認してください。たとえば、:
if (!preg_match('#^[a-zA-Z][a-zA-Z0-9+.-]*://#', $url)) {
$url = 'http://' . $url;
}
$parsed = parse_url($url);
イントラネットアドレス(192.168.1.1または10.0.0.2など)は、スキームに問題はありません。
$url = "http://192.168.1.100/dashboard";
$parsed = parse_url($url);
出力は正常です:
Array
(
[scheme] => http
[host] => 192.168.1.100
[path] => /dashboard
)
キーポイント: IPアドレスであっても、 http://またはその他のプロトコルヘッダーを含める必要があります。
LocalHostアドレスには、次のようなポートまたはユーザー認証情報がある場合があります。
$url = "http://user:pass@localhost:8080/secure";
$parsed = parse_url($url);
出力:
Array
(
[scheme] => http
[host] => localhost
[port] => 8080
[user] => user
[pass] => pass
[path] => /secure
)
これは、parse_url()がユーザー認証情報を正しく識別できることを示していますが、前提はURL形式がまだ完了していることです。
イントラネットアドレスを例にとると、内部サービスの1つがhttp://192.168.0.88:3000/statusに展開されます。
$urls = [
'http://localhost:8000/api',
'192.168.0.88:3000/status', // なし scheme
'http://user:[email protected]:9000/panel'
];
foreach ($urls as $url) {
if (!preg_match('#^[a-zA-Z][a-zA-Z0-9+.-]*://#', $url)) {
$url = 'http://' . $url;
}
$parsed = parse_url($url);
print_r($parsed);
}
出力の結果は、各URLのコンポーネントを正しく抽出できます。これは、さらに処理、検証、またはルーティングと転送に便利です。
parse_url()を使用してローカルホストまたはイントラネットアドレスを解析する場合は、次のポイントに注意してください。
URLにはスキーム( http://など)が含まれている必要があります。そうしないと、ホストはパスとして誤って扱われます。
イントラネットIPおよびLocalHostは、形式が標準化されている限り、正しく解析できます。
ユーザーが入力するURLが存在する場合、スキームの完了など、最初にURLを正規化する必要があります。
parse_url()は、 URLの正当性を検証できません。文字列解析のみを実行し、 Filter_Var()と組み合わせてさらに判断が必要です。
parse_url()の正しい使用は、開発におけるさまざまなローカルおよびイントラネットのサービスアドレスをよりよく処理し、コードの堅牢性と保守性を向上させるのに役立ちます。