PHP Superglobals Variable পর্ব-৩: PHP $_SERVER Super Global

PHP তে $_SERVER টি কি ?

PHP তে $_SERVER টি হচ্ছে একটি Superglobal Variable যা মূলত PHP ভিত্তিক সার্ভার এর headers, path, Server name, Server software, Server protocol, IP address এর মতো বিভিন্ন তথ্য array আকারে ধারণ করে। তবে এই superglobals variable টি ভিন্ন ভিন্ন সার্ভার এর জন্য ভিন্ন ভিন্ন ফলাফল দেখাতে পারে। অর্থাৎ সব সার্ভারের জন্য একই রেজাল্ট নাও দেখাতে পারে। $_SERVER Superglobals variable টি কি কি রেজাল্ট দেখাতে পারে তা আমরা নিচের PHP Code টি run করলেই সহজে জানতে পারবো।

<?php
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
?>

Output:

Array
(
    [MIBDIRS] => C:/xampp/php/extras/mibs
    [MYSQL_HOME] => \xampp\mysql\bin
    [OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
    [PHP_PEAR_SYSCONF_DIR] => \xampp\php
    [PHPRC] => \xampp\php
    [TMP] => \xampp\tmp
    [HTTP_HOST] => localhost
    [HTTP_CONNECTION] => keep-alive
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    [HTTP_REFERER] => http://localhost/test/
    [HTTP_ACCEPT_ENCODING] => gzip, deflate, br
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_COOKIE] => _ga=GA1.1.1979695454.1505220465; Masud+Alam=14lq5krhu76cahbskoh7qvdsc7; PHPSESSID=47g9nbgtjbpata8258bd3jcfjv
    [PATH] => C:\Program Files\Java\jdk1.8.0_112\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\dotnet\;C:\xampp\php;C:\Program Files\PostgreSQL\9.6\bin;C:\Program Files\PuTTY\;C:\Program Files (x86)\Skype\Phone\;C:\Users\Masud Alam\AppData\Local\Microsoft\WindowsApps
    [SystemRoot] => C:\WINDOWS
    [COMSPEC] => C:\WINDOWS\system32\cmd.exe
    [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    [WINDIR] => C:\WINDOWS
    [SERVER_SIGNATURE] => 
Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/7.1.6 Server at localhost Port 80


    [SERVER_SOFTWARE] => Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/7.1.6
    [SERVER_NAME] => localhost
    [SERVER_ADDR] => ::1
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => ::1
    [DOCUMENT_ROOT] => C:/xampp/htdocs
    [REQUEST_SCHEME] => http
    [CONTEXT_PREFIX] => 
    [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
    [SERVER_ADMIN] => postmaster@localhost
    [SCRIPT_FILENAME] => C:/xampp/htdocs/test/server.php
    [REMOTE_PORT] => 55979
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /test/server.php
    [SCRIPT_NAME] => /test/server.php
    [PHP_SELF] => /test/server.php
    [REQUEST_TIME_FLOAT] => 1506841827.002
    [REQUEST_TIME] => 1506841827
)

Zend Certified PHP Engineering (ZCPE) Course

PHP তে কেন এবং কিভাবে আমি $_SERVER Superglobal Variable টি ব্যবহার করব?

PHP Super Global Variable

মূলত PHP ভিত্তিক সার্ভার এর headers, path, Server name, Server software, Server protocol, IP address এর মতো বিভিন্ন তথ্য জানার জন্য আমরা $_SERVER superglobals variable টি ব্যবহার করব। আর এর জন্য $_SERVER এর কিছু free defined array property আছে , যা দিয়ে আমরা খুব সহজে সার্ভার এর প্রয়োজনীয় তথ্য পেতে পারি। নিচের উদাহরণ থেকে দেখা যাক

<?php
echo $_SERVER['SERVER_NAME'];
?>

ব্যাখ্যা :উপরের PHP Script টি আপনার host এর নাম দেখাবে।

চলুন $_SERVER এর কিছু গুরুত্বপূর্ণ property নিয়ে আলোচনা করি :

‘PHP_SELF’:

PHP_SELF Property টি আপনার current script এর Document Root এর পরের file path দেখাবে। অর্থাৎ : আপনার PHP Script টির Path যদি http://localhost/test/self.php হয়। PHP_SELF আপনাকে test/self.php Path টুকু দেখাবে।

<?php
echo $_SERVER['PHP_SELF'];  //Output:test/self.php
?>

‘GATEWAY_INTERFACE’

Server এর CGI Version নম্বর দেখাবে।

<?php
echo $_SERVER['GATEWAY_INTERFACE'];  //Output:CGI/1.1
?>

‘SERVER_ADDR’

Script এর Host Server এর IP address রিটার্ন করবে।

<?php
echo $_SERVER['SERVER_ADDR'];  //Output: ::1
?>

‘SERVER_NAME’

Host Server এর নাম রিটার্ন করবে।

<?php
echo $_SERVER['SERVER_NAME'];  //Output: localhost
?>

‘SERVER_SOFTWARE’

Host Server এ যেসব সফটওয়্যার Install আছে সেগুলোর নাম এবং তাদের ভার্সন দেখাবে।

<?php
echo $_SERVER['SERVER_SOFTWARE'];  //Output: Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/7.1.6
?>

‘SERVER_PROTOCOL’

Host Server এ ব্যবহৃত protocol এর নাম এবং ভার্সন দেখাবে।

<?php
echo $_SERVER['SERVER_PROTOCOL'];  //Output: HTTP/1.1
?>

Zend Certified PHP Engineering (ZCPE) Course

‘REQUEST_METHOD’

Form এর কোন Method এ Server এ Request পাঠানো হয়েছে সেই Request Method এর নাম Return করবে। ‘REQUEST_METHOD’বোঝার জন্য আমরা নিম্নের দুইটি উদাহরণ দেখবো

প্রথমে নিম্নের Code দিয়ে request.php file টি তৈরী করুন :

<!DOCTYPE html>
<html>
<head>
	<title>Test Request</title>
</head>
<body>
<form method="post" action="server.php">
	<input type="submit" value="Submit" name="submit">
</form>
</body>
</html>

এখন Server এ একই ফোল্ডার এ নিম্নের Code দিয়ে server.php file টি তৈরী করুন :

<?php
echo $_SERVER['REQUEST_METHOD'];
?>

এখন request.php file টি submit করলে ফলাফল হিসাবে “POST” পাবেন।
কারণ আপনার FORM এর “method=post” দেওয়া আছে।

‘REQUEST_TIME’

Server এর Request time timestamp এ রিটার্ন করবে

<?php
echo $_SERVER['REQUEST_TIME'];  //Output: 1506866477
?>

‘QUERY_STRING’

Form এর get Method এ অথবা URL এর মাধ্যমে পাঠানো Data কে Query String হিসাবে Return করবে। ‘QUERY_STRING’বোঝার জন্য আমরা নিম্নের দুইটি উদাহরণ দেখবো

প্রথমে নিম্নের Code দিয়ে query_string.php file টি তৈরী করুন :

<!DOCTYPE html>
<html>
<head>
	<title>Test Query String</title>
</head>
<body>
<form method="get" action="server.php">
	Name:<input type="text" name="name" value="Masud Alam">&nbsp;&nbsp;Age:
	<input type="number" name="age" value="35">
	<input type="submit" value="Submit" name="submit">
</form>
</body>
</html>

এখন Server এ একই ফোল্ডার এ নিম্নের Code দিয়ে server.php file টি তৈরী করুন :

<?php
echo $_SERVER['QUERY_STRING'];
?>

এখন query_string.php file টি submit করলে ফলাফল হিসাবে
“name=Masud+Alam&age=35&submit=Submit” পাবেন।

Zend Certified PHP Engineering (ZCPE) Course

‘DOCUMENT_ROOT’

সার্ভার বা current script এর root ফোল্ডার এর path দেখাবে।

<?php
echo $_SERVER['DOCUMENT_ROOT'];  //Output: C:/xampp/htdocs 
//(depend on your server root address")
?>

‘HTTP_ACCEPT’

current script এ যেইসব header accept করে তা রিটার্ন করবে।

<?php
echo $_SERVER['HTTP_ACCEPT'];  
//Output: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

?>

‘HTTP_ACCEPT_ENCODING’

current script এ যেইসব encoding support করবে তা রিটার্ন করবে। যেমন :gzip, deflate, br ইত্যাদি।

<?php
echo $_SERVER['HTTP_ACCEPT_ENCODING'];  //Output: gzip, deflate, br
?>

‘HTTP_ACCEPT_LANGUAGE’

current script এ যেইসব Language support করবে তা রিটার্ন করবে। যেমন :en-US,en;q=0.8 ইত্যাদি।

<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];  //Output: en-US,en;q=0.8
?>

‘HTTP_CONNECTION’

সার্ভারের http Connection Status দেখাবে। যেমন : keep-alive

<?php
echo $_SERVER['HTTP_CONNECTION'];  //Output:keep-alive
?>

‘HTTP_HOST’

সার্ভারের Host নাম return করবে যেমন : localhost, www.example.com ইত্যাদি।

<?php
echo $_SERVER['HTTP_HOST'];  //Output:localhost
?>

‘HTTP_REFERER’

বর্তমান পেজের সম্পূর্ণ URL রিটার্ন করবে। যেমন :http://www.example.com/category/test.php

<?php
echo $_SERVER['HTTP_REFERER'];  //Output:localhost/test/request.php
?>

‘HTTP_USER_AGENT’

আপনার সার্ভারের User agent list অর্থাৎ আপনার Operating System এর নাম এবং ব্রাউজার গুলোর নাম দেখাবে। যেগুলো সার্ভারের জন্য User হিসাবে ব্যবহৃত হয়।

<?php
echo $_SERVER['HTTP_USER_AGENT'];  
//Output:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
?>

‘HTTPS’

আপনার সার্ভারে আসা Current URL টি secure HTTP protocol কিনা তা চেক করবে।

<?php
echo $_SERVER['HTTP_REFERER'];  //Output:on (if your url is https)
?>

‘REMOTE_ADDR’

ব্যবহারকারীর IP Address রিটার্ন করবে।

<?php
echo $_SERVER['REMOTE_ADDR'];  //Output:192.168.10.23 as like
?>

Zend Certified PHP Engineering (ZCPE) Course

‘REMOTE_HOST’

ব্যবহারকারীর কম্পিউটার নাম রিটার্ন করবে।

‘REMOTE_PORT’

ব্যবহারকারীর কম্পিউটার Port Number রিটার্ন করবে।

<?php
echo $_SERVER['REMOTE_PORT'];  //Output:59263 (sample)
?>

‘SCRIPT_FILENAME’

বর্তমান script এর সম্পূর্ণ Path রিটার্ন করবে। যেমন :C:/xampp/htdocs/test/test.php

<?php
echo $_SERVER['SCRIPT_FILENAME'];  //Output:C:/xampp/htdocs/test/test.php
?>

‘SERVER_ADMIN’

Web Server Configuration file এ দেওয়া Server Admin এর নাম রিটার্ন করবে।

<?php
echo $_SERVER['SERVER_ADMIN'];  //Output:postmaster@localhost
?>

‘SERVER_PORT’

Web Server এর Port Number রিটার্ন করবে।

<?php
echo $_SERVER['SERVER_PORT'];  //Output:80 (sample)
?>

‘SERVER_SIGNATURE’

সার্ভারের বিস্তারিত যেমন : Server ভার্সন, OpenSSL ভার্সন , PHP ভার্সন , Host এর নাম এবং Server Port number রিটার্ন করবে।

<?php
echo $_SERVER['SERVER_SIGNATURE'];  
//Output:Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/7.1.6 Server at localhost Port 80

‘SCRIPT_NAME’

চলতি script এর path রিটার্ন করবে।

<?php
echo $_SERVER['SCRIPT_NAME'];  //Output:/test/server.php (sample)
?>

‘REQUEST_URI’

চলতি Page এর URI রিটার্ন করবে।

<?php
echo $_SERVER['REQUEST_URI'];  //Output:/test/server.php?name=Masud+Alam&age=34&submit=Submit
?>

‘PHP_AUTH_DIGEST’

ক্লায়েন্ট থেকে আসা encrypted authorization header কে Variable এ Set করার জন্য ব্যবহৃত হয়।

‘PHP_AUTH_USER’ and ‘PHP_AUTH_PW’

HTTP authentication এর সময় এই দুটি superglobal Variable এর মাধ্যমে User প্রদত্ত username এবং password সেট করা যায়। নিচের উদাহরণ run করলেই আরো ভালোভাবে বুঝা যাবে।
Note:এখানে username=admin এবং password=123456 ব্যবহার করা হয়েছে।

<?php
$authenticate = false;
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
 $name = $_SERVER['PHP_AUTH_USER'];
 $pass = $_SERVER['PHP_AUTH_PW'];
 if ($name == 'admin' && $pass == '123456')
 {
  $authenticate = true;
 }
}
 
if ($authenticate==false)
{
 header('WWW-Authenticate: Basic realm="Restricted Page Enter Details To Continue"');
 header('HTTP/1.0 401 Unauthorized');
 echo "Authentication Failed Refresh To Do It Again";
} 

else
{
 ?>
 <html>
 <body>
 <h1>Simple HTTP Authentication Using PHP To Make Your Site More Secure</h1>
 <p>All Your Content Comes Here</p>
 </body>
 </html>
 <?php
}
?>

‘AUTH_TYPE’

HTTP authentication এর সময় authentication type set করার জন্য ব্যবহৃত হয়।

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

5 thoughts on “PHP Superglobals Variable পর্ব-৩: PHP $_SERVER Super Global

  1. I think this is among the such a lot important information for
    me. And i’m satisfied reading your article. But want to observation on few general things, The site style
    is perfect, the articles is in point of fact excellent : D.

    Just right task, cheers

  2. আমি অন্য কোম্পানি থেকে php শিখেছি। এখন আরো এডভান্স লেভের php শিখতে চাই।

Leave a Reply