পিএইচপি-তে HTTP_HOST এবং SERVER_NAME এর মধ্যে পার্থক্য কী?


533

পিএইচপি HTTP_HOSTএবং এর SERVER_NAMEমধ্যে পার্থক্য কী ?

কোথায়:

  • HTTP_POST === $_SERVER['HTTP_HOST']
  • SERVER_NAME === $_SERVER['SERVER_NAME']

কখন আপনি একে অপরের ব্যবহার বিবেচনা করবেন এবং কেন?


14
"আমি সাধারণত HTTP_HOST এর জন্য যাই, যাতে ব্যবহারকারীরা ঠিক যে হোস্ট নামটি শুরু করেছিলেন তার উপর থেকে যায় example উদাহরণস্বরূপ যদি আমার .com এবং .org ডোমেনে একই সাইট থাকে তবে আমি .org থেকে কাউকে পাঠাতে চাই না .com, বিশেষত যদি তারা .org এ লগইন টোকেন থাকতে পারে তবে অন্য ডোমেইনে প্রেরণ করা থাকলে তারা হারাতে পারে। " - থেকে এটি এবং কিছু অন্যান্য আকর্ষণীয় পয়েন্ট stackoverflow.com/questions/1459739/...
Yarin

5
@ ইয়্যারিন, এর ফলাফলগুলি হোয়াইটলিস্ট-যাচাইHTTP_HOST করতে ভুলবেন না । অন্যথায় কোনও আক্রমণকারী HTTP এর অনুরোধে কোনও মান রাখতে Host:পারে এবং সার্ভারটিকে এটি গ্রহণ করতে পারে।
পেসারিয়ার

6
নতুনদের: এই প্রশ্নের মান সাধারণত মাধ্যমে প্রাপ্ত উল্লেখ করা হয় $_SERVER['HTTP_HOST']বা$_SERVER['SERVER_NAME']
গ্রেগরী কসমো Haun

উত্তর:


780

HTTP_HOSTথেকে প্রাপ্ত হয় HTTP অনুরোধ হেডার এবং এই কি ক্লায়েন্ট আসলে যেমন অনুরোধের "লক্ষ্য হোস্ট" ব্যবহার করা হয়। SERVER_NAMEসার্ভার কনফিগ মধ্যে সংজ্ঞায়িত করা হয়। কোনটি ব্যবহার করবেন তা নির্ভর করে আপনার এটির জন্য কী প্রয়োজন। তবে আপনার এখন বুঝতে হবে যে সেগুলি হ'ল একটি ক্লায়েন্ট-নিয়ন্ত্রিত মান যা এইভাবে ব্যবসায়িক যুক্তিতে ব্যবহারের জন্য নির্ভরযোগ্য নয় এবং অন্যটি একটি সার্ভার-নিয়ন্ত্রিত মান যা আরও নির্ভরযোগ্য। তবে আপনাকে অবশ্যই এটি নিশ্চিত করতে হবে যে প্রশ্নে থাকা ওয়েবসভারটি SERVER_NAMEসঠিকভাবে কনফিগার করেছে। উদাহরণস্বরূপ অ্যাপাচি এইচটিটিপিডি নেওয়া, এটির ডকুমেন্টেশন থেকে এখানে একটি নির্যাস রয়েছে :

যদি কোনও ServerNameনির্দিষ্ট না করা থাকে, তবে সার্ভারটি আইপি ঠিকানায় বিপরীত অনুসন্ধান করে হোস্টনামটি কেটে নেওয়ার চেষ্টা করে। যদি কোনও পোর্ট নির্দিষ্ট না করা থাকে ServerName, তবে সার্ভারটি আসন্ন অনুরোধ থেকে পোর্টটি ব্যবহার করবে। অনুকূল নির্ভরযোগ্যতা এবং পূর্বাভাসযোগ্যতার জন্য আপনার ServerNameনির্দেশের সাহায্যে একটি স্পষ্ট হোস্টনেম এবং পোর্ট নির্দিষ্ট করা উচিত ।


আপডেট : আপনার প্রশ্নের উপরে পেক্কার উত্তর যাচাই করার পরে যা বোবিন্সের উত্তরের একটি লিঙ্ক রয়েছে যে পিএইচপি সর্বদা HTTP_HOSTএর মূল্য ফিরিয়ে দেয় SERVER_NAMEযেটি আমার নিজের পিএইচপি ৪.x + অ্যাপাচি এইচটিপিডি 1.2.x অভিজ্ঞতার বিপরীতে কয়েক বছর আগে থেকে গেছে x , আমি উইন্ডোজ এক্সপিতে আমার বর্তমান এক্সএএমপিপি পরিবেশ (পিএইচপি 5.2.8 সহ অ্যাপাচি HTTPD 2.2.1) থেকে কিছু ধুলো উড়িয়েছি, এটি শুরু করেছি, একটি পিএইচপি পৃষ্ঠা তৈরি করেছি যা উভয় মানকে মুদ্রণ করে, একটি শিরোনাম URLConnectionসংশোধন করে একটি জাভা পরীক্ষা অ্যাপ্লিকেশন তৈরি করেছে Hostএবং পরীক্ষা আমাকে শিখিয়েছিল যে এটি সত্যই (ভুলভাবে) কেস।

প্রথমে পিএইচপি সম্পর্কে সন্দেহ করার পরে এবং এই বিষয়ে কিছু পিএইচপি বাগ রিপোর্ট খননের পরে , আমি জানতে পারি যে সমস্যার মূলটি ওয়েব সার্ভারে ব্যবহৃত হয়েছে, Hostযখন SERVER_NAMEএটি অনুরোধ করা হয়েছিল তখন এটি ভুলভাবে এইচটিটিপি শিরোনাম ফিরিয়েছিল । সুতরাং আমি অ্যাপাচি এইচটিটিপিডি বাগের প্রতিবেদনগুলি বিষয়টির সাথে সম্পর্কিত বিভিন্ন কীওয়ার্ড ব্যবহার করে খনন করেছি এবং অবশেষে আমি একটি সম্পর্কিত বাগ পেয়েছি । এই আচরণটি অ্যাপাচি HTTPD 1.3 এর কাছাকাছি থেকে চালু হয়েছিল। আপনি সেট প্রয়োজন UseCanonicalNameথেকে নির্দেশ onমধ্যে <VirtualHost>প্রবেশ ServerNameমধ্যে httpd.conf(এছাড়াও নীচে সাবধানবাণী পরীক্ষা ডকুমেন্ট !)।

<VirtualHost *>
    ServerName example.com
    UseCanonicalName on
</VirtualHost> 

এটি আমার পক্ষে কাজ করেছে।

সংক্ষিপ্ত আকারে, SERVER_NAMEআরও নির্ভরযোগ্য, তবে আপনি সার্ভার কনফিগারেশনের উপর নির্ভরশীল !


5
ঠিক আছে, এটি আমার সমস্যার সমাধান করে, যা ওপির সাথে সম্পর্কিত নয় তবে প্রাসঙ্গিক। কোনও ব্রাউজার সরবরাহ করতে পারে এমন কোনও কিছু ব্যবহার করে আমি সুরক্ষা সম্পর্কিত সমস্যা সম্পর্কে খুব উদ্বিগ্ন ছিলাম। এই উত্তরটি একটি বিশাল সহায়তা ছিল। এটি একসাথে রাখার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ।
ইয়িটজক

2
আপনি কেন বলেন HTTP_HOST নির্ভরযোগ্য নয়? হ্যাঁ এটি ব্যবহারকারীর দ্বারা সরবরাহ করা হয়, তবে ব্যবহারকারী যদি কিছু জাল মূল্য দেয় তবে আপনার সার্ভার কনফিগারেশনটি স্বয়ংক্রিয়ভাবে 503 ফেরত আসবে এবং আপনার পিএইচপি স্ক্রিপ্টটি চালানো হবে না!
পেসারিয়ার

1
@ পেসার: এই উত্তরটি লেখার সময়, এটি হয়নি। সংস্করণগুলির উত্তরে উল্লেখ করা হয়েছে। আমি আর পিএইচপি রাখি না, সুতরাং এটি সত্যিই নতুন সংস্করণে পরিবর্তিত হয়েছে কিনা তা আমি বলতে পারি না।
বালুসসি

2
উইনএক্সপি থেকে অ্যাপাচি চালিত করার একটি সহজ উপায় হ'ল 'হোস্ট' ফাইলে একটি লাইন যুক্ত করে বলা হয়েছে যে সার্ভারের আইপি অন্য ডোমেনকে দেওয়া হয়েছে, যেমন: "127.0.0.1 mydomain.com"। আমি একটি স্থানীয় ওয়েবসাইট দেখানোর জন্য আমার শ্রোতাদের ট্রিক করে দেখানোর জন্য এটি অনেকবার ব্যবহার করেছি যাতে আমি ইন্টারনেট সংযোগ পেয়েছি এবং সাইটটি খুব দ্রুত লোড হয়েছে। আপনি অন্য পথে যেতে পারেন এবং "173.194.41.5 লোকালহোস্ট" দিয়ে স্থানীয়ভাবে আপাচে তা চালিয়ে চলেছে তা ভাবতে চালিত করতে পারেন, সুতরাং আপনার আপাচি ভালভাবে কনফিগার করা আছে কিনা তা নিশ্চিত না হওয়া পর্যন্ত আপনি কখনই SERVER_NAME- তে সম্পূর্ণ বিশ্বাস করতে পারবেন না।
ভিসেন্তেরের

1
আমি কেবল যুক্ত করতে চাই যে এনজিআইএনএক্স + পিএইচপি-এফপিএম server_nameনির্দেশ অনুসারে সেট করা মানটি ফেরত দেয় । বিশেষত যদি server_nameসেট না থাকে তবে _SERVER["SERVER_NAME"]তা খালি থাকবে।
সাদা_জেকো

69

HTTP_HOSTক্লায়েন্টের পাঠানো টার্গেট হোস্ট। এটি ব্যবহারকারী দ্বারা অবাধে ম্যানিপুলেট করা যেতে পারে। আপনার সাইটে একটি HTTP_HOSTমান জিজ্ঞাসা করে একটি অনুরোধ প্রেরণে কোনও সমস্যা নেই www.stackoverflow.com

SERVER_NAMEসার্ভারের VirtualHostসংজ্ঞা থেকে আসে এবং তাই এটি আরও নির্ভরযোগ্য হিসাবে বিবেচিত হয়। এটি যাইহোক, আপনার ওয়েব সার্ভারটি কীভাবে সেট আপ করা হয় তার সাথে সম্পর্কিত কিছু শর্তের বাইরে থেকেও এটিকে চালিত করা যেতে পারে: উভয় প্রকারের সুরক্ষার দিকগুলির সাথে সম্পর্কিত এই এই প্রশ্নটি দেখুন ।

নিরাপদে থাকার জন্য আপনার উপর নির্ভর করা উচিত নয়। এটি বলেছিল, কী ব্যবহার করবেন তা নির্ভর করে আপনি কী করতে চান তার উপর। আপনার স্ক্রিপ্টটি কোন ডোমেনটি চলছে তা আপনি যদি নির্ধারণ করতে চান তবে HTTP_HOSTদূষিত ব্যবহারকারীর কাছ থেকে অবৈধ মানগুলি যতক্ষণ না কিছু ভেঙে ফেলতে পারে ততক্ষণ আপনি নিরাপদে ব্যবহার করতে পারবেন ।


8
হ্যাঁ তবে www.stackoverflow.com এর একটি HTTP_HOST মান জিজ্ঞাসা করার অনুরোধটি বেশিরভাগ HTTP সার্ভারগুলি সামনের দিকে প্রত্যাখ্যান করবে যাতে পিএইচপি স্ক্রিপ্ট এমনকি অনুরোধটি দেখতে না পাবে!
পেসারিয়ার

2
@ পেসিয়ার সত্য, তবে সার্ভারটি সঠিকভাবে কনফিগার করা না থাকলে সর্বদা নয়।
পেক্কা

1
বালুসকের পোস্টে উল্লিখিত হিসাবে, আপনি যখন আইপি দ্বারা একটি অ্যাপাচি ভার্চুয়ালহোস্ট অ্যাক্সেস করেন, তখন এই উভয় ভেরিয়েবলের আইপি থাকে (ডিফল্টরূপে), প্রকৃত সার্ভারের নাম নয়। আসল সার্ভারের নাম হতে UseCanonicalName onবাধ্য SERVER_NAMEকরতে আপনাকে httpd.conf ব্যবহার করতে হবে।
সাইমন পূর্ব

@ পেক্কা 웃, সার্ভারটি যদি সঠিকভাবে কনফিগার না করা হয় তবে এটিও $_SERVER['SERVER_NAME']কাজ করবে না । একটি খারাপভাবে কনফিগার করা সার্ভার $_SERVER['SERVER_NAME']ক্লায়েন্টের Host:অনুরোধের মানের ভিত্তিতে সেট করবে । উভয়ই সমান।
পেসারিয়ার

ভাল উত্তর, কিন্তু আমি ভার্চুয়াল হোস্টিং ধরে নিব না।
অ্যান্টনি রুটলেজ

55

যেমনটি আমি এই উত্তরে উল্লেখ করেছি যে সার্ভারটি যদি ৮০ টি ব্যতীত অন্য কোনও বন্দরে চালিত হয় (যেমন কোনও উন্নয়ন / ইন্ট্রানেট মেশিনে প্রচলিত হতে পারে) তবে HTTP_HOSTপোর্টটি অন্তর্ভুক্ত থাকে, যখন SERVER_NAMEতা থাকে না।

$_SERVER['HTTP_HOST'] == 'localhost:8080'
$_SERVER['SERVER_NAME'] == 'localhost'

(অ্যাপাচি পোর্ট-ভিত্তিক ভার্চুয়ালহোস্টগুলিতে আমি এটি লক্ষ্য করেছি)

লক্ষ্য করুন HTTP_HOSTনেই না থাকতে :443যখন HTTPS দ্বারা চলমান (যদি না আপনি একটি অ-মানক পোর্ট, যা আমি পরীক্ষিত না উপর চালাচ্ছেন)।

অন্যরা যেমন উল্লেখ করেছে, আইপিভি using ব্যবহার করার সময় দু'জনের মধ্যেও পার্থক্য রয়েছে:

$_SERVER['HTTP_HOST'] == '[::1]'
$_SERVER['SERVER_NAME'] == '::1'

2
তারা কখন এই কুখ্যাত আচরণটি ঠিক করবে?
পেসেরিয়র

27

দয়া করে মনে রাখবেন যে আপনি যদি আইপিভি 6 ব্যবহার করতে চান তবে আপনি সম্ভবত এটির HTTP_HOSTপরিবর্তে ব্যবহার করতে চান SERVER_NAME। আপনি যদি http://[::1]/পরিবেশের ভেরিয়েবলগুলি প্রবেশ করেন তবে নিম্নলিখিতগুলি হবে:

HTTP_HOST = [::1]
SERVER_NAME = ::1

এর অর্থ হ'ল, উদাহরণস্বরূপ আপনি যদি একটি মোড_উইরাইট করেন তবে আপনি একটি বাজে ফলাফল পেতে পারেন। কোনও এসএসএল পুনর্নির্দেশের উদাহরণ:

# SERVER_NAME will NOT work - Redirection to https://::1/
RewriteRule .* https://%{SERVER_NAME}/

# HTTP_HOST will work - Redirection to https://[::1]/
RewriteRule .* https://%{HTTP_HOST}/

এটি কেবলমাত্র প্রযোজ্য যদি আপনি কোনও হোস্টনাম ছাড়াই সার্ভারটিতে অ্যাক্সেস করেন।


1
সাইটগ্রাউন্ডে, তাদের অভ্যন্তরীণ HTTP- তে https পুনর্নির্দেশিত কোডে, ব্যবহার করুনhttps://%{SERVER_NAME}%{REQUEST_URI}
IXN

6

আপনি যদি সার্ভার.এফপি বা যা কিছু যাচাই করতে চান তবে নীচের মাধ্যমে এটি কল করতে চান:

<?php
    phpinfo(INFO_VARIABLES);
?>

অথবা

<?php
    header("Content-type: text/plain");

    print_r($_SERVER);
?>

তারপরে এটি আপনার সাইটের জন্য সমস্ত বৈধ ইউআরএল দিয়ে অ্যাক্সেস করুন এবং পার্থক্যটি দেখুন।


5

আমি যা জানতে চাই তা নির্ভর করে। SERVER_NAME হ'ল সার্ভারটির হোস্ট নাম, যখন HTTP_HOST ক্লায়েন্টের সাথে সংযুক্ত ভার্চুয়াল হোস্ট।


4
হুবহু সত্য রোল্যান্ড নয়, SERVER_NAMEসাধারণত ভার্চুয়ালহোস্টের নাম, সার্ভার নিজেই নয়। এবং অ্যাপাচি- SERVER_NAMEতে প্রায়শই একই মান সহ জনপ্রিয় হয় HTTP_HOST(বালুসকের উত্তর দেখুন)।
সাইমন পূর্ব

1
@ সিমন, যেহেতু মুস্ট হোস্টগুলি এখন ভার্চুয়ালহোস্ট, "সার্ভার নিজেই" নাম দিয়ে আপনি কী বোঝাতে চাইছেন?
পেসারিয়ার

আপনি যদি কোনও ওয়েবসাইটের সাথে ভার্চুয়াল ব্যক্তিগত সার্ভার (ভিপিএস) চালাচ্ছেন তবে SERVER_NAMEভার্চুয়াল হোস্টের ক্ষেত্রে এটি প্রযোজ্য তা আপনাকে ধরে নিতে হবে না । তবে, এখনও একটি সাইটের জন্য ভার্চুয়াল হোস্ট সেটআপ ব্যবহার করতে পারেন। অনেকে শেয়ার্ড হোস্টিং ব্যবহার করেন, তাই আমি আপনার বক্তব্যটি দেখতে পাচ্ছি।
অ্যান্টনি রুটলেজ

2

লোকেরা ' SERVER_NAMEবেশি নির্ভরযোগ্য' বলতে কী বোঝায় তা বুঝতে আমার কিছুটা সময় লেগেছে । আমি একটি ভাগ করা সার্ভার ব্যবহার করি এবং ভার্চুয়াল হোস্ট নির্দেশের অ্যাক্সেস নেই access সুতরাং, আমি বিভিন্ন ডিরেক্টরিতে .htaccess বিভিন্ন HTTP_HOSTগুলি ম্যাপ করতে mod_rewrite ব্যবহার করি । যে ক্ষেত্রে, এটা HTTP_HOSTযে অর্থবহ।

পরিস্থিতি একই রকম হয় যদি কেউ নাম ভিত্তিক ভার্চুয়াল হোস্ট ব্যবহার করে: ভার্চুয়াল হোস্টের মধ্যে ServerNameনির্দেশিকাটি কেবল এই ভার্চুয়াল হোস্টে কোন হোস্টনামটি ম্যাপ করা হবে তা বলে। নীচের লাইনটি হ'ল, উভয় ক্ষেত্রেই, অনুরোধের সময় ক্লায়েন্টের দ্বারা সরবরাহ করা হোস্টনামটি HTTP_HOSTঅবশ্যই সার্ভারের মধ্যে একটি নামের সাথে মিলে যেতে হবে, যা নিজেই একটি ডিরেক্টরিতে ম্যাপ করা হয়। ম্যাপিংটি ভার্চুয়াল হোস্টের নির্দেশের সাথে বা htaccess mod_rewrite বিধি দ্বারা সম্পন্ন কিনা তা এখানে গৌণ। এই ক্ষেত্রে, HTTP_HOSTহিসাবে একই হবে SERVER_NAME। আমি আনন্দিত যে অ্যাপাচি সেভাবে কনফিগার করা হয়েছে।

তবে আইপি-ভিত্তিক ভার্চুয়াল হোস্টগুলির সাথে পরিস্থিতি আলাদা। এই ক্ষেত্রে এবং শুধুমাত্র এই ক্ষেত্রে, SERVER_NAMEএবং HTTP_HOSTআলাদা হতে পারে, কারণ এখন ক্লায়েন্ট নাম দ্বারা নয়, আইপি দ্বারা সার্ভারটি নির্বাচন করে। প্রকৃতপক্ষে, এখানে বিশেষ কনফিগারেশন থাকতে পারে যেখানে এটি গুরুত্বপূর্ণ।

সুতরাং, এখন থেকে শুরু করে, আমি ব্যবহার করব SERVER_NAME, যদি এই বিশেষ কনফিগারেশনে আমার কোডটি পোর্ট করা হয়।


2

ধরে নিই যে একটিতে একটি সাধারণ সেটআপ রয়েছে (সেন্টস 7, অ্যাপাচি ২.৪.x এবং পিএইচপি ৫..6.২০) এবং কেবল একটি ওয়েবসাইট (ভার্চুয়াল হোস্টিং অনুমান করে নয়) ...

পিএইচপি অর্থে, $_SERVER['SERVER_NAME']কোনও উপাদান পিএইচপি হ'ল httpd.conf $_SERVERএ আপনার অ্যাপাচি কনফিগারেশন (এর সাথে **ServerName**নির্দেশ UseCanonicalName On) এর উপর ভিত্তি করে সুপারগ্লোবলে নিবন্ধিত হয় (এটি কোনও ভার্চুয়াল হোস্ট কনফিগারেশন ফাইল হতে পারে, যাইহোক, ইত্যাদি ...)। HTTP_HOST HTTP hostশিরোনাম থেকে প্রাপ্ত । এটি ব্যবহারকারীর ইনপুট হিসাবে বিবেচনা করুন। ফিল্টার এবং ব্যবহারের আগে বৈধতা।

এখানে $_SERVER['SERVER_NAME']তুলনার ভিত্তি হিসাবে আমি কোথায় ব্যবহার করি তার একটি উদাহরণ এখানে । নিম্নলিখিত নামটি একটি কংক্রিট শিশু শ্রেণীর নাম থেকে তৈরি করা হয়েছে ServerValidator(সন্তানের Validator)। ServerValidatorusing _SERVER এ ছয় বা সাতটি উপাদান ব্যবহার করার আগে তাদের পরীক্ষা করে।

HTTP অনুরোধটি পোস্ট করা হয়েছে তা নির্ধারণের ক্ষেত্রে, আমি এই পদ্ধতিটি ব্যবহার করি।

public function isPOST()
{
    return (($this->requestMethod === 'POST')    &&  // Ignore
            $this->hasTokenTimeLeft()            &&  // Ignore
            $this->hasSameGETandPOSTIdentities() &&  // Ingore
            ($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')));
}

এই পদ্ধতিটি বলা হওয়ার সাথে সাথে, প্রাসঙ্গিক $ _SERVER উপাদানগুলির সমস্ত ফিল্টারিং এবং বৈধকরণ ঘটতে পারে (এবং প্রাসঙ্গিক বৈশিষ্ট্য সেট)।

লাইন ...

($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')

... $_SERVER['HTTP_HOST']মানটি (চূড়ান্তভাবে অনুরোধ করা hostHTTP শিরোনাম থেকে প্রাপ্ত ) পরীক্ষা করে $_SERVER['SERVER_NAME']

এখন আমি superglobal হয় কথা ব্যবহার করছি আমার উদাহরণস্বরূপ ব্যাখ্যা করতে, কিন্তু যে ঠিক কারণ কিছু মানুষের সাথে অপরিচিত হয় INPUT_GET, INPUT_POSTএবং INPUT_SERVERশুভেচ্ছা করতে filter_input_array()

বটম লাইন আমি আমার সার্ভারে পোস্ট অনুরোধ পরিচালনা না করার, হয় সব চার শর্ত পূরণ করা হয়। সুতরাং, পোষ্ট অনুরোধগুলির শর্তে, এইচটিটিপি hostশিরোনাম সরবরাহ করতে ব্যর্থতা ( কঠোর এইচটিটিপি 1.0 ব্রাউজারের জন্য বানান ডুম ডুম) । তাছাড়া, অনুরোধ করা হোস্ট মান মেলানো জন্য এ httpd.conf , মান জন্য, এবং, এক্সটেনশন দ্বারা মধ্যে superglobal হয়। আবার, আমি পিএইচপি ফিল্টার ফাংশনগুলি ব্যবহার করব , তবে আপনি আমার বামনটি ধরেন।ServerName$_SERVER('SERVER_NAME')$_SERVERINPUT_SERVER

মনে রাখবেন যে আপাচি প্রায়শই স্ট্যান্ডার্ড পুনঃনির্দেশগুলিতে ব্যবহার ServerNameকরে (যেমন কোনও ইউআরএল ছাড়িয়ে ট্র্যাশিং স্ল্যাশ ছেড়ে দেওয়া: উদাহরণস্বরূপ, http://www.foo.com হয়ে উঠেছে http://www.foo.com/ ), আপনি না থাকলেও ইউআরএল পুনর্লিখন ব্যবহার।

আমি $_SERVER['SERVER_NAME']মান হিসাবে ব্যবহার করি , না $_SERVER['HTTP_HOST']। এই ইস্যুতে অনেক পিছনে রয়েছে। $_SERVER['HTTP_HOST']খালি থাকতে পারে, সুতরাং উপরোক্ত আমার পাবলিক পদ্ধতির মতো কোড কনভেনশন তৈরির ভিত্তি এটি হওয়া উচিত নয়। তবে, কেবল উভয়ই সেট করা হতে পারে তারা গ্যারান্টি দেয় না যে তারা সমান হবে। নিশ্চিত হয়ে ওঠার জন্য পরীক্ষার সর্বোত্তম উপায় (অ্যাপাচি সংস্করণ এবং পিএইচপি সংস্করণ মনে রাখে)।


0

বালাসসি যেমন বলেছিল যে SERVER_NAME নির্ভরযোগ্য নয় এবং এটি অ্যাপাচি কনফিগারেশনে পরিবর্তিত হতে পারে, সার্ভারের সার্ভারের নাম কনফিগার এবং ফায়ারওয়াল যা আপনার এবং সার্ভারের মধ্যে থাকতে পারে।

নিম্নলিখিত ফাংশনটি সর্বদা পোর্ট ছাড়াই আসল হোস্ট (ব্যবহারকারী টাইপড হোস্ট) ফেরত দেয় এবং এটি প্রায় নির্ভরযোগ্য:

function getRealHost(){
   list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
   return $realHost;
}

0

Web _SERVER ['SERVER_NAME'] আপনার ওয়েব সার্ভারের কনফিগারেশনের উপর ভিত্তি করে। _S _SERVER ['HTTP_HOST'] ক্লায়েন্টের অনুরোধের ভিত্তিতে তৈরি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.