如何在Zend-framework 2中獲取客戶端的IP地址?它是普通PHP中的$ _SERVER ['REMOTE_ADDR'],但也許是智能的Zend函數?在zend框架中獲取用戶IP地址
任何想法?
如何在Zend-framework 2中獲取客戶端的IP地址?它是普通PHP中的$ _SERVER ['REMOTE_ADDR'],但也許是智能的Zend函數?在zend框架中獲取用戶IP地址
任何想法?
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');
?>
大揭祕:
$_SERVER['REMOTE_ADDR']
不要重新發明已經簡單的東西!
這裏的問題是,'$ _ SERVER [ 'REMOTE_ADDR']'並不總是可靠。如果用戶位於代理之後,並且IP由「HTTP_X_FORWARDED_FOR」頭顯示,會怎麼樣?不要那麼快就屈服。 – 2013-06-05 14:25:57
如果你聽用戶的問題,也許你永遠不會那樣。 :) – rafaelphp 2015-11-28 17:12:53
@rafaelphp如果你檢查這個問題的日期,你永遠不會發布這樣一個愚蠢的評論。我不刪除我的答案的原因是因爲你上面的那個人對很多點贊評論有很好的評論。每個人都錯了 - 這是我給出的一個不好的答案的幾次之一。不要承認這一點,這就是爲什麼它沒有被刪除。 – Sam 2015-11-28 21:36:27
可以使用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();
這種方法產生的開銷是沒有必要的。對於像獲取遠程地址這樣的簡單任務,使用'$ _SERVER'數組更簡單。 – Sam 2013-04-10 06:04:32
@Sam我很同意你的意見。但這個網站的目的是爲了解答人們的問題。這就是我們所做的。我們也提出建議,由問題決定如何處理。 – 2013-04-10 08:18:01
包含真實的一點,但我通常遵循的原則,用戶不知道他們想要什麼,因此應引導到正確的方向。海事組織我的回答是錯過提及'getServer()'以及你的答案是缺少提及的開銷 - 沒有硬的感覺tho :) – Sam 2013-04-10 08:57:54