উত্তর:
সার্ভার আইপি এর জন্য এটি পছন্দ করুন:
$_SERVER['SERVER_ADDR'];
এবং এই বন্দরের জন্য
$_SERVER['SERVER_PORT'];
John K
পরিবর্তে উত্তরটি ব্যবহার করুন
আপনি যদি পিএইচপি সংস্করণ 5.3 বা তার বেশি ব্যবহার করেন তবে আপনি নিম্নলিখিতগুলি করতে পারেন:
$host= gethostname();
$ip = gethostbyname($host);
এটি যখন আপনি ওয়েব সার্ভারের মাধ্যমে চলমান না হয়ে স্ট্যান্ড-একা স্ক্রিপ্ট চালাচ্ছেন তখন ভাল কাজ করে।
/etc/hosts
ফাইলটিতে থাকা উচিত এবং দ্রুত হবে - যদিও এটি কেবলমাত্র হতে পারে 127.0.0.1
। এটিতে যদি ডিএনএস কল করতে হয় তবে এটি বলার মতো ধীর হবে।
উদাহরণ স্বরূপ:
$_SERVER['SERVER_ADDR']
যখন আপনার আইআইএস-এ রয়েছে, চেষ্টা করুন:
$_SERVER['LOCAL_ADDR']
$_SERVER['LOCAL_ADDR']
কেবলমাত্র আইআইএসের অধীনে উপলব্ধ যখন পিএইচপি কোনও সিজিআই মডিউল হিসাবে চলমান।
আমি আমার আইপ ঠিকানাটি আমার সাথে সংযোগকারী কোনও দূরবর্তী মেশিনের নয়, এমন একটি উপায় পাওয়ার জন্য এই পৃষ্ঠায় এসেছি।
এটি উইন্ডোজ মেশিনের জন্য কাজ করবে না।
তবে কেউ যদি আমি যা খুঁজছিলাম তার জন্য অনুসন্ধান করে:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
( লিনাক্স এবং ওএস এক্স-তে স্থানীয় মেশিনের প্রাথমিক আইপি ঠিকানা আমি কীভাবে পাব তা নির্লজ্জভাবে অভিযোজিত ? )
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | grep -e '192\.168\.1\.'
সর্বাধিক আপ-ভোট দেওয়া উত্তরগুলির মধ্যে কোনওটিই নির্ভরযোগ্যতার সাথে সার্ভারের সর্বজনীন ঠিকানা প্রদান করবে না। সাধারণত $_SERVER['SERVER_ADDR']
সঠিক হবে, তবে আপনি যদি ভিপিএন এর মাধ্যমে সার্ভারটি অ্যাক্সেস করেন তবে এটি সম্ভবত কোনও পাবলিক ঠিকানার পরিবর্তে অভ্যন্তরীণ নেটওয়ার্কের ঠিকানাটি ফিরিয়ে আনবে এবং একই নেটওয়ার্কে না থাকলেও কিছু কনফিগারেশন খালি থাকবে বা অন্য কোনও নির্দিষ্ট থাকবে মান।
তেমনি, এমন পরিস্থিতি রয়েছে যেখানে $host= gethostname(); $ip = gethostbyname($host);
সঠিক মানগুলি ফেরত দেয় না কারণ এটি উভয় ডিএনএসের উপর নির্ভর করে (অভ্যন্তরীণভাবে কনফিগার করা বা বাহ্যিক রেকর্ডগুলি) এবং সার্ভারের আইপি ঠিকানাটি বহির্ভূত করতে সার্ভারের হোস্টনেম সেটিংস। এই দুটি পদক্ষেপই সম্ভাব্য ত্রুটিযুক্ত। উদাহরণস্বরূপ, যদি সার্ভারের হোস্টনামটি কোনও ডোমেন নেম (যেমন HOSTNAME=yahoo.com
) এর মতো ফর্ম্যাট হয় তবে (কমপক্ষে আমার php5.4 / Centos6 সেটআপে) gethostbyname
স্থানীয় সার্ভারের পরিবর্তে ইয়াহু ডট কমের ঠিকানা সন্ধান করতে সরাসরি চলে যাবে।
তবুও, যেহেতু gethostbyname
পাবলিক ডিএনএস-এ ফিরে আসে অপ্রকাশিত বা ভুল পাবলিক ডিএনএস রেকর্ড সহ একটি টেস্টিং সার্ভার রেকর্ড করে (উদাহরণস্বরূপ, আপনি সার্ভারটি localhost
বা আইপি ঠিকানা দ্বারা অ্যাক্সেস করছেন , অথবা আপনি যদি স্থানীয় hosts
ফাইল ব্যবহার করে পাবলিক ডিএনএসকে ওভাররাইড করছেন ) তবে আপনি ' কোনও আইপি ঠিকানা ফিরে পাবে না (এটি কেবল হোস্টনামটি ফিরিয়ে দেবে) বা আরও খারাপ এটি জনসাধারণের ডিএনএস রেকর্ডে উল্লিখিত ভুল ঠিকানাটি উপস্থিত থাকলে বা ডোমেনের জন্য কোনও ওয়াইল্ডকার্ড উপস্থিত থাকলে তা ফিরিয়ে আনবে।
পরিস্থিতির উপর নির্ভর করে আপনিও এরকম কিছু করে তৃতীয় পদ্ধতির চেষ্টা করতে পারেন:
$external_ip = exec('curl http://ipecho.net/plain; echo');
এটির নিজস্ব ত্রুটি রয়েছে (একটি নির্দিষ্ট তৃতীয় পক্ষের সাইটের উপর নির্ভর করে এবং এমন কোনও নেটওয়ার্ক সেটিংস থাকতে পারে যা কোনও ভিন্ন হোস্ট বা প্রক্সি দিয়ে আউটবাউন্ড সংযোগগুলি চালিত করে) এবং gethostbyname
এটি ধীর হতে পারে। আমি সত্যই নিশ্চিত নই যে কোন পদ্ধতিটি বেশিরভাগ ক্ষেত্রে সঠিক হয়ে উঠবে, তবে পাঠটি মনে রাখা উচিত যে নির্দিষ্ট পরিস্থিতি / কনফিগারেশনের ফলে এই সমস্ত পদ্ধতিরই ভুল আউটপুট আসবে ... তাই যদি সম্ভব হয় তবে যাচাই করে নিন যে আপনি যে পদ্ধতিটি করেছেন ব্যবহার করা আপনার প্রত্যাশা করা মানগুলি ফিরিয়ে দিচ্ছে।
আপনার সার্ভারে ইনস্টল করা কার্ল সম্পর্কে চিন্তা না করে আপনি উপরের উদাহরণগুলির অভিযোজন হিসাবে এটি ব্যবহার করতে পারেন।
<?php
// create a new cURL resource
$ch = curl_init ();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
আপনি যদি ব্যাশ শেলের পিএইচপি ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন:
$server_name=exec('hostname');
কারণ $_SERVER[] SERVER_ADDR
, HTTP_HOST
এবং SERVER_NAME
সেট করা নেই।
আমি এটি আমার জন্য কাজ করতে পেয়েছি: GetHostByName ("");
উইন্ডোজ 7 এ অ্যাপাচি ওয়েবসার্ভারে এক্সএএমএপপি ভি 1.7.1 চলছে। দুর্ভাগ্যক্রমে এটি আমার প্রবেশদ্বার আইপি ঠিকানা দেয়।
আমি সবেমাত্র একটি সহজ স্ক্রিপ্ট তৈরি করেছি যা আইআইএসে $ _SERVER ['REMOTE_ADDR'] এবং $ _SERVER ['SERVER_ADDR'] ফিরিয়ে আনবে যাতে আপনার প্রতিটি পরিবর্তনশীল পরিবর্তন করতে না হয়। প্রতিটি পৃষ্ঠার অন্তর্ভুক্ত আপনার পিএইচপি ফাইলটিতে কেবল এই পাঠ্যটি আটকে দিন।
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
$ _SERVER অ্যারেটি পরীক্ষা করুন
echo $_SERVER['SERVER_ADDR'];
$_SERVER["SERVER_ADDR"]
এইচটিটিপি শিরোনামগুলির সাথে কোনও সম্পর্ক নেই। এটি সার্ভার সফ্টওয়্যার দ্বারা পূরণ করা হয়, _S _SERVER এর সমস্ত HTTP সম্পর্কিত স্টাফ HTTP_ এর সাথে উপসর্গযুক্ত।php.net/manual/en/remitted.variables.server.php
এটার মত:
$_SERVER['SERVER_ADDR'];