Bitte um Hilfe, was ist hier falsch? Array leer!?

Bitte um Hilfe. Was ist hier falsch? Array leer!?
:stress: :motz: !haue :stress: :motz:
:motz: :stress: !coffee :motz: :stress:

<?php function IP_Info($IP = NULL, $TiefeErkennung = TRUE) { if (filter_var($IP, FILTER_VALIDATE_IP) === FALSE) { $IP = $_SERVER["REMOTE_ADDR"]; if ($TiefeErkennung) { if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) $IP = $_SERVER['HTTP_CLIENT_IP']; } } $Kontinte = array( "AF" => "Afrika", "AN" => "Antarktis", "AS" => "Asien", "EU" => "Europa", "OC" => "Australien (Oceanien)", "NA" => "Nord Amerika", "SA" => "Süd Amerika" ); if (filter_var($IP, FILTER_VALIDATE_IP)) { $Daten = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $IP)); $Rueckgabe = array( "Anfrage" => @$Daten->{'geoplugin_request'}, "Stadt" => @$Daten->{'geoplugin_city'}, "Bundesland" => @$Daten->{'geoplugin_regionName'}, "Land" => @$Daten->{'geoplugin_countryName'}, "Landkode" => @$Daten->{'geoplugin_countryCode'}, "Kontinent" => $Kontinte[strtoupper(@$Daten->{'geoplugin_continentCode'})], "Kontinentkode" => @$Daten->{'geoplugin_continentCode'} ); } return $Rueckgabe; } // $IP = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']); $IPInfo = IP_Info(NULL, true); print_r($IPInfo); echo $IPInfo["Stadt"]; echo $IPInfo["Land"]; ?>

abgesehen davon dass das script völlig veraltet und schlecht geschrieben ist, dürftest du ein problem mit file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $IP) haben. Denn ohne bplaced plus kannst du hier keine externen abfragen machen. [size=85](also ohne bezahldienst)[/size]

Danke für Ihre schnelle Antwort. Sie schreiben “… das script völlig veraltet und schlecht geschrieben ist…” Bitte erläutern Sie es ein wenig, Behauptungen ohne Argumente kann ich nicht nachvollziehen. Sind diese Zeilen gemeint?
@$Daten->{‘geoplugin_request’}, …
Die Namen sind absichtlich gekapselt um auch Leerzeichen und Sonderzeichen in den Zeilennamen so gut es geht zu akzeptieren…
PHP ist überhaupt nicht mein Ding. Ich gehe dann in meine ASP.Net Ecke…

Es tut mir Leid bPlaced, aber knapp 50€ jährlich für eine funktionierende Spielwiese, sind mir einfach zu viel…

In der annahme das du das script selbst geschrieben hast:
gut, eventuell ist es nicht veraltet… scheint auch mit IPv6 zu funktionieren…
Ich erwartete das die verwendete URL nur bei IPv4 funktionieren würde.

Allerdings ist die andauernde fehlerunterdrückung dennoch nicht allzu gut. [size=85](wurde aber gerne in “älteren” scripts verwendet… nicht das man die daran erkennen könnte xD)[/size]

[size=85]HTTP_X_FORWARDED_FOR[/size] ist jedoch vom user bestimmbar und für so etwas nicht verlässlich. Für [size=85]HTTP_CLIENT_IP[/size] mag ähnliches gelten.

Genau genommen könnte man noch sagen das timeouts für die externen abfragen fehlen…

Aber zur lösung des eigentlichen problems: du könntest eine IP datenbank auf deinen webspace ziehen und diese local benutzen. Zumindest würdest du so keine externen verbindungen benötigen und dein vorhaben umsetzen können.
GeoLite2: dev.maxmind.com/geoip/geoip2/geolite2/
GeoLite: dev.maxmind.com/geoip/legacy/geolite/
theoretisch solltest du nur das neue, also GeoLite2 nehmen, soweit möglich. Da es allerdings auch als CSV vorliegt, ist die verwendung in jeglicher art möglich. Bei dem binären format müsste man gucken welches man mit eingeschränkten rechten in PHP zum laufen bekommt. PHP APIs gibt es aber für beide.

P.S. hättest du keine fehler unterdrückt, hättest du sogar gewusst wo dein problem lag :wink: