2013-04-09 4 views
15

में उपयोगकर्ता आईपी पता प्राप्त करें मैं ज़ेंड-फ्रेमवर्क 2 में क्लाइंट का आईपी पता कैसे प्राप्त कर सकता हूं? यह सादा PHP में $ _SERVER ['REMOTE_ADDR'] होगा, लेकिन शायद स्मार्ट ज़ेंड फ़ंक्शन हो सकता है?ज़ेंड फ्रेमवर्क

कोई भी विचार?

उत्तर

23

जेडएफ 2 में अनुरोध ऑब्जेक्ट में 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

+3

@ सैम मैं आपके साथ उस पर अधिक सहमत नहीं हो सकता। लेकिन इस साइट का उद्देश्य लोगों के सवालों का जवाब देना है। और यही वह है जो हम करते हैं। हम एक सलाह का भी जिक्र करते हैं और यह उस पर निर्भर करता है जो सवाल पूछता है कि क्या करना है। –

+2

सही बिंदु निहित है, हालांकि मैं आमतौर पर सिद्धांत का पालन करता हूं कि उपयोगकर्ता नहीं जानते कि वे क्या चाहते हैं और इसलिए सही दिशा में निर्देशित किया जाना चाहिए। आईएमओ में मेरे जवाब में 'गेटसेवर()' का उल्लेख गायब था और साथ ही आपके उत्तर में ओवरहेड का जिक्र नहीं है - कोई कठोर भावना नहीं है :) – Sam

-12

बिग रहस्य:

$_SERVER['REMOTE_ADDR'] 

पहले से ही आसान सामान बदलने मत करो!

+26

इस के साथ समस्या यह है, कि '$ _SERVER [ 'REMOTE_ADDR']' हमेशा विश्वसनीय है । क्या होगा यदि उपयोगकर्ता प्रॉक्सी के पीछे है, और आईपी को 'HTTP_X_FORWARDED_FOR' शीर्षलेख द्वारा दिखाया गया है? Condescend करने के लिए इतना तेज़ मत बनो। –

+0

यदि आप उपयोगकर्ता प्रश्न सुनते हैं तो शायद आप इसे कभी भी नहीं मानेंगे। :) – rafaelphp

+1

@rafaelphp यदि आप इस प्रश्न की तारीख की जांच करते हैं, तो आप कभी भी इस तरह की बेवकूफ टिप्पणी पोस्ट नहीं करेंगे। कारण मैं अपना जवाब नहीं हटा रहा हूं क्योंकि आपके ऊपर वाला लड़का कई अपवॉट्स के साथ एक अच्छी टिप्पणी है। हर समय हर कोई गलत होता है - यह कुछ बार मैंने एक बुरा जवाब दिया था। कोई शर्म की बात नहीं है कि, यही कारण है कि यह हटाया नहीं गया है। – Sam

22

आप ग्राहक आईपी पते पाने के लिए Zend\Http\PhpEnvironment\RemoteAddress वर्ग का उपयोग कर सकते हैं:

यहाँ कैसे विधि और वस्तु का उपयोग करने के दो उदाहरण हैं।

$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

+9

यह कक्षा सिर्फ REMOTE_ADDR को नहीं देखती है लेकिन वैकल्पिक रूप से प्रॉक्सी आईपी की जांच करती है और वैकल्पिक रूप से भरोसेमंद प्रॉक्सी को भी फ़िल्टर करती है। यदि आपका सर्वर कॉन्फ़िगरेशन ऐसा है कि आप remote_addr पर भरोसा नहीं कर सकते हैं तो एक ऑब्जेक्ट का "ओवरहेड" लाभ की तुलना में कुछ भी नहीं है। – radnan

+2

यह REMOTE_ADDR को देखता है, और प्रॉक्सी चेक डिफ़ॉल्ट रूप से अक्षम है। लेकिन यह जानना एक अच्छी सुविधा है। – akond