Problem mit $_SERVER[HTTP_HOST]

Hallo PHP-Spezialisten,

Bei diesem Vergleich :

if (!ereg("(http://$\_SERVER[HTTP\_HOST])", $\_SERVER['HTTP\_REFERER']))

erhalte ich immer *false*, weil im Vergleichsstring $_SERVER[HTTP_HOST] am Ende mit Doppelpunkt der Port angehängt wird, der im REFERER nicht vorkommt (z.B HTTP_HOST = http://www.mysite.de :81 ):
Es ist bestimmt irgendwo einzustellen, wie $_SERVER[HTTP_HOST] bestückt werden soll, bloss wo ?
Kann mir da jemand helfen ?

Danke
eljot

Hallo eljot,

Hallo PHP-Spezialisten,

bin ich nicht, kenne mich eher mit perl als mit php aus, aber was Du machst, ist doch nur ein Stringvergleich, oder?
Allerdings erschließt sich mir die Schreibweise nicht ganz, wozu sind die runden Klammern um den ersten Ausdruck?

Was spricht dagegen, die Portnummer „abzuschneiden“, z.B. mittels ereg_replace() oder explode()?

$muster=':[0-9]{1,5}$'; #Portnummer
$ersatz='';
$srv\_http\_host=ereg\_replace($muster,$ersatz, $\_SERVER[HTTP\_HOST]);

Gruß, muzel

Bei diesem Vergleich :

if (!ereg("(http://$_SERVER[HTTP_HOST])",
$_SERVER[‚HTTP_REFERER‘]))

erhalte ich immer *false*, weil im Vergleichsstring
$_SERVER[HTTP_HOST] am Ende mit Doppelpunkt der Port angehängt
wird, der im REFERER nicht vorkommt (z.B HTTP_HOST =
http://www.mysite.de :81 ):

Bei diesem Vergleich :

if (!ereg("(http://$_SERVER[HTTP_HOST])",
$_SERVER[‚HTTP_REFERER‘]))

erhalte ich immer *false*, weil im Vergleichsstring
$_SERVER[HTTP_HOST] am Ende mit Doppelpunkt der Port angehängt
wird, der im REFERER nicht vorkommt (z.B HTTP_HOST =
http://www.mysite.de :81 ):
Es ist bestimmt irgendwo einzustellen, wie $_SERVER[HTTP_HOST]
bestückt werden soll, bloss wo ?

nein, das ist nicht einzustellen. es waere auch nicht die loesung fuer dein problem.

Kann mir da jemand helfen ?

probier den: $_SERVER[‚SERVER_NAME‘]
wenn nciht, sind deine variablen-inhalte mit str_replace und ggflls. ein explode auf „:“ zu „normalisieren“

Hi Eljot,

$_SERVER[‚HTTP_HOST‘] enthält immer den kompletten Host-Part des eingehenden URL Requests. Kann also auch „myhost.mydomain.com:80“ sein, wenn die URL so geschrieben ist.

Falls Du wirklich das Port ignorieren willst (immerhin handelt es sich bei unterschiedlichen Ports um unterschiedliche Server!), kannst Du einen evt. Portstring mit regexes auch wegbringen:

if (preg_match(’/(.*?)(:[0-9]+)/’, $_SERVER[‚HTTP_HOST‘], $aresult))
$http_host = $aresult[1];
else
$http_host = $_SERVER[‚HTTP_HOST‘];

Möchte noch anmerken, dass nicht jeder Browser einen Referer mitschickt - wenn Du eine Zugriffsberechtigung auf dieser Basis implementieren möchtest denke ich wird das bei zumindest einem Teil Deiner Kunden auf Probleme stossen.

LG,
Ernest

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]