Dans le développement de PHP, parse_url () est une fonction très courante utilisée pour décomposer les URL dans leurs composants, tels que le schéma, l' hôte , le port, le chemin, la requête , etc. standardisé.
parse_url () reçoit une chaîne d'URL et renvoie un tableau associatif contenant les différentes composantes de l'URL:
$url = "http://localhost:8080/test/index.php?foo=bar";
$parsed = parse_url($url);
print_r($parsed);
Le résultat de sortie est le suivant:
Array
(
[scheme] => http
[host] => localhost
[port] => 8080
[path] => /test/index.php
[query] => foo=bar
)
Cela signifie que LocalHost est correctement reconnu comme le nom d'hôte, et les paramètres du port, du chemin et de la requête sont également extraits avec succès.
Sans schéma (tel que http: // ), les changements de comportement parse_url () , en particulier lorsqu'ils traitent des URL tels que localhost / test . Par exemple:
$url = "localhost/test";
$parsed = parse_url($url);
print_r($parsed);
La sortie peut être:
Array
(
[path] => localhost/test
)
À l'heure actuelle, LocalHost est traité à tort comme faisant partie du chemin, et non comme le nom d'hôte. Pour que PARSE_URL () reconnaisse correctement l'hôte, l'URL doit commencer par le schéma: // .
Solution: avant d'utiliser parse_url () , assurez-vous que l'URL contient le schéma complet, par exemple:
if (!preg_match('#^[a-zA-Z][a-zA-Z0-9+.-]*://#', $url)) {
$url = 'http://' . $url;
}
$parsed = parse_url($url);
Les adresses intranet (telles que 192.168.1.1 ou 10.0.0.2) n'auront aucun problème avec le schéma:
$url = "http://192.168.1.100/dashboard";
$parsed = parse_url($url);
La sortie est normale:
Array
(
[scheme] => http
[host] => 192.168.1.100
[path] => /dashboard
)
Point clé: Même pour les adresses IP, il doit inclure http: // ou d'autres en-têtes de protocole.
Parfois, l'adresse locale peut avoir des informations d'authentification port ou utilisateur, telles que:
$url = "http://user:pass@localhost:8080/secure";
$parsed = parse_url($url);
Sortir:
Array
(
[scheme] => http
[host] => localhost
[port] => 8080
[user] => user
[pass] => pass
[path] => /secure
)
Cela montre que parse_url () peut identifier correctement les informations d'authentification des utilisateurs, mais la prémisse est que le format URL est toujours terminé.
Prenant l'exemple de l'adresse intranet, l'un de nos services internes est déployé sur http://192.168.0.88:3000/status , ou l'environnement de développement utilise http: // localhost: 8000 / API , qui peut être géré de la manière suivante:
$urls = [
'http://localhost:8000/api',
'192.168.0.88:3000/status', // aucun 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);
}
Les résultats de sortie peuvent extraire correctement les composants de chaque URL, ce qui est pratique pour un traitement, une vérification ou un routage et un transfert.
Lorsque vous utilisez PARSE_URL () pour analyser les adresses locales ou intranet, veuillez prêter attention aux points suivants:
L'URL doit contenir un schéma (tel que http: // ), sinon l'hôte sera traité par erreur comme un chemin .
Intranet IP et LocalHost peuvent être correctement analysés tant que le format est standardisé.
Si l'URL existe qui est entrée par l'utilisateur, vous devez d'abord normaliser l'URL , comme la fin du schéma.
parse_url () ne peut pas vérifier la légitimité de l'URL. Il effectue uniquement l'analyse des chaînes et un jugement supplémentaire est requis en combinaison avec filter_var () .
L'utilisation correcte de parse_url () peut nous aider à mieux gérer diverses adresses de service locales et intranet en développement et améliorer la robustesse et la maintenabilité du code.