CakePHP IP-Adresse erhalten

Lesezeit: 3 Minuten

Benutzeravatar von Aditya P Bhatt
Aditya P Bhatt

Wie bekomme ich die IP-Adresse des Clients in CakePHP? Es wäre $_SERVER['REMOTE_ADDR'] in reinem PHP.

Ich dachte, es ist wie alles $_SERVER vars und kann über aufgerufen werden env('VAR_NAME')oder getClientIP() in CakePHP, aber es gibt nicht die gleichen Ergebnisse zurück.

Irgendwelche Ideen?

Benutzeravatar von rich97
reich97

KuchenPHP 1.x:

RequestHandlerComponent::getClientIp();

Also zur Verdeutlichung:

public $components = array(
    'RequestHandler'
);

Dann in der Controller-Methode:

$this->RequestHandler->getClientIp();

CakePHP 2.x & CakepPHP 3.x:

RequestHandler::getClientIp() ist veraltet; Die Client-IP bekommst du aus der CakeRequest Objekt:

$this->request->clientIp();

  • Vielen Dank. Funktioniert super. Ich habe gehört, dass RequestHandler langsamer sein kann als die Verwendung von reinem PHP $_SERVER[‘REMOTE_ADDR’]. Ist das wahr?

    – Ryan

    26. September 2011 um 9:31 Uhr

  • Nun, das Hinzufügen von Komplexitätsschichten verlangsamt immer die Verarbeitung, aber das tut mehr als nur: return $_SERVER['REMOTE_ADDR'];.

    – reich97

    26. September 2011 um 16:08 Uhr


  • getClientIp(false) kann in bestimmten Situationen ratsam sein, manchmal (wie bei Heroku) ist die IP in HTTP_X_FORWARDED_FOR.

    – Brad Koch

    4. August 2012 um 19:53 Uhr

  • Es ist veraltet, verwenden $this->request->clientIp() stattdessen von Ihrem Controller.

    – Mrdaliri

    8. August 2012 um 11:17 Uhr

  • @Brad Danke für den Tipp, du hast mir wahrscheinlich viel Schmerz und Elend erspart.

    – Jackson

    18. Dezember 2013 um 5:30 Uhr


Benutzeravatar von Aditya P Bhatt
Aditya P Bhatt

Verwendung von CakePHP 3.x:

//in controller
$ip = $this->request->clientIp();

Verwendung von CakePHP 2.x

//in controller
$this->request->ClientIp();

Verwendung von CakePHP 1.x

//in controller
RequestHandlerComponent::getClientIP();

  • Wenn Sie sich in einem Modell befinden, tun Sie es $ServerRequest = new \Cake\Http\ServerRequest(); und dann $entity->remote_addr = $ServerRequest->clientIp();

    – ᴍᴇʜᴏᴠ

    29. Oktober 2019 um 8:12 Uhr

Wenn Sie die IP-Adresse innerhalb eines Modells abrufen müssen, $this->request->getClientIp() wird nicht funktionieren, werfen:

Fehler: Aufruf einer Member-Funktion clientIp() für ein Nicht-Objekt

Verwenden Router::getRequest()->clientIp() stattdessen.

Also im Wesentlichen, Router::getRequest() kann als dienen Modell‘s Ersatz für die Regler‘s $this->request

In Cakephp 3.x

In Ihrem Controller, um die Client-IP zu erhalten – $this->request->clientIp();

Sie können verwenden $this->request->clientIp(); um die IP-Adresse des aktuellen Besuchers zu erhalten.

Cake\Http\ServerRequest::clientIp()
Returns the current visitor’s IP address.

Zur weiteren Bezugnahme
https://book.cakephp.org/3.0/en/controllers/request-response.html#reading-http-headers

Benutzeravatar von fitorec
fitorec

Cakephp 3 hat eine clientIP-Funktion in der Klasse ServerRequest:

https://github.com/cakephp/cakephp/blob/master/src/Http/ServerRequest.php#L578

Sie können darauf zugreifen:

in einem Controller-Controller:

 $this->request->clientIp();

in einem Controller-Controller:

 // firts add Router support
 use Cake\Routing\Router;
 // Use in a method
 Router::getRequest()->clientIp()

Ich verlasse die Funktion, wenn Sie eine frühere Version des Frameworks verwenden oder ein spezielles Verhalten benötigen:

public function clientIp()
{
    if ($this->trustProxy && $this->getEnv('HTTP_X_FORWARDED_FOR')) {
        $addresses = explode(',', $this->getEnv('HTTP_X_FORWARDED_FOR'));
        $ipaddr = end($addresses);
    } elseif ($this->trustProxy && $this->getEnv('HTTP_CLIENT_IP')) {
        $ipaddr = $this->getEnv('HTTP_CLIENT_IP');
    } else {
        $ipaddr = $this->getEnv('REMOTE_ADDR');
    }
    return trim($ipaddr);
}

Diese Funktion gibt beispielsweise den Wert “:: 1” zurück, wenn Sie in einer lokalen Umgebung arbeiten.

Es ist eine gute Idee, es in der Boot-Datei bootstrap.php hinzuzufügen, da Sie von überall darauf zugreifen können:

function clientIp($defaultIP = '127.0.0.1') {
        $ipaddr = null;
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ipaddr = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ipaddr = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ipaddr = $_SERVER['REMOTE_ADDR'];
        }
        $ipaddr = trim($ipaddr);
        if ($ipaddr == '::1') {
            $ipaddr = $defaultIP;
        }
        return $ipaddr;
}

Viel Glück und fröhliches Codieren! =D

1439990cookie-checkCakePHP IP-Adresse erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy