Super Global variable Tutorials | SP Foundationbd

Php তে বিশেষ ধরনের কিছু অ্যারে variable আছে যাদের নাম superglobal variable এই variable গুলি স্ক্রিপ্টের যেকোন জায়গায় যেকোন স্কোপে ব্যবহার করা যেতে পারে। কোন ফাইল include কিংবা অতিরিক্ত কিছুই করতে হবেনা। এর আগের টিউটোরিয়ালগুলিতে বিভিন্নভাবে এগুলির আলোচনা করা হয়েছে এবং নিচে সেগুলির link দেয়া হল। superglobal  variable র তালিকা

$GLOBALS

$_SERVER

$_GET

$_POST

$_FILES

$_COOKIE

$_SESSION

$_REQUEST$_ENV

এই টিউটোরিয়ালে মূলত $_SERVER এবং $_ENV নিয়ে কারন অন্যান্য গুলি নিয়ে ইতোমধ্যে tutorials আছে।

$_SERVER এটা একটা অ্যারে এবং এখানে সার্ভার সংক্রান্ত প্রচুর তথ্য থাকে।  সার্ভারের কোন রিসোর্সের path যেমন স্ক্রিপ্টের path, script টি যে সার্ভারে আছে সেটার আইপি এড্রেস, যে ইউজার স্ক্রিপ্টটি দেখছে তার IP address ইত্যাদি তথ্য। প্রতিটি তথ্য অ্যারের ইনডেক্স হিসেবে থাকে এবং একসেস করার সময় $_SERVER['index_name'] এভাবে ব্যবহার করতে হয়। নিচে কিছু গুরত্বপূর্ন ইনডেক্স নিয়ে আলোচনা করা হল

HTTP_HOST :  যে স্ক্রিপ্টে এটা থাকবে সেই স্ক্রিপ্টটি কোন ডোমেইনে তথা host নাম বের করতে পারে। যেমন local সার্ভারে রুটে test.php তে নিচের কোড দিন এবং run করান

<?php

echo $_SERVER['HTTP_HOST'];

?>

output

localhost

যদি কোন ডোমেইনে এটা করতাম সেটার নাম দেখাত। আমি লোকালি করেছি তাই localhost দেখাচ্ছে।

SERVER_SOFTWARE : যে স্ক্রিপ্টে থাকবে সেটা কোন সার্ভারে আছে সেই সার্ভারের software নিয়ে সব তথ্য দিবে। যেমন test.php তে এটা লিখে run করান

<?php

echo $_SERVER['SERVER_SOFTWARE'];

?>

Output        Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8

REMOTE_ADDR : যে স্ক্রিপ্টে থাকবে সেই স্ক্রিপ্টটি যেখানে আছে সেটার আইপি। যেমন লোকালি test.php তে এটা লিখে রান করান তাহলে আপনার লোকালহোস্টের আইপি এড্রেস দেখাবে।

<?php

echo $_SERVER['REMOTE_ADDR'];

?>

Output   ::1

লোকালি এই IP দেখায়। কোন ডোমেইনে লাইভ সার্ভারে এটা রেখে রান করান সেই ডোমেইনের আইপি দেখাবে। 

 DOCUMENT_ROOT : যে স্ক্রিপ্টে থাকবে সেই স্ক্রিপ্টটি কোথায় আছে সেটার ঠিকানা। যেমন লোকালি test.php তে এটা লিখে রান করান তাহলে এই test.php কোথায় আছে সেটা দেখাবে।

<?php

echo $_SERVER['DOCUMENT_ROOT'];

?>

আউটপুট          C:/xampp/htdocs

অর্থ্যাৎ C ড্রাইভের xampp ডিরেক্টরির htdocs ফোল্ডারে test.php আছে।

REQUEST_URI : যে স্ক্রিপ্টে থাকবে সেই স্ক্রিপ্টটি রান করাতে যে URL ব্যবহার হয়েছে সেটা দেখাবে। যেমন test.php লিখে রান করালে

<?php

echo $_SERVER['REQUEST_URI'];

?>

output         /test.php

এই index গুলি সার্ভারে তৈরী হয়। আপনার সার্ভার কি কি তথ্য সব মিলিয়ে দিচ্ছে সেটা যদি দেখতে চান তাহলে 

<?php

echo '<pre>';

print_r($_SERVER);

?>

আউটপুট দেখুন সব index এবং এর ভিতরে কি আছে সব দেখাবে।

$_ENV : এটাও একটি সুপারগ্লোবাল variable। এখানে আপনার সিস্টেমের operation system এবং এ সংক্রান্ত সব তথ্য পাওয়া যায়।  এটা by default নিস্ক্রিয় করা থাকে। তাই এটার তথ্য print দিতে চাইলে empty দেখাবে। এটা সক্রিয় করতে php.ini ফাইল ব্যবহার করতে হবে। php.ini ফাইলে variables_order খুজে বের করুন এবং এর মান দিন "EGPCS" এরপর নিচের code run করালে $_SERVER এর মত $_ENV এরও সব তথ্য দেখতে পাবেন।

<?php

echo '<pre>';

print_r($_ENV);

?>

Variable Variable

Php তে ডাইনামিকালি ভেরিয়েবলের নাম সেট করা যায়। একটা ভেরিয়েবলের মান আরেকটা ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যায়। এটাই হচ্ছে php তে variable । দুটি ডলার সাইন দিয়ে এটা লেখা হয় যেমন $$x.

 

উদাহরন

<?php

$x = spfoundationbd;

$ spfoundationbd = 'Great Site';

echo $$x;

?>

 

output   Great Site

ব্যাখ্যা: প্রথমে $x = spfoundationbd; নিয়েছি এরপর একটা নতুন ভেরিয়েবল নিয়েছি নাম $ spfoundationbd এবং এর মান ইচ্ছেমত একটা দিয়ে দিলাম। এবার $$x এর অর্থ হল $ spfoundationbd তাই echo $$x এর আসল রুপান্তরিত কোড হল echo $ spfoundationbd. আর যেহেতু $ spfoundationbd এর মান আগে সেট করেছি "Great Site" তাই output এটাই এসেছে।

অনেক সময় এটাকে পরিষ্কার করে লেখার জন্য দ্বিতীয় বন্ধনী (curly braces) ব্যবহার করা হয়। তবে এটা ছাড়াও কাজ হবে। যেমন উপরের code টিই আমি ইচ্ছে করলে নিচের মত লিখতে পারি। output একই আসবে।

<?php

$x = spfoundationbd;

$ spfoundationbd = 'Great Site';

echo ${$x};

?>

output     Great Site

সুতরাং $$x আর ${$x} একই জিনিস।

কখন ব্যবহার করা হয়

এটা ব্যবহার করা উচিৎ নয়। একদম প্রয়োজন ছাড়া ব্যবহার না করাই ভাল। নিরাপত্তা ইস্যু আছে। নিচে একটা উদাহরন দিচ্ছি যেখানে  variable variable ব্যবহার হয়েছে।

<?php

$js = "assets/js/site.js";

$js1 = "assets/js/js1.js";

$js2 = "assets/js/comet.js";

$assets_array = array('js','js1','js2');

foreach($assets_array as $link){

echo '<script src="'.$$link.'" type="text/javascript"></script>';

}

?>

সাধারনত টেমপ্লেটিং ইত্যাদির ক্ষেত্রে এভাবে ডাইনামিকালি loadin এর জন্য এটা ব্যবহার হয়। এছাড়াও আরও কিছু ক্ষেত্র আছে।

php ম্যানুয়ালে আরেকটা উদাহরন আছে। এটা দেখলে আরও পরিষ্কার হবে। কোন ব্যাখ্যা লাগবেনা শুধু কোডটা দেখেন তাহলেই হবে।

<?php

$Bar = "a";

$Foo = "Bar";

$World = "Foo";

$Hello = "World";

$a = "Hello";

echo $a.'<br/>'; //Returns Hello

echo $$a.'<br/>'; //Returns World

echo $$$a.'<br/>'; //Returns Foo

echo $$$$a.'<br/>'; //Returns Bar

echo $$$$$a.'<br/>'; //Returns a

echo $$$$$$a.'<br/>'; //Returns Hello

echo $$$$$$$a; //Returns World

?>