Posts

Showing posts from September, 2015

Session

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

প্রি-ডিফাইনড ভেরিয়েবল

PHP তে প্রচুর প্রি-ডিফাইনড ভেরিয়েবল আছে। অর্থাৎ আগে থেকেই অনেক ভেরিয়েবল ডিক্লেয়ার করা আছে যে গুলো আমরা আমাদের কোডের যে কোন জায়গায় ব্যবহার করতে পারি। কিছু কিছু ভেরিয়েবল বর্তমান সচল সার্ভারের ভার্শন এবং কনফিগারেশন এর উপর নির্ভরশীল থাকে। আর কিছু কিছু ভেরিয়েবল অকার্যকর থাকে, যখন কমান্ড মোড দিয়ে PHP রান করা হয়। প্রি-ডিফাইনড ভেরিয়েবল লিষ্টঃ $GLOBALS $_SERVER $_GET $_POST $_FILE $_REQUEST $_SESSION $_ENV $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_reponse_header $argc $argv

$_SERVER

$_SERVER হচ্ছে অ্যাসোসিয়েটিভ অ্যারে টাইপ সুপার গ্লোবাল ভেরিয়েবল। এটি বর্তমান রিকুয়েষ্টকৃত পেজ ও Environment এর বিভিন্ন ইনফরমেশন(যেমনঃ  header, path, script location ) ধারন করে। $_SERVER অ্যারে সার্ভার কর্তৃক তৈরী হয়। কিন্তু এর কোন নিশ্চয়তা নেই যে সব সার্ভারই $_SERVER অ্যারের নিম্নোক্ত সকল ইনরফরমেশন স্টোর করবে। PHP কোডের মধ্যে $_SERVER["Key"] আকারে ব্যবহার করা হয়। $_SERVER এর Key গুলো কেস-সেনসিটিভ। অর্থাৎ যেভাবে নিচে অ্যাক্সেস করা হয়েছে সেভাবেই অ্যাক্সেস করতে হবে। বানান ছোট হাতের বা ছোট ও বড় হাতের পরিবর্তন করে অ্যাক্সেস করতে গেলে Error শো করবে। $_SERVER অ্যারের যে সকল Key অ্যাক্সেস করে ইনফরমেশন Collect করা হয় সেগুলো নিচে দেওয়া হলঃ "PHP_SELF" এটি সার্ভারের হোষ্টের নাম বাদে বর্তমান এক্সিকিউটেড স্ক্রিপ্টের পাথ ফাইলের নাম সহ রিটার্ন করে। যেমনঃ <?php      echo $_SERVER["PHP_SELF"]; ?> যদি উপরোক্ত কোডটি  "http://www.the-learner.com/post/index.php"  অ্যাড্রেসের হয় তবে এটি  "/post/index.php"  রিটার্ন করবে। পুরো ফাইলের

$GLOBALS

আমরা আমাদের PHP কোডে যে সকল global ভেরিয়েবল ব্যবহার করি সেগুলোর প্রত্যেকটি এই $GLOBALS অ্যাসোসিয়েটিভ অ্যারের মধ্যে স্টোর হয়। পরবর্তীতে এই ভেরিয়েবল গুলো PHP কোডের যে কোন স্থানে ব্যবহার করা যায়। যেমনঃ 1. <?php 2.      $name = "The Learner"; 3.      function display(){ 4.           echo $GLOBALS["name"]; 5.      } 6.      display(); 7. ?> উপরোক্ত কোডে $name নামে একটি গ্লোবাল ভেরিয়েবল ডিক্লেয়ার করা হয়েছে। এটি গ্লোবাল ভেরিয়েবল এই কারণে, এটি কোন ফাংশন বা মেথডের ভেতর ডিক্লেয়ার করা হয়নি। এটি ফাংশনের বাইরে ডিক্লেয়ার করা হয়েছে। অন্যান্য অনেক ল্যাঙ্গুয়েজেই গ্লোবাল ভেরিয়েবল কোন ফাংশন বা মেথডের ভেতর শুধু ভেরিয়েবলের নাম দিয়ে কল(Call) করলেই চলে। কিন্তু PHP তে এভাবে কল করলে কাজ করে না। PHP তে যখন কোন ভেরিয়েবল গ্লোবাল হিসেবে ডিক্লেয়ার করা হয় তখন সেটি $GLOBALS অ্যাসোসিয়েটিভ অ্যারে তে স্টোর হয়। প্রত্যেকটি ভেরিয়েবলের নাম $GLOBALS অ্যারের এক একটা Key অনুযায়ী স্টোর হয়। এখানে $name হচ্ছে গ্লোবাল ভেরিয়েবল। $GLOBALS অ্যারেতে এটি $GLOBALS["name

assign by value এবং assign by reference

ডিফল্ট হিসেবে PHP তে ভেরিয়েবল ভ্যালু দ্বারা অ্যাসাইন হয়। যদি কোন ভেরিয়েবলে কোন এক্সপ্রেশন অ্যাসাইন করা হয় তবে এক্সপ্রেশনের ভ্যালু উক্ত ভেরিয়েবলে কপি হয়। 1. <?php 2.      $name = "The"; 3.      $name2 = $name; 4.      $name2 = "The Learner"; 5.      echo $name . "<br>"; 6.      echo $name2; 7. ?> আউটপুটঃ The The Learner কোড বিশ্লেষনঃ ১। PHP ট্যাগ শুরু করা হয়েছে। ২। $name  নামে ভেরিয়েবল ডিক্লেয়ার করে ভ্যালু হিসেবে  "The"  অ্যাসাইন করা হয়েছে। ৩। $name2  নামে ভেরিয়েবল ডিক্লেয়ার করা হয়েছে এবং ভ্যালু হিসেবে  $name  ভেরিয়েবল অ্যাসাইন করা হয়েছে। (এরফলে $name2 ভেরিয়েবলে $name ভেরিয়েবলের ভ্যালু কপি হবে।) ৪।  $name2  ভেরিয়েবলে পুনরায় নতুন ভ্যালু "The Learner" অ্যাসাইন করা হয়েছে। (এরফলে $name2 এর পূর্বের ভ্যালু রিপ্লেস হয়ে যাবে।) ৫। $name ভেরিয়েবলের ভ্যালু প্রিন্ট করা হয়েছে। ৬। $name2 ভেরিয়েবলের ভ্যালু প্রিন্ট করা হয়েছে। ৭। PHP ট্যাগ শেষ করা হয়েছে। এখানে  $name2  ভেরিয়েবলের ভ্যালু পরিবর্তন

ভেরিয়েবল ডিক্লারেশন

PHP তে ভেরিয়েবল ডিক্লেয়ার করার সময় ভেরিয়েবলের নামের আগে একটা ডলার সাইন( $ ) ব্যবহার করা হয়। <?php      $name = "The Learner"; ?> উপরোক্ত কোডে $name হচ্ছে একটি ভেরিয়েবল। আর "The Learner" হচ্ছে উক্ত ভেরিয়েবলের কন্টেন্ট বা ভ্যালু। PHP তে ভেরিয়েবল ডিক্লেয়ার করার সময় ডাটা টাইপ উল্লেখ করে দেওয়ার দরকার নেই। PHP স্বয়ংক্রিয়ভাবে ভেরিয়েবলের কন্টেক্সট(Context) অনুযায়ী ডাটা টাইপ সেট করে নেয়। ঠিক এ কারনেই PHP কে বলা হয় "Loosely Typed Language". ভেরিয়েবল ডিক্লেয়ার করার আগে টাইপ উল্লেখ না করাই হলো গুড প্র্যাকটিস। যদি উপরের কোডের কথা বিবেচনা করি তাহলে এখানে ভেরিয়েবলের কোন টাইপ উল্লেখ করে দেওয়া হয়নি। PHP অটোমেটিক্যালি ভেরিয়েবলের টাইপ সেট করে নিবে এক্ষেত্রে $name ভেরিয়েবলের টাইপ হিসেবে string সেট করবে। যেহেতু "The Learner" হচ্ছে স্ট্রিং। ভেরিয়েবল লেখার কিছু নির্দিষ্ট নিয়ম কানুন আছে। এই নিয়মের বাইরে ভেরিয়েবল ডিক্লেয়ার করলে সেটি কাজ করবে না। PHP ভেরিয়েবল লেখার নিয়মঃ ভেরিয়েবল অবশ্যই ডলার সাইন( $ ) দিয়ে শুরু করতে হবে। যেমনঃ $na

Comments

প্রোগ্রামিং ল্যাঙ্গুয়েজে কমেন্ট কোড বুঝতে সাহায্য করে। আমরা যখন অনেকদিন পর আমাদের কোড মডিফাই করতে যাব তখন কমেন্ট আমাদের মনে করিয়ে দিবে কোন কোডের কি কাজ এবং কেন ব্যবহার করা হয়েছিল। এ জন্য প্রোগ্রামে কমেন্ট লেখা জরুরী। কমেন্ট প্রোগ্রাম রান করার সময় এক্সিকিউট হয় না। PHP তে বিভিন্ন উপায়ে কমেন্ট লেখা যায়। যেমনঃ সিঙ্গেল লাইন কমেন্ট করার জন্য লাইনের শুরুতে ডাবল ফরওয়ার্ড স্ল্যাশ( // ) অথবা হ্যাশ( # ) ব্যবহার করা হয়। <?php     // This is comment     # This is also a comment ?> একের অধিক লাইন কমেন্ট করার জন্য লাইনের শুরুতে /* এবং শেষে */ ব্যবহার করা হয়। <?php      /* This is a multiple      line comment      */ ?> PHP নেস্টেড কমেন্ট সাপোর্ট করে না। <?php      /* This is multiple      line comment. /* Nested comment */      */ ?> উপরোক্ত কোড Error শো করবে কারন এখানে নেস্টেড কমেন্ট ব্যবহার করা হয়েছে যা PHP সাপোর্ট করে না।

Instruction Speration

বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজেই একটি ইন্সট্রাকশন বা স্টেটমেন্ট শেষ করার জন্য ইন্সট্রাকশন বা স্টেটমেন্টের শেষে সেমিকোলন (;) দিতে হয়। PHP তেও ঠিক একই রকম কোন স্টেটমেন্ট শেষ করার জন্য স্টেটমেন্টের শেষে সেমিকোলন দিতে হয়। প্রতিটা লাইন সেমিকোলন দিয়ে পৃথক করাকেই Instruction Separation বলে। PHP তে Closing ট্যাগ স্বয়ংক্রিয় ভাবে PHP কোডের সর্বশেষ লাইনের শেষে একটি সেমিকোলন যোগ করে নেয়। অর্থাৎ PHP কোডের শেষ লাইনে স্টেটমেন্ট শেষ করার জন্য অতিরিক্ত সেমিকোলন দেওয়ার দরকার নেই। এটি ঐচ্ছিক। উদাহরণঃ <?php      echo "The ";      echo "Learner" ?> উপরোক্ত কোডের একদম শেষ লাইনের শেষে সেমিকোলন ব্যবহার করা হয়নি। কিন্তু এর জন্য কোন Error শো করবে না, কারন  Closing ট্যাগ( ?> ) সর্বশেষ লাইনের শেষে অটোমেটিক সেমিকোলন যোগ করে নেয়। আমাদের আর দেওয়ার দরকার নেই। কিন্তু যখন  echo "The "; এই লাইনের শেষে সেমিকোলন না দেওয়া হবে তখন Error শো করবে। কারন, এটি উপরোক্ত PHP কোডের শেষের লাইন নয়।

PHP তে HTML Escape করা

Escape মানে হল অব্যাহতি। PHP তে Escaping HTML হল, PHP ফাইল এর ভেতর কিভাবে HTML কোড লেখা হয় সেই পদ্ধতি। PHP, Opening এবং Closing ট্যাগ এর বাইরের সব কিছুই Ignore করে। অর্থাৎ Opening এবং Closing ট্যাগ এর বাইরের কোন কিছুই সে পড়ে না। উদাহরনঃ <p>This paragraph will ignored by PHP but not browser.</p> <?php echo "This text will parsed by PHP." ?> <p>This paragraph will also ignored by PHP but not browser.</p> আউটপুটঃ This paragraph will ignored by PHP but not browser. This text will parsed by PHP. This paragraph will also ignored by PHP but not browser. উপরোক্ত কোডে PHP শুধু <?php  এবং ?>  এর ভেতরের কোডটুকুই পড়বে এবং আউটপুট দিবে। আর <?php  এবং ?>  এর বাইরের কোড সাধারন অবস্থায় ব্রাউজার, HTML কোড যেভাবে Render করে সে ভাবেই Render করবে। PHP Interpreter(অনুবাদক, দোভাষী) Closing ট্যাগ ( ?> ) পেলেই আউটপুট প্রদান করা শুরু করে যতক্ষণ না পর্যন্ত পুনরায় Opening ট্যাগ ( <?php ) খোঁজে পায়। কিন্তু কোডের মধ্যে যদি কন্ডিশনাল স্টেটম

অ্যানোনিমাস ফাংশন

অ্যানোনিমাস ফাংশন হচ্ছে নামবিহীন ফাংশন। অর্থাৎ যে ফাংশন এর কোন নাম নেই সেটাই হচ্ছে অ্যানোনিমাস ফাংশন। উদাহরণঃ function display($string){      echo $string(); } display(      function(){           return "I'm a anonymous function";      } ); আউটপুটঃ  I'm a anonymous function হলুদ রঙ দ্বারা আবদ্ধ ফাংশনটিই হচ্ছে অ্যানোনিমাস ফাংশন। অ্যানোনিমাস ফাংশন সাধারন ফাংশন এর মত কল করা যায় না। অ্যানোনিমাস ফাংশন কোন ভেরিয়েবল এ রেখে কল করতে হয় অথবা অন্য কোন ফাংশনের কল ব্যাক (Callback) হিসেবে ব্যবহার করা হয়।  অ্যানোনিমাস ফাংশনের ভেতরে বাহিরের কোন ভ্যারিয়েবল অ্যাক্সেস করতে হলে  use ক্লজ ব্যবহার করতে হয়। উদাহরণঃ $str = "Learner"; function display($string){      echo $string(); } display(      function()   use   ($str){           return $str;      } ); আউটপুটঃ Learner অ্যানোনিমাস ফাংশনের ভেতরে বাহিরের কোন ভেরিয়েবল অ্যাক্সেস করে যদি কোন পরিবর্তন করা হয় তবে মূল ভেরিয়েবলের কোন পরিবর্তন হয় না। বাহিরের ভেরিয়েবল পরিবর্তন করার জন্য ভেরিয়েবল এর নামের আগে অ্যাম

PHP Tags

 <?php   ?>  হলুদ রঙ করা হাবিজাবি জিনিস গুলোকেই বলা হয় PHP ট্যাগ।  <?php  এটি কে বলে Opening ট্যাগ এবং  ?>   এটিকে বলে Closing ট্যাগ। ট্যাগ লেখার সময় Opening ট্যাগ এর পরে একটি Space(ফাঁকা স্থান) দিতে হয়, অন্যথায় এটি কাজ করে না। উদাহরনঃ <?php echo "The Learner"; ?> আউটপুটঃ The Learner যখন PHP Parser(যে জিনিস খুব যত্ন সহকারে PHP ফাইলের প্রতিটা অক্ষর পুঙ্খানুপুঙ্খভাবে পড়ে এবং বিশ্লেষণ করে) কোন ফাইল Parse করে তখন এটি খোঁজ করে দেখে যে ফাইলের মধ্যে কোথায় কোথায় Opening ট্যাগ এবং Closing আছে। PHP Parser যেখানে Opening ট্যাগ পায় যেখান থেকেই পড়া শুরু করে পরবর্তী Closing ট্যাগ না পাওয়া পর্যন্ত। একটা PHP ফাইলে এক বা একাধিক Opening ট্যাগ, Closing ট্যাগ থাকতে পারে। PHP Parser যেখানে Opening ট্যাগ পায় সেখানে থেকে পড়া শুরু করে এবং যেখানে Closing ট্যাগ পায় সেখানে পড়া শেষ করে। পরবর্তীতে ঐ একই ফাইলের যেখানে আবার Opening ট্যাগ পায় সেখানে থেকে পড়া শুরু করে এবং যেখানে Closing ট্যাগ পায় সেখানে পড়া শেষ করে। এভাবেই ফাইলের শেষ পর্যন্ত চলতে থাকে। Opening এবং Closing ট্যাগে

$(document).ready() ও window.onload এর মধ্যে পার্থক্য কি?

$(document).ready() হচ্ছে একটি জে-কুয়েরী ফাংশন বা মেথড। এটি তখনই কাজ করে যখন HTML ডকুমেন্ট ব্রাউজারে সম্পূর্ণরূপে লোড হয় এবং ডম ( DOM ) রেডি হয়। window.load হচ্ছে জাভাক্রিপ্ট এর বিল্টইন মেথড। এটি কাজ করার জন্য HTML কন্টেন্ট ও ইমেজ সম্পূর্ণরূপে লোড হতে হয়। অর্থাৎ ওয়েবপেজ এর সকল কন্টেন্ট লোড না হওয়া পর্যন্ত এটি কাজ করবে না। নিচের কোড লক্ষ্য করিঃ window.onload = function(){      alert("onload event fired!"); }; উপরোক্ত কোডটি কেবল তখনই কাজ করবে যখন আমাদের ওয়েবপেজ এর সকল/সমস্ত কন্টেন্ট (ছবি, ফ্ল্যাশ, ভিডিও ইত্যাদি) লোড হবে। কিন্তু আমরা যদি ছবি, ভিডিও, ফ্ল্যাশ ইত্যাদি কন্টেন্ট এর জন অপেক্ষা করতে না চাই অর্থাৎ HTML DOM রেডি হওয়ার সাথে সাথে কাজ করতে চাই তাহলে $(document).ready() ইউজ করতে হবে। যেমনঃ $(document).ready(function(){      alert("Document ready event fired!"); });

DOCTYPE কেন ইউজ করা হয়?

<!DOCTYPE> ব্রাউজার কে বলে দেয় আমরা HTML এর কোন ভার্শন এর কোড লিখছি। HTML এর বিভিন্ন ভার্শন আছে যেমন HTML 4, HTML 5 ইত্যাদি। <!DOCTYPE> ডিক্লেয়ার করে আমরা ব্রাউজার কে বলি যে, আমাদের HTML কোড হচ্ছে অমুক ভার্শনের। HTML এর কোড ঠিকঠাক মত কাজ করার জন্য <!DOCTYPE> ডিক্লেয়ার করা জরুরী। <!DOCTYPE> ডিক্লেয়ার করার আরেকটি গুরুত্বপূর্ণ কারণ হলো, আমরা যদি আমাদের HTML কোড (সিনট্যাক্স) কোন সফটয়্যার/টুলস (যেমন  মার্কআপ ভ্যালিডেটর ) দ্বারা ভ্যালিডেট করতে চাই তাহলে অবশ্যই আমাদের HTML ডকুমেন্টে <!DOCTYPE> ডিক্লেয়ার করতে হবে। অন্যথায় এই সকল সফটওয়্যার/টুলস HTML ডকুমেন্ট ভ্যালিডেট করতে পারবে না। যদি <!DOCTYPE> ডিক্লেয়ার করা না হয় তবে HTML এর কোড অনেক ব্রাউজার (যেমন  ইন্টারনেট এক্সপ্লোরার ) এ ঠিকঠাক মত কাজ নাও করতে পারে। ওয়েবসাইট ভেঙ্গে যেতে পারে অথবা আমাদের প্রত্যাশা অনুযায়ী আউটপুট নাও পেতে পারি।