PHP Superglobals Variable পর্ব-৩ (What is $_SERVER in PHP?)

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
)

PHP তে কেন এবং কিভাবে আমি $_SERVER Superglobal 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
?>

‘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="Sahab Uddin">  Age:
    <input type="number" name="age" value="25">
    <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=Sahab+Uddin&age=25&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 করার জন্য ব্যবহৃত হয়।