2009-07-25 15 views
1
<?PHP 
$bannedIPs = array('127.0.0.1','72.189.218.85'); 

function ipban() { 
    if (in_array($_SERVER['REMOTE_ADDR'], $bannedIPs)) { 
     echo 'test'; 
    } 
} 

ipban(); 

?> 

Die Ausgabe dieses Skripts ist:PHP in Array Fehlern

Warning: in_array() [function.in-array]: Falscher Datentyp für zweites Argument in C: \ web server \ htdocs \ test \ Array .php on line 93

Kann mir jemand sagen warum? Ich würde es nicht

bekommen Und ja $ _SERVER [ 'REMOTE_ADDR'] ist die Anzeige 127.0.0.1

UPDATE Wie vorgeschlagen habe ich versucht, dies jetzt aber noch

function ipban() { 
    $bannedIPs = array('127.0.0.1','72.189.218.85'); 
    if (in_array($_SERVER['REMOTE_ADDR'], $bannedIPs)) { 
     echo 'test'; 
    } 
} 
ipban(); 
den gleichen Fehler
+0

Nur aus Neugier, haben Sie Fehler melden auf E_ALL? – MitMaro

Antwort

7

Sie haben ein kleines Problem mit Ihrem Variablen-Scoping bekommen.

Alle Variablen außerhalb einer Funktion in PHP sind nicht zugänglich. Es gibt mehrere Möglichkeiten, dies zu überwinden.

Sie entweder $bannedIPs in Ihrer Funktion als solche erklären könnten:

function ipban() { 
    $bannedIPs = array('127.0.0.1','72.189.218.85'); 
    if (in_array($_SERVER['REMOTE_ADDR'], $bannedIPs)) { 
     echo 'test'; 
    } 
} 

Ihre Funktion $bannedIPs außerhalb der Funktion zugreifen Sagen Sie das global Schlüsselwort:

$bannedIPs = array('127.0.0.1','72.189.218.85'); 

function ipban() { 
    global $bannedIPs; 

    if (in_array($_SERVER['REMOTE_ADDR'], $bannedIPs)) { 
     echo 'test'; 
    } 
} 

Oder verwenden Sie die $GLOBALS super global:

$bannedIPs = array('127.0.0.1','72.189.218.85'); 

function ipban() { 
    if (in_array($_SERVER['REMOTE_ADDR'], $GLOBALS['bannedIPs'])) { 
     echo 'test'; 
    } 
} 

empfehle ich Ihnen die manuelle Seite auf Variable Umfang zu lesen:

PHP: Variable Scope


Wenn es immer noch nicht funktioniert, können Sie ein anderes Problem in Ihrem Code haben. In diesem Fall sollten Sie die Verwendung eines var_dump() in Betracht ziehen, um zu überprüfen, welcher Datentyp $bannedIPs ist, bevor Sie uns alle abstimmen.

function ipban() { 
    global $bannedIPs; 

    var_dump($bannedIPs); 
} 
+2

+1, vor allem für den Downvote Teil. Dies wird zu einem Kindergarten-Thread. – deceze

+0

Eine andere Möglichkeit, die ich gefunden habe, besteht darin, die Variable in die Funktion call ipban ($ bancedIPs) zu übergeben; – JasonDavis

+1

** @ jasondavis: ** Ja, aber dann machen Sie Ihren Funktionsaufruf für nichts ausführlicher. Es ist Code-Geruch. –

1

Was passiert, wenn Sie $ bannedIPs innerhalb der Funktionsdeklaration verschieben? Es ist möglich, dass PHP denkt, dass es außerhalb des Geltungsbereichs liegt.

+0

Ich tat dies, aber ich bekomme immer noch den gleichen Fehler – JasonDavis

1

Sie müssen globale $ bannedIPs;

Dies funktioniert für mich:

function ipban() { 
    $bannedIPs = array('127.0.0.1','72.189.218.85'); 
    $ip = '127.0.0.1'; 
    if (in_array($ip, $bannedIPs)) { 
     echo 'test'; 
    } 
} 
ipban(); 

So könnten Sie sehen wollen, ob das funktioniert, ersetzen Sie die IP-Adresse, und dann schließlich ersetzen Sie es mit der Server-Variable.

+0

erstaunlich, dass auch nicht funktioniert habe, bin ich ratlos – JasonDavis

+0

Versucht den obigen Code auf meinem Server, und es funktioniert gut. –

+0

Was bedeutet, dass es ein Problem mit $ _SERVER ist –

2

Ihre Variable $bannedIPs ist innerhalb der Funktion außerhalb des Bereichs. Informieren Sie sich über Variablen -umfang: http://php.net/variables.scope

$var = 'xyz'; 

function abc() { 
    // $var does not exist here 

    $foo = 'abc'; 
} 

// $var exists here 

// $foo does not exist here 

RE: Update:

Verschieben der Variable in der Funktion arbeitet, führt der Code-Schnipsel in Ordnung. Es muss etwas anderes in deinem Code geben.

+0

Ich habe versucht, die Variable innerhalb der Funktion zu bewegen und es hat immer noch den gleichen Fehler – JasonDavis