2013-04-09 24 views

回答

23

ZF2中的請求對象具有名爲getServer的方法。該方法返回一個實現\Zend\Stdlib\ParametersInterface的對象。有了這個特定的對象,你可以從$ _SERVER變量中獲得任何東西。

下面是如何使用的方法和對象兩個例子:

<?php 
    // Getting the entire params object 
    $servParam = $request->getServer(); 
    $remoteAddr = $servParam->get('REMOTE_ADDR'); 

    // Getting specific variable 
    $remoteAddr = $request->getServer('REMOTE_ADDR'); 
?> 
+2

這種方法產生的開銷是沒有必要的。對於像獲取遠程地址這樣的簡單任務,使用'$ _SERVER'數組更簡單。 – Sam 2013-04-10 06:04:32

+3

@Sam我很同意你的意見。但這個網站的目的是爲了解答人們的問題。這就是我們所做的。我們也提出建議,由問題決定如何處理。 – 2013-04-10 08:18:01

+2

包含真實的一點,但我通常遵循的原則,用戶不知道他們想要什麼,因此應引導到正確的方向。海事組織我的回答是錯過提及'getServer()'以及你的答案是缺少提及的開銷 - 沒有硬的感覺tho :) – Sam 2013-04-10 08:57:54

-12

大揭祕:

$_SERVER['REMOTE_ADDR'] 

不要重新發明已經簡單的東西!

+26

這裏的問題是,'$ _ SERVER [ 'REMOTE_ADDR']'並不總是可靠。如果用戶位於代理之後,並且IP由「HTTP_X_FORWARDED_FOR」頭顯示,會怎麼樣?不要那麼快就屈服。 – 2013-06-05 14:25:57

+0

如果你聽用戶的問題,也許你永遠不會那樣。 :) – rafaelphp 2015-11-28 17:12:53

+1

@rafaelphp如果你檢查這個問題的日期,你永遠不會發布這樣一個愚蠢的評論。我不刪除我的答案的原因是因爲你上面的那個人對很多點贊評論有很好的評論。每個人都錯了 - 這是我給出的一個不好的答案的幾次之一。不要承認這一點,這就是爲什麼它沒有被刪除。 – Sam 2015-11-28 21:36:27

22

可以使用Zend\Http\PhpEnvironment\RemoteAddress類來獲取客戶端的IP地址。

$remote = new Zend\Http\PhpEnvironment\RemoteAddress; 
echo $remote->getIpAddress(); 

請參閱http://framework.zend.com/apidoc/2.1/classes/Zend.Http.PhpEnvironment.RemoteAddress.html

注:

爲了使頭HTTP_X_FORWARDED_FOR的檢查,打開setUseProxy()

$remote->setUseProxy()->getIpAddress(); 
+0

這種方法產生的開銷不過是沒有必要的。對於像獲取遠程地址這樣簡單的任務來說,使用'$ _SERVER'數組就更好了。 – Sam 2013-04-10 06:04:57

+9

該類不只是查看REMOTE_ADDR,而是可選地檢查代理IP並可選地篩選出可信代理。如果你的服務器配置是你不能依賴remote_addr的,那麼一個對象的「開銷」與增益沒有任何關係。 – radnan 2013-04-10 13:52:05

+2

它確實看REMOTE_ADDR,默認情況下禁用代理檢查。但這是一個很好的特性。 – akond 2013-04-11 21:00:46