2013-04-09 19 views

Odpowiedz

23

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'); 
?> 
+2

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

+3

@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ć. –

+2

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

-12

wielki sekret:

$_SERVER['REMOTE_ADDR'] 

Nie narastającymi już łatwy rzeczy!

+26

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ć. –

+0

Jeśli wysłuchasz pytania użytkownika, być może nigdy nie odpowiesz na to pytanie. :) – rafaelphp

+1

@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

22

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(); 
+0

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

+9

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

+2

Wygląda na REMOTE_ADDR, a kontrola proxy jest domyślnie wyłączona. Ale dobrze jest wiedzieć. – akond