Jak mogę uzyskać adres IP klienta w Zend-framework 2? Byłby to $ _SERVER ['REMOTE_ADDR'] w zwykłym PHP, ale może jest to inteligentna funkcja Zend?Uzyskaj adres IP użytkownika w strukturze Zend
Wszelkie pomysły?
Jak mogę uzyskać adres IP klienta w Zend-framework 2? Byłby to $ _SERVER ['REMOTE_ADDR'] w zwykłym PHP, ale może jest to inteligentna funkcja Zend?Uzyskaj adres IP użytkownika w strukturze Zend
Wszelkie pomysły?
Obiekt (y) żądania w ZF2 ma metodę o nazwie getServer
. Ta metoda zwraca obiekt implementujący \Zend\Stdlib\ParametersInterface
. W tym konkretnym obiekcie można uzyskać wszystko ze zmiennej $ _SERVER.
Oto dwa przykłady jak użyć metody i przedmiotu:
<?php
// Getting the entire params object
$servParam = $request->getServer();
$remoteAddr = $servParam->get('REMOTE_ADDR');
// Getting specific variable
$remoteAddr = $request->getServer('REMOTE_ADDR');
?>
wielki sekret:
$_SERVER['REMOTE_ADDR']
Nie narastającymi już łatwy rzeczy!
Problemem jest to, że '$ _SERVER [ 'REMOTE_ADDR']' nie zawsze są wiarygodne . Co zrobić, jeśli użytkownik znajduje się za serwerem proxy, a adres IP jest pokazywany w nagłówku 'HTTP_X_FORWARDED_FOR'? Nie bądź tak szybki, aby się naruszyć. –
Jeśli wysłuchasz pytania użytkownika, być może nigdy nie odpowiesz na to pytanie. :) – rafaelphp
@rafaelphp Jeśli sprawdzisz datę tego pytania, nigdy nie napiszesz głupiego komentarza. Powodem, dla którego nie usuwam mojej odpowiedzi jest to, że facet nad tobą ma fajny komentarz z wieloma awanturnikami. Wszyscy czasami się mylą - to był jeden z nielicznych przypadków, gdy dałem złą odpowiedź. Bez wstydu to przyznać, dlatego nie został usunięty. – Sam
Można użyć klasy Zend\Http\PhpEnvironment\RemoteAddress
aby uzyskać adres IP klienta.
$remote = new Zend\Http\PhpEnvironment\RemoteAddress;
echo $remote->getIpAddress();
Zobacz http://framework.zend.com/apidoc/2.1/classes/Zend.Http.PhpEnvironment.RemoteAddress.html.
Uwaga:
Aby włączyć inspekcję nagłówku HTTP_X_FORWARDED_FOR
włącz setUseProxy()
:
$remote->setUseProxy()->getIpAddress();
Napowietrzenie wywołane tym podejściem jest niczym innym jak zbędnym. Dla prostego zadania, jak po prostu uzyskanie zdalnego adresu, użycie tablicy '$ _SERVER' jest po prostu lepsze. – Sam
Ta klasa nie patrzy tylko na REMOTE_ADDR, ale opcjonalnie sprawdza proxy ip i opcjonalnie filtruje zaufane proxy. Jeśli twoja konfiguracja serwera jest taka, że nie możesz polegać na remote_addr, "obciążenie" jednego obiektu jest niczym w porównaniu do zysków. – radnan
Wygląda na REMOTE_ADDR, a kontrola proxy jest domyślnie wyłączona. Ale dobrze jest wiedzieć. – akond
Koszt wytworzenia w wyniku tego podejścia jest niczym innym, jak niepotrzebnym. W przypadku prostego zadania, takiego jak uzyskanie zdalnego adresu, użycie tablicy '$ _SERVER' jest po prostu lepsze. – Sam
@Sam Nie mogę się z tobą więcej zgodzić. Ale celem tej witryny jest udzielanie odpowiedzi na pytania ludzi. I to właśnie robimy. Wspominamy także o radzie i to od tej, która zadaje pytanie, należy zdecydować, co robić. –
Zawierają one prawdziwy punkt, ale zazwyczaj kieruję się zasadą, że użytkownicy nie wiedzą, czego chcą i dlatego powinni kierować się we właściwym kierunku. IMO mojej odpowiedzi brakowało wzmianki o 'getServer()', a twoja odpowiedź nie zawiera wzmianki o napowietrznych - żadnych trudnych uczuć tho :) – Sam