2009-07-17 6 views
5

J'ai $_SERVER['HTTP_REFERER'] — prétendre que c'est http://example.com/i/like/turtles.html. Que devrais-je faire pour ne sortir que la partie http://example.com de la chaîne et la stocker dans sa propre variable?Extraire le schéma et l'hôte de HTTP_REFERER

+1

En sidenote, juste une remarque: le Referer est pas toujours envoyé par le client (il peut être désactivé, par exemple), et peut être truqué. Donc, ne basez aucune fonctionnalité critique (ni orientée sécurité) sur elle! –

+0

@PascalMARTIN Conseil judicieux. Mais, je pense qu'un cas pourrait être fait pour examiner HTTP_REFERER dans $ _SERVER (ou, en utilisant filter_input()/filter_input_array()) à partir d'une requête HTTP POST. –

Répondre

15

Dans cet exemple, la meilleure solution serait d'utiliser PHP de parse_url method. Ceci divise l'URL en un tableau associatif. Vous pouvez ensuite construire votre valeur finale en combinant le scheme avec le host:

if ($parts = parse_url("http://example.com/i/like/turtles.html")) { 
    echo $parts[ "scheme" ] . "://" . $parts[ "host" ]; 
} 
13

J'utilise parse_url de la façon suivante ...

if ($urlParts = parse_url($myURI)) 
    $baseUrl = $urlParts["scheme"] . "://" . $urlParts["host"]; 
2

Vous pouvez utiliser une expression régulière:

if (isset($_SERVER['HTTP_REFERER']) && preg_match('@^[^/]+://[^/][email protected]', $_SERVER['HTTP_REFERER'], $match)) { 
    var_dump($match[0]); 
} 

Ou vous pouvez utiliser le parse_url function.