বিকিরণ উৎপাদনক্ষম যন্ত্র (যেমন: Radiography Unit, Mobile X-ray Unit, X-ray, CT Machine, C-arm, Mammography Unit, Angiogram Unit, Dental X-ray, OPG Unit, Bone Densitometry ইত্যাদি) এর লাইসের জন্য (‘গ’-শ্রেণির) আবেদন ফরম ৫০/- (পঞ্চাশ) টাকার বিনিময়ে বাংলাদেশ পরমাণু শক্তি নিয়ন্ত্রণ কর্তৃপক্ষ (বাপশনিক) এর নীচ তলার বিকিরণ, পরিবহন ও বর্জ্য নিরাপত্তা বিভাগ (কক্ষ নং-১০৩) হতে সংগ্রহ করতে হবে।
আবেদনপত্র ফরম যথাযথভাবে পূরণ করতে হবে। প্রয়োজনে অত্র কর্তৃপক্ষের বিকিরণ, পরিবহন ও বর্জ্য নিরাপত্তা বিভাগের সহযোগিতা নেওয়া যেতে পারে।
পূরণকৃত আবেদন ফরমে আবেদনকারীর/লাইসেন্সধারীর পূর্ণ নাম (বাংলায় এবং ইংরেজীতে), পদবী স্বাক্ষর ও সীলসহ তারিখ অবশ্যই থাকতে হবে।
“বাপশনিক রেগুলেটরী ফি” অথবা ‘BAERA Regulatory Fee’ এই শিরোনামে পানিবিনি বিধিমালা-৯৭ এর তফসীল-৬ অনুষাযী প্রতিটি মেডিকেল ডায়াগনস্টিক এক্স-রে মেশিনের জন্য ফি (১৫% ভ্যাটসহ) (১৫,০০০/-+২,২৫০/) -১৭,২৫০/-সেতের হাজার দুইশত পঞ্চাশ) টাকা যে কোন ব্যাংকের পে-র্ভার/ব্যাংক ড্রাফট এর মাধ্যমে পূরণকৃত ফরমের সাথে জমা দিতে হবে। উল্লেখ্য যে, ব্যাংকের পে-অর্ডার/ব্যাংক ড্রাফট ছাড়া কোন নগদ টাকা গ্রহণ করা হয় না।
পূরণকৃত আবেদন ফরমের সাথে নিম্নলিখিত কাগজপত্র অবশ্যই দাখিল করতে হবে:
লাইসেন প্রাপ্তির নিমিত্তে চেয়ারম্যান, বাংলাদেশ পরমাণু শক্তি নিয়ন্ত্রণ কর্তৃপক্ষ, ই-১২/এ, আগারগাঁও শেরে বাংলা নগর, ডাক্স বক্স নং-২৪০, ঢাকা-১২০৭। বরাবর লিখিত একটি আবেদনপত্র;
প্রদানকৃত ফি এর উপর ১৫% হারে ভ্যাট বাবদ অতিরিক্ত টাকা প্রদান করতে হবে।
ফি এবং ভ্যাট বাবদ প্রদত্ত সমস্ত টাকা একত্রে যে কোন ব্যাংক থেকে “বাপশনিক রেগুলেটরি ফি” অথবা ‘BAERA Regulatory Fee’ শিরোনামে পে-অর্ডার/ডি ডি এর মাধ্যমে প্রদান করতে হবে।
যথাযথভাবে পূরণকৃত আবেদন ফরম [বি. দ্রঃ (১) আবেদন ফরমে লাইসেন্সধারী ও RCO এর নাম এবং প্রতিষ্ঠানের নাম ও ঠিকানা অবশ্যই বাংলায় ও ইংরেজিতে পূরণ করতে হবে। (২) আবেদন ফরমের ১০ নং ক্রমিকের টেবিল এ মেশিনের মডেল, কিলোভোন্ট (Kv), মিলি অ্যাম্পিয়ার (mA), নিয়ন্ত্রণ প্যানেল ও টিউব হেডের সিরিয়াল নং অবশ্যই যথাযথভাবে উল্লেখ করতে হবে|]
যথাযথভাবে পুরণকৃত বিকিরণ নিয়ন্ত্রণ কর্মকর্তার আবেদন পত্র যা অফিস থেকে সরবরাহ করা হয়েছে;
বিকিরণ নিয়ন্ত্রণ কর্মকর্তার সর্বশেষ শিক্ষাগত যোগ্যতার সনদের সত্যায়িত কপি;
বিকিরণ কর্মীদের ব্যক্তি পরীবিক্ষণের জন্য স্বাস্থ্য পদার্থ বিজ্ঞান বিভাগ, পরমাণু শক্তি কেন্দ্র, ৪ কাজী নজরুল ইসলাম এ্যাভিনিউ, পোঃ বক্স নং-১৬৪, রমনা, ঢাকা-১০০০ (ফোনঃ ৮৬২১৩২১, ৯৬৭৫০১১, ফ্যাক্স ৮৬১৩০৫১) হতে টিএলডি ব্যাজ প্রাপ্তির প্রমাণপত্র অথবা প্রাপ্তির নিমিত্তে আবেদনপত্রের সত্যায়িত কপি।
ব্যবসা পরিচালনার জন্য সরকার কর্তৃক অনুমোদিত বৈধ ট্রেড লাইসেন্সের ফটোকপি প্রদান করতে হবে।
এক্স-রে রুমের নকশা প্রদান করতে হবে।
অনুঃ-৪-এ বর্ণিত লাইসেন্স ফি প্রদানের প্রমাণপত্র পে-অর্ডার/ব্যাংক ড্রাফট এর মূল কপি।
প্রয়োজনীয় কাগজপত্রের অভাব, অসম্পূর্ণ আবেদনপত্র অথবা লাইসেন্স ফি প্রদানের প্রমাণ (অর্ডার/ব্যাংক ড্রাফট) এর মধ্যে কোন সমস্যা থাকলে লাইসেন্স প্রদানের প্রক্রিয়া বিলম্বিত হতে পারে।
পরিপূর্ণ তথ্য অত্র কর্তৃপক্ষে পৌছানোর তারিখ দরখাস্ত গ্রহণের তারিখ হিসাবে গন্য হবে।
আবেদনপত্র গ্রহণ করার পর প্রয়োজনীয় ক্ষেত্রে পরিদর্শন সাপেক্ষে লাইসেন্স প্রদান করা হবে।
COVID-19 মহামারীর কথা বিবেচনা করে Virtual Inspection সম্পন্ন করার জন্য একটি বিশ্বস্ত Email ঠিকানা এবং Phone Number আবেদনের সাথে সংযুক্ত করতে হবে।
Virtual Inspection এর তথ্য সংযুক্ত চাহিদা অনুযায়ী প্রেরণ করতে হবে।
পরিপূর্ণ ঠিকানা সম্বলিত অগ্রায়নপত্র ছাড়া কোন তথ্য গ্রহণ করা হবে না।
উপরোক্ত বিষয়ে আরো অতিরিক্ত তথ্য/ব্যাখ্যার প্রয়োজন হলে উল্লেখিত ঠিকানায় যোগাযোগ করা যেতে পারে এবং পরিপূর্ণ ঠিকানা সম্বলিত অগ্রায়ণপত্র ছাড়া কোন আবেদনপত্র গ্রহণ করা হবে না।
বাংলাদেশ পরমাণু শক্তি নিয়ন্ত্রণ কর্তৃপক্ষ, ই-১২/এ, আগারগাও, শেরে বাংলা নগর, ডাক বাক্স নং-২৪০, ঢাকা-১২০৭।, Email: info@baera.gov.bd, Website: www.baera.gov.bd
এক কম্পিউটার থেকে অন্য কম্পিউটারে ফাইল আদান-প্রদান বর্তমান সময়ে খুবই সাধারণ ও প্রয়োজনীয় একটি বিষয় হয়ে দাঁড়িয়েছে। আমাদের কোন সহকর্মী বা বন্ধুর সাথে কোন ফাইল শেয়ার করা- ইন্টারনেটের এই যুগে, এটি কোন বিষয়ই না। সামান্য একটু সময়ের কাজ মাত্র। ফাইল আদান প্রদানের ক্ষেত্রে এফটিপি একটি খুবই সাধারণ বিষয়। নির্দিষ্ট কোন ডিরেক্টরীর ফাইলগুলো তালিকা করে এগুলো অন্য কোন কম্পিউটারে আপলোড বা কোথাও থেকে ডাউনলোড করার সুবিধা এফটিপি সফটওয়্যার দিয়ে থাকে। এফটিপি সফটওয়্যারটি ক্লায়েন্ট ও সার্ভার দুইজনের মধ্যে কাজ করে। সহজাতভাবেই এফটিপি ফাইল আদান প্রদান করার অনিরাপদ একটি মাধ্যম। এফটিপি ব্যবহার করার সময় ইউজার নেম, পাসওয়ার্ড ও ফাইল একটি নেটওয়ার্কের ভিতর দিয়ে অতিক্রম করে কোন প্রকার এনস্ক্রিপশন ছাড়াই। এর মানে এই যে, নেটওয়ার্ক সম্পর্কে যথেষ্ট জ্ঞান রাখে এমন কেউ যদি আপনার নেটওয়ার্কে প্রবেশ করতে পারে তাহলে সহজেই ইউজার নেম বা পাসওয়ার্ড হাতিয়ে নিতে পারে। তাই ফাইল আদান প্রদানের জন্য আরো অধিক নিরাপদ পদ্ধতিও আছে। যেমন SCP অথবা SFTP (SSH File Transfer Protocol) কমান্ড। তবে এখনো বেশিরভাগ ক্ষেত্রে এফটিপিই ব্যবহৃত হচ্ছে, বিশেষ করে হোস্টিং সরবরাহকারীদের কাছে।
সহজভাবে বলতে গেলে, আমাদের তৈরি করা ওয়েব পেজগুলো ইন্টারনেটে উন্মুক্ত করার জন্য কোন একটি সার্ভারে রাখতে হয়। একে আমরা হোস্টিং বলে থাকি। আমাদের তৈরি করা সেইসব স্ক্রিপ্ট বা পিএইচপি বা অন্যান্য ফাইলগুলো একটি এফটিপি সফটওয়্যারের মাধ্যমে সার্ভারে আপলোড করতে হবে।
এফটিপি সার্ভারে লগইন
আপনার কম্পিউটার থেকে এফটিপি সার্ভারে কানেক্ট করতে ftp_connect ফাংশন ব্যবহার করতে হবে। যেমন-
$connect = ftp_connect(“janet.valade.com”);
আইপিও ব্যবহার করা যাবে-
$connect = ftp_connect(“172.17.204.2”);
সার্ভারে কানেক্টেড হওয়ার পর আপনার লগইন করতে হবে। ftp_login ফাংশনের মাধ্যমে সার্ভারে লগইন করতে হবে। নিচের স্টেটমেন্টে লগইন ফাংশন দেখানো হলো-
সার্ভারে কানেক্ট না করেই লগইন করতে গেলে পিএইচপি নিচের মতো এরর মেসেজ দেখাতে পারে-
Warning: ftp_login() expects parameter 1 to be resource, boolean given in d:\test1\test13.php on line 9
শুধু সতর্কবার্তা দিয়েই স্ক্রিপ্ট থেমে থাকে না। সফলভাবে লগইন না করা পর্যন্ত এটি এক্সিকিউট হতেই থাকে। তাই কানেকশনটি ব্যর্থ হলে একে বন্ধ করে দেয়া হয় এভাবে-
$connect = ftp_connect(“janet.valade.com”)
or die(“Can’t connect to server”);
$login_result = ftp_login($connect,$userid,$passwd)
or die(“Can’t login to server”);
ডিরেক্টরীর ফাইলের তালিকা তৈরি
এই কাজটি সচরাচরই করতে হয়। ftp_nlist স্টেটমেন্ট দূরবর্তী কম্পিউটারের ডিরেক্টরীর ফাইলের তালিকা তৈরি করে একটি এ্যারেতে সংরক্ষণ করে। স্টেটমেন্টটি নিম্নরূপ-
$filesArr = ftp_nlist($connect,”data”);
ফাংশনটির দ্বিতীয় প্যারামিটারটিতে ডিরেক্টরীর নাম দেয়া হয়। কোন কারণে ডিরেক্টরীর নাম জানা না থাকলে তা জানানোর জন্য এফটিপি সার্ভারকে অনুরোধ করা যায়। যেমন-
newfile.txt হলো ডাউনলোড হওয়ার ফাইলটির নাম, data.txt হলো যে ফাইলটি আপনি সার্ভার থেকে ডাউনলোড করতে চান। আর FTP_ASCII এফটিপিকে বলে দেয় কোন ধরণের ফাইল ডাউনলোড হবে। টেক্সট ফাইলের ক্ষেত্রে FTP_ASCII এবং বাইনারী ফাইলের ক্ষেত্রে FTP_BINARY ফাইল মুড ব্যবহার করা হয়। যেমন গ্রাফিক ফাইল হলো বাইনারী ফাইল।
অনুরূপভাবে, ftp_put ফাংশনের মাধ্যমে ফাইল আপলোড করা হয়। নিচের স্টেটমেন্টটি দেখুন-
newfile.txtহলো ফাইলটি রিমোট কম্পিউটারের আপলোড হওয়ার পর যে নামে সংরক্ষিত হবে আর data.txtহলো যে ফাইলটি আপনার কম্পিউটার থেকে রিমোট কম্পিউটারে আপলোড হবে সেই ফাইলের নাম।
ফাইল আদান প্রদান শেষ করে এফটিপির কানেকশনটি বন্ধ করতে হবে। এজন্য আমরা নিচের স্টেটমেন্টটি ব্যবহার করতে পারি-
ftp_close($connect);
এখানে এফটিপি সংযোগের মাধ্যমে ফাইল ডাউনলোড করার একটি পুরো স্ক্রিপ্ট দেয়া হলো-
<?php
/* Script name: downloadFiles
* Description: Downloads all the files with a .txt
* extension in a directory via FTP.
*/
include(“ftpstuff.inc”);
$dir_name = “data/”;
$connect = ftp_connect($servername)
or die(“Can’t connect to FTP server”);
$login_result = ftp_login($connect,$userID,$passwd)
or die(“Can’t log in”);
$filesArr = ftp_nlist($connect,$dir_name);
foreach($filesArr as $value)
{
if(preg_match(“#\.txt$#”,$value))
{
if(!file_exists($value))
{
ftp_get($connect,$value,$dir_name.$value,FTP_ASCII);
}
else
{
echo “File $value already exists!\n”;
}
}
}
ftp_close($connect);
?>
স্ক্রিপ্টটি ডিরেক্টরীর ফাইলগুলোর একটি তালিকা তৈরি করে $filesArr তে সংরক্ষণ করে। foreach লুপটি $filesArr এ্যারেতে রাখা তালিকায় দেখে কোন কোন ফাইলে .txt এক্সটেনশন আছে। .txt এক্সটেনশনের ফাইল পেলে স্ক্রিপ্ট দেখে লোকাল কম্পিউটারটিতে একই নামে আর কোন ফাইল আছে কিনা। না থাকলে ফাইলটি ডাউনলোড হবে আর থাকলে একটি বার্তা দেখাবে ।
স্ক্রিপ্টে ftpstuff.inc নামে একটি ফাইল ইনক্লুড করা হয়েছে। এই ফাইলটিতে এফটিপির মাধ্যমে সার্ভারে সংযোগ নেয়ার সব তথ্য রাখা আছে। ফাইলটিতে নিচের কোডগুলো লেখা আছে-
উপরের যে সব এফটিপি ফাংশন সম্বন্ধে আলোচনা করা হয়েছে এগুলো ছাড়াও আরো অনেক প্রয়োজনীয় ফাংশন রয়েছে। নিচে এরকম কিছু ফাংশন তুলে ধরা হলো-
ফাংশন
কিকাজকরে
ftp_cdup($connect)
সরাসরি বর্তমান ডিরেক্টরির উপরে ডিরেক্টরি পরিবর্তন করে।
ftp_chdir($connect, ”directoryname”)
দূরবর্তী কম্পিউটারে ডিরেক্টরি পরিবর্তন করে।
ftp_close($connect)
একটি এফটিপি সংযোগ বন্ধ করে।
ftp_connect(“servername”)
কম্পিউটার থেকে সংযোগ স্থাপন করে। servername একটি ডোমেন নাম অথবা একটি আইপি ঠিকানা হতে পারে।
ftp_delete($connect,”path/filename”)
দূরবর্তী কম্পিউটারের ফাইলকে ডিলিট করে।
ftp_exec($connect,”command”)
দূরবর্তী কম্পিউটারে একটি সিস্টেম কমান্ড এক্সিকিউট করে।
ftp_fget($connect,$fh,”data.txt”, FTP_ASCII)
একটি খোলা ফাইলে দূরবর্তী কম্পিউটার থেকে ফাইলের বিষয়বস্তু ডাউনলোড করা হয়।
ftp_fput($connect,”new.txt”,$fh,FTP_ASCII)
দূরবর্তী কম্পিউটারে একটি ফাইল আপলোড করে।
ftp_get($connect,”d.txt”,”sr.txt”,FTP_ASCII)
দূরবর্তী কম্পিউটার থেকে ফাইল ডাউনলোড করে। sr.txt নামের ফাইলটি ডাউনলোড করা হয় এবং d.txt হলো ডাউনলোড করা ফাইলের নাম।
ftp_login($connect,$userID,$password)
এফটিপি সার্ভারে লগইন করে।
ftp_mdtm($connect,”filename.txt”)
ফাইলটি সর্বশেষ কবে মডিফাই করা হয়েছিল সেই সময়টি বের করে।
ftp_mkdir($connect,”directoryname”)
দূরবর্তী কম্পিউটারে একটি নতুন ডিরেক্টরী তৈরি করে।
ftp_nlist($connect,”directoryname”)
দূরবর্তী কম্পিউটারের নির্দিষ্ট ডিরেক্টরীর ফাইলের তালিকা তৈরি করে।
ftp_put($connect,”d.txt”,”sr.txt”,FTP_ASCII)
দূরবর্তী কম্পিউটারে ফাইল আপলোড করে। sr.txt নামের ফাইলটি আপলোড করে এবং সার্ভারে আপলোডকৃত ফাইলটির নাম হবে d.txt।
ftp_pwd($connect)
দূরবর্তী কম্পিউটারের বর্তমান ডিরেক্টরীর নাম দেখায়।
ftp_rename($connect,”oldname”,”newname”)
দূরবর্তী কম্পিউটারের ফাইলের নাম রিনেম করে।
ftp_rmdir($connect,”directoryname”)
দূরবর্তী কম্পিটারের ডিরেক্টরীকে ডিলিট করে।
ftp_size($connect,”filename.txt”)
দূরবর্তী কম্পিউটারের কোন ফাইলের আকার দেখায়।
ftp_systype($connect)
দূরবর্তী কম্পিউটারটি কোন সিস্টেমের তা দেখায়। যেমন- ম্যাক।
ফাইল পড়া ও লেখা
ডাইনামিক ওয়েব সাইট বা ওয়েব এপ্লিকেশনে সাধারণত পিএইচপি ও মাইএসকিউএল একসাথে কাজ করে। এপ্লিকেশনে কোন ডাটা সংরক্ষণ করার প্রয়োজন হলে তা ডাটাবেজে সংরক্ষণ করা হয়। বিশেষ কোন ক্ষেত্রে ডাটাবেজ ছাড়া ফাইলেও কোন তথ্য রাখা বা ফাইল থেকে কোন তথ্য পড়া তথা রিড করার প্রয়োজন হতে পারে। এখানে কিভাবে একটি টেক্সট বা ফ্ল্যাট ফাইলে ডাটা রাইট বা রিড করতে হয় সে সম্বন্ধে আলোচনা করব।
ফ্ল্যাট ফাইল থেকে ডাটা রিট্রাইভ বা ডাটা স্টোর করার জন্য পিএইচপির ফাংশন ব্যবহার করতে হবে। এ কাজটি তিনটি ধাপে সম্পন্ন করা হয়। প্রথমত- ফাইলটি খোলা, দ্বিতীয়ত- ফাইলটিতে তথ্য রাখা বা ফাইলটি থেকে তথ্য পড়া এবং তৃতীয়ত- ফাইলটি বন্ধ করা।
ফাইল খোলা
ফাইলে কোন তথ্য রাখা বা ফাইলের কোন তথ্য পড়ার পূর্বে প্রথম ধাপের কাজ হলো ফাইলটি খোলা। ফাইল খোলার সাধারণ ফরম্যাটটি হলো-
$fh = fopen(“filename”,”mode”)
স্টেটমেন্টটিতে ফাইলটিকে হ্যান্ডেল করার জন্য $fh নামে একটি ভ্যারিয়েবল এসাইন করা হয়েছে। $fh ভ্যারিয়েবলটি ফাইলটিকে চিহ্নিত করার তথ্যাটি ধারণ করে। ফাইল সাধারণত filename.txt, পাথ হলে c:/data/filename.txt অথবা ইউআরএল হলে http://yoursite.com/filename.txt এভাবে লেখা হয়। ফাইল ওপেন করার সময় মুড উল্লেখ করে দিয়ে পিএইচপিকে জানানো হয় প্রকৃতপক্ষে ফাইলটি দিয়ে কি ধরণের কাজ করা হবে। নিচে একটি টেবিলে ফাইলের মুডগুলো বর্ণনাসহ উল্লেখ করা হলো-
মুড
এটি কী
ফাইলটিনাথাকলেকিহয়
r
রিড অনলি বা শুধুমাত্র পড়া যাবে।
একটি সতর্কতামূলক বার্তা প্রদর্শন করা হয়।
r+
পড়া যাবে এবং লেখাও যাবে।
একটি সতর্কতামূলক বার্তা প্রদর্শন করা হয়।
w
রাইট অনলি বা শুধুমাত্র লেখা যাবে।
পিএইচপি এটি তৈরি করে। একই নামে ফাইল থাকলে পিএইচপি ওভাররাইট করে।
w+
পড়া যাবে এবং লেখাও যাবে।
পিএইচপি এটি তৈরি করে। একই নামে ফাইল থাকলে পিএইচপি ওভাররাইট করে।
a
ফাইলের শেষে তথ্য সংযোজন করে।
পিএইচপি এটি তৈরি করে।
a+
পড়বে এবং তথ্য যোগ করবে।
পিএইচপি এটি তৈরি করে।
রিড মুডে ফাইল খোলা
file1.txt নামের একটি ফাইলের তথ্যগুলো পড়ার জন্য ফাইলটি খুলতে চাইলে নিচের স্টেটমেন্টটি ব্যবহার করবেন-
$fh = fopen(“file1.txt”,”r”);
এই স্টেটমেন্টটিতে পিএইচপি file1.txt ফাইলটিকে স্ক্রিপ্টটি যে ডিরেক্টরীতে আছে সেখানে খুজবে। সেখানে না পেলে একটি বার্তা দেখাবে। কিন্তু স্টেটমেন্টটি থেমে যাবে না। এজন্য স্ক্রিপ্টটি এখানে থামিয়ে দিতে die স্টেটমেন্ট ব্যবহার করতে হবে। যেমন-
$fh = fopen(“file1.txt”,”r”)
or die(“Can’t open file”);
die স্টেটমেন্টটি স্ক্রিপ্টটিকে থামিয়ে দিবে এবং নির্দিষ্ট বার্তাটি ডিসপ্লে করবে।
রাইট মুডে ফাইল খোলা
ডিরেক্টরীর নির্দিষ্ট কোন ফাইলে তথ্য রাখতে নিচের মতো স্টেটমেন্টটি লিখতে হবে-
$fh = fopen(“c:/testdir/file1.txt”,”w”);
উল্লেখিত ডিরেক্টরীতে ফাইলটি না থাকলে ওই ডিরেক্টরীতে ফাইলটি তৈরি হবে। কিন্তু ডিরেক্টরীটির অস্তিত্ব না থাকলে ডিরেক্টরীটি তৈরি না হয়ে একটি বার্তা দেখাবে। তাই ডিরেক্টরীটি সম্পর্কে নিশ্চিত হয়ে ফাইলটি তৈরি করতে আমরা স্টেটমেন্টটিকে নিচের মতো করে লিখতে পারি-
একটি ইউআরএলকে কেবলমাত্র রিড মুডেই খোলা যায়। এটি রাইট মুডে ওপেন হবে না।
ফাইল বন্ধ করা
একটি ফাইল পড়া বা এতে লেখা শেষে ফাইলটি এই স্টেটমেন্টটি দিয়ে বন্ধ করা হয়।
fclose($fh);
এখানে $fh হলো ফাইলটি খোলার সময় ব্যবহৃত স্টেটমেন্টটি যে ভ্যারিয়েবলে রাখা হয়েছিল।
ফাইলে লেখা
একটি ফাইল রাইটিং মুডে খোলার পর fwrite স্টেটমেন্ট ব্যবহার করে এতে লেখা যাবে। স্টেটমেন্টটির সাধারণ ফরম্যাট এরকম-
fwrite($fh, datatosave);
এই স্টেটমেন্টেও $fh একটি পয়েন্টার হিসেবে ব্যবহৃত হয়েছে। যা ফাইলটি ওপেন করার সময় ব্যবহার করা হয়েছিল। datatosave হলো সেই তথ্য যা ফাইলে লিখে সংরক্ষণ করা হবে। তথ্যটি কোন স্ট্রিং অথবা ভ্যারিয়েবলও হতে পারে। যেমন নিচের স্টেটমেন্টগুলো দেখুন-
এই স্টেটমেন্টগুলো চলতি তারিখটি file2.txt ফাইলে সংরক্ষণ করে। a দিয়ে ফাইলটি এ্যাপেন্ড অর্থাৎ ফাইলটিতে কোন কিছু যোগ করা হবে এই মুডে খোলা হয়েছে। যদি ফাইলটি আগে থেকে তৈরি করা না থাকে তাহলে স্টেটমেন্টগুলো এক্সিকিউট হলেই ফাইলটি তৈরি হবে এবং এর প্রথম লাইনে তারিখটি লেখা হবে। এভাবে একটি লগ ফাইল তৈরি করা হলে স্ক্রিপ্টটি যতবার এক্সিকিউট হবে ততবার ফাইলে তারিখটি যোগ হবে। একই তারিখে ফাইলটি তিনবার এক্সিকিউট হলে, file2.txt তে তিনবারই তারিখটি থাকবে। এভাবে-
2013-10-22
2013-10-22
2013-10-22
\n ব্যবহার করায় প্রতিটি তারিখ পৃথক লাইনে আসে। এই উদাহরণটি w (রাইট) মুডে এক্সিকিউট করা হলে স্ক্রিপ্টটি প্রতিবার এক্সিকিউশনের সময় একটি নতুন ফাইল তৈরি হবে এবং প্রতিটি ফাইলই ওভার রাইট হবে। তাই একটি ফাইলের মধ্যেই সব তারিখ সংরক্ষণ করার জন্য এ্যাপেন্ড মুড ব্যবহার করা হয়েছে।
ফাইল পড়া
পিএইচপিতে fgets স্টেটমেন্টের মাধ্যমে যে কোন ফাইল পড়া যাবে। এর সাধারণ ফরম্যাটটি এরকম-
$line = fgets($fh);
এই স্টেটমেন্টেও আগের মতো $fh কে পয়েন্টার হিসেবে ব্যবহার করা হয়েছে। স্টেটমেন্টটি যতক্ষণ না ফাইলটির শেষে না পৌছায় ততক্ষণই পড়তে থাকে এবং স্ট্রিং আকারে তা $line এ ধারণ করে। পিএইচপিতে feof নামে আরেকটি ফাংশন আছে যা বলে দেয় এটি একটি ফাইলের শেষে এসে পৌছেছে। নিচের স্টেটমেন্টটি একটি ফাইলকে পড়ে এবং সবগুলো লাইনকে ডিসপ্লে করে।
এই স্ক্রিপ্টে প্রথম লাইনে feof($fh) একটি true ভ্যালু রিটার্ন করে। যখন সে ফাইলের শেষে পৌছায়। বিস্ময়সূচক চিহ্নটি নির্দেশ করে যতক্ষণ ফাইলের শেষ প্রান্তে না পৌছাবে ততক্ষণই স্টেটমেন্টগুলা সত্য হবে এবং এক্সিকিউট হবে। অর্থ্যাৎ লাইনগুলো ইকো হতে থাকবে। যখনই ফাইলটির শেষে পৌছাবে তখনই লুপটি থেমে যাবে। এই স্টেটমেন্টগুলো ব্যবহার করে পূর্বের উদাহরণের file2.txt ফাইলটি দেখলে নিচের মত তারিখ ডিসপ্লে করবে-
2013-10-22
2013-10-22
এখানে প্রতিটি লাইন আলাদা লাইনে না দেখাতে চাইলে স্টেটমেন্টটি এভাবে লিখতে পারেন-
$content এ্যারেতে ফাইলের প্রতিটি লাইন এ্যারের একটি ইলিমেন্ট হিসেবে সংরক্ষিত হবে। এই কাজটি আবার সংক্ষেপেও করা যায়। এজন্য নিচের স্টেটমেন্টটি লিখতে হবে-
$content = file(“file2.txt”);
এই স্টেটমেন্টটিও fgets ফাংশনের মতো প্রতিটি লাইনকে এ্যারেতে সংরক্ষণ করে। তবে file ফাংশন এক্সিকিউট হওয়ার সময় স্ক্রিপ্ট এক্সিকিউশনের গতিকে ধীর করে দেয়। বড় ফাইল পড়ার সময় file ফাংশনের চেয়ে fgets ফাংশন ব্যবহার করাই ভাল। এতে স্ক্রিপ্ট খুব দ্রুত কাজ করে।
স্ট্রিং এ ফাইল পড়া
কোন সময় একটি ফাইলের পুরো কনটেন্টকে একটি স্ট্রিং এ নিয়ে আসার প্রয়োজন হতে পারে। উদাহরণস্বরুপ একটি ফাইলের কনটেন্টকে আপনি ই-মেইলে কোথাও পাঠাতে চান। তাই পুরো ফাইলের কনটেন্টকে একটি স্ট্রিং আকারে পড়তে হবে। এজন্য নিচের মতো করে পিএইচপির ফাংশন ব্যবহার করতে হবে-
$content = file_get_contents(“file2.txt”,1);
file_get_contents ফাংশনটি file ফাংশনের মতো একই কাজ করে। কিন্তু এই ফাংশনে ফাইলের কনটেন্ট একটি স্ট্রিং এ সংরক্ষিত হয়।
অন্য প্রোগ্রামের সাথে তথ্য বা ডাটা বিনিময়
কখনও কখনও অন্য কোন প্রোগ্রামে পিএইচপি থেকে তথ্য দেয়া বা অন্য কোন প্রোগ্রাম থেকে পিএইচপিতে তথ্য আনার প্রয়োজন হতে পারে। ফ্ল্যাট ফাইলের ক্ষেত্রে কিভাবে তথ্য বা কনটেন্ট আদান প্রদান করা হয় তা আমরা পূর্বের সেকশনে জেনে এসেছি।
ফ্ল্যাট ফাইলে ডাটা বিনিময়
প্রায় সবধরণের সফটওয়্যারেরই ফ্ল্যাট ফাইলের ডাটা পড়া এবং ফ্ল্যাট ফাইলে ডাটা সংরক্ষণের ক্ষমতা রয়েছে। উদাহরণস্বরুপ, ওয়ার্ড প্রসেসর আপনার ডকুমেন্টগুলোকে তার নিজস্ব ফরম্যাটে সংরক্ষণ করে যা শুধুমাত্র ওই সফটওয়্যারই বুঝে। আপনি চাইলে ডকুমেন্টগুলোকে টেক্সট ফরম্যাটেও সংরক্ষণ করতে পারেন। টেক্সট ডকুমেন্টে রাখা তথ্য যে কোন সফটওয়্যার দিয়ে সহজেই পড়া যায়।
ধরুন আপনার পিএইচপি স্ক্রিপ্ট কতগুলো তথ্য একটি টেক্সট ফাইলে সংরক্ষণ করে। সেই টেক্সট ফাইলটি অন্য যে সফটওয়্যারের পড়ার ক্ষমতা আছে শুধুমাত্র সেই সফটওয়্যারই পড়তে পারবে। যেমন- বেশিরভাগ ক্ষেত্রে ওয়ার্ড প্রসেসিং সফটওয়্যারই টেক্সট ফাইল পড়তে পারে। এমনকি কিছু কিছু ওয়ার্ড প্রসেসিং সফটওয়্যার নির্দিষ্ট কিছু ফরম্যাটের টেক্সট ফাইল পড়তে পারে। এমন হতে পারে একটি এপ্লিকেশন তৈরি করা হলো যা একটি টেক্সট ফাইলের নির্দিষ্ট অবস্থানের টেক্সটকে নির্দিষ্ট একটি ফরম্যাটে পড়বে। যেমন- একটি এপ্লিকেশনটি একটি ফাইলের ক্যারেক্টার স্ট্রিংয়ের প্রথম 20 ক্যারেক্টার কোন ব্যক্তির নাম, পরবর্তী 20 ক্যারেক্টার তার ঠিকানা এভাবে পড়ে। তাই fwrite স্টেটমেন্ট দিয়ে কোন ফ্ল্যাট ফাইল তৈরি করার সময় অন্য যে সফটওয়্যার সেই ফাইলটি কোন ফরম্যাটে পড়তে তা খেয়াল রাখতে হবে।
কমা ডিলিমিটেড ফরম্যাটে ডাটা বিনিময়
কমা সেপারেটেড ভ্যালুস (CSV- comma-separated values) একটি বহুল ব্যবহৃত ফাইল ফরম্যাট। এটিকে কমা ডিলিমিটেড (comma delimited) ফাইলও বলা হয় যা সফটওয়্যার প্রোগ্রামের মধ্যে তথ্য আদান প্রদানে ব্যবহৃত হয়।
সিএসভি ফাইলে তথ্য একটি টেবিলের মধ্যে সারি এবং কলাম আকারে রাখা হয়। যেমন স্প্রেডশীট প্রোগ্রামগুলোতে সারি ও কলাম আকারে সাজানো তথ্য একটি সিএসভি ফাইলে লেখা ও পড়া যায়।
করোনার টিকা পেতে নির্দিষ্ট ফর্মে আপনার জাতীয় পরিচয়পত্র ও মোবাইল নম্বর যাচাইপূর্বক নিবন্ধন সম্পন্ন করতে হবে। পরবর্তীতে মোবাইল ফোনে এসএমএস বার্তার মাধ্যমে ভ্যাকসিন প্রদানের স্থান ও তারিখ পর্যায়ক্রমে নির্দিষ্ট সময়ে জানানো হবে। এজন্য তিনটি ধাপ সম্পন্ন করতে হবে।
অনলাইনে নিবন্ধন: প্রথমে এই পোর্টালের মাধ্যমে জাতীয় পরিচয়পত্র ও সঠিক মোবাইল নম্বর যাচাইপূর্বক অনলাইনে নিবন্ধন সম্পন্ন করবেন।
SMS নোটিফিকেশন:অনলাইনে নিবন্ধন পরবর্তী তথ্য যাচাইপূর্বক পর্যায়ক্রমে টিকা প্রদানের তারিখ ও কেন্দ্রের নাম উল্লেখপূর্বক মুঠোফোনে খুদেবার্তা পাবেন।
টিকাকেন্দ্রেটিকাগ্রহণ:মুঠোফোনে খুদেবার্তা প্রাপ্তি সাপেক্ষে টিকাকার্ড, জাতীয় পরিচয়পত্র ও স্বাক্ষরিত সম্মতিপত্রসহ নির্দিষ্ট তারিখ ও টিকাদান কেন্দ্রে স্ব-শরীরে উপস্থিত হয়ে কোভিড-১৯ টিকা গ্রহণ করবেন।
নিবন্ধন প্রক্রিয়া সম্পন্ন করার পর নির্দিষ্ট সময়ে জানিয়ে দেয়া হবে কবে কোথায় টিকা দেয়া হবে। শুধুমাত্র ১৮ বছরের বেশি বয়সী মানুষেরা এই টিকা নিতে পারবেন এবং নিবন্ধন করতে পারবেন। কারণ অপ্রাপ্তবয়স্কদের ওপর অক্সফোর্ড-অ্যাস্ট্রাজেনেকার টিকার ক্লিনিক্যাল ট্রায়াল হয়নি।
পরিচয় যাচাইয়ে এই অ্যাপে ১৮টি শ্রেণি করা হয়েছে, যার একটি সিলেক্ট করার পর জাতীয় পরিচয়পত্রের নম্বর ও জন্ম তারিখ দিয়ে নিবন্ধন শুরু করতে হবে।
কোভিড-১৯ ভ্যাকসিন নিবন্ধনের অবস্থা জানুন
নির্দিষ্ট ফরমে আপনার জাতীয় পরিচয়পত্র নম্বর ও জন্ম তারিখ (জাতীয় পরিচয়পত্র অনুযায়ী) প্রদান করে “যাচাই করুণ” বাটনে ক্লিক করলে নিবন্ধনের সময় প্রদানকৃত মোবাইল নম্বরে একটি OTP কোড SMS এর মাধ্যমে পাঠানো হবে, তা পরবর্তী OTP কোড ঘরে প্রদান করে “স্টেটাস যাচাই” বাটনে ক্লিক করলে স্টেটাস জানা যাবে। অর্থাৎ কোভিড-১৯ ভ্যাকসিন নিবন্ধনের অবস্থা জানা যাবে। যাচাইয়ের লিংক
কোভিড-১৯ ভ্যাকসিন কার্ড সংগ্রহ
নির্দিষ্ট ফরমে আপনার জাতীয় পরিচয়পত্র নম্বর ও জন্ম তারিখ (জাতীয় পরিচয়পত্র অনুযায়ী) প্রদান করে “যাচাই করুণ” বাটনে ক্লিক করলে নিবন্ধনের সময় প্রদানকৃত মোবাইল নম্বরে একটি OTP কোড SMS এর মাধ্যমে পাঠানো হবে, তা পরবর্তী OTP কোড ঘরে প্রদান করে “ভ্যাকসিন কার্ড ডাউনলোড” বাটনে ক্লিক করলে ভ্যাকসিন কার্ড সংগ্রহ করা যাবে।
কোভিড-১৯ ভ্যাকসিন গ্রহণের সম্পূর্ণ নিয়মাবলী
কোভিড-১৯ ভ্যাকসিন গ্রহণের গ্রহনের জন্য ওয়েব পোর্টাল ব্যবহার সহায়িকা ডাউনলোড করে নিতে পারেন।
ডাইনামিক ওয়েব এপ্লিকেশন ডেভেলপ করতে এইচটিএমএল, পিএইচপি ও সিএসএস টুলগুলো ব্যবহার করা হয়। এইচটিএমএল, সিএসএস দিয়ে মার্কআপ করে পেজকে প্রেজেন্টেশন করা হয় আর পিএইচপি ডাইনামিক পেজে ডাটা স্টোর ও রিট্রিভ করতে মাইএসকিউএলের সাথে কাজ করে। বেশিরভাগ ওয়েব এপ্লিকেশনেই পিএইচপি শুধুমাত্র মাইএসকিউএলের সাথে কাজ করে। কিন্তু কিছু কিছু ক্ষেত্রে এপ্লিকেশনে আরো কিছু জঠিল বিষয়ে কাজ করতে হয়। আর তা হলো অপারেটিং সিস্টেম বা সিস্টেমের অন্য কোন সফটওয়্যারের সাথে পিএইচপির কাজ।
পিএইচপিতে একটি ফটোগ্যালারি এপ্লিকেশন তৈরি করতে আপনাকে অপারেটিং সিস্টেমের সাথে কাজ করতে হবে। ফটোগ্যালারিতে ব্যবহারকারী গ্রাফিক ফাইল বা ছবি আপলোড করবে। এই ধরণের এপ্লিকেশনে আপলোড করা ফাইলগুলোকে মেনটেইন করতে হবে। যেমন- ফাইল রিনেম করা, মুভ করা, ডিলিট করা ইত্যাদি। তাছাড়া ছবিটি কখন আপলোড করা হয়েছে, সর্বশেষ কখন দেখা হয়েছে এরকম তথ্য দেখানো। এগুলোর জন্য পিএইচপিতে ফাইল সিস্টেম নিয়ে কাজ করার ফিচার রয়েছে।
পিএইচপি আপনার কম্পিউটারের বা সিস্টেমের যে কোন প্রোগ্রামও রান করাতে পারে। পিএইচপি কোড দিয়ে এফটিপির (FTP- File Transfer Protocol) মাধ্যমে এক কম্পিউটার থেকে অন্য কম্পিউটারে ফাইল স্থানান্তর করা হয়। পিএইচপির মাধ্যমে ডাটাবেজ ছাড়াও নির্দিষ্ট ফাইলে আপনার তথ্য সংরক্ষণ করতে পারেন।
এই অধ্যায়ে আমরা পিএইচপিতে সিস্টেম সম্পর্কিত কাজ, সিস্টেমের কাজের ক্ষেত্রে নিরাপত্তার বিষয়সহ অন্যান্য বিষয়গুলো নিয়ে আলোচনা করব।
ফাইল ম্যানেজিং
হার্ডডিস্কে আমরা প্রয়োজনীয় তথ্য নির্দিষ্ট ফাইলের ভিতরে সংরক্ষণ করে তা ফোল্ডারের মধ্যে সাজিয়ে রাখি। যেন সহজেই কাঙ্খিত ফাইল বা তথ্যটি খুঁজে পাই। এভাবে সাজিয়ে না রাখলে প্রয়োজনের সময় ফাইলটি পাওয়া খুবই কঠিন হয়ে যাবে। যেমন- একটি ড্রয়ারের মধ্যে অনেকগুলো ফাইল রাখলে নির্দিষ্ট একটি ফাইলকে সহজে খুজে পাওয়া যাবে না। তাই আলাদা আলাদা ড্রয়ারে নির্দিষ্ট ধরনের ফাইল রাখলে খুব সহজেই প্রয়োজনের সময় তা পাওয়া যাবে। একেই বলা হয় ডিরেক্টরী বা ফোল্ডার। আর ফোল্ডার তৈরি করে সংশ্লিষ্ট ফাইলকে এর ভিতর সংরক্ষণ করাকে বলা হয় ফাইল সিস্টেম।
একটি ফাইল সিস্টেমে উপরের দিকে সাজানো বা পড়া হয়। উপরের দিক তথা ডিরেক্টারীর প্রথম অংশটিকে বলা হয় রুট(root)। যেমন c:\। রুট ডিক্টেরীর ভিতর অন্য ডিরেক্টরী, তার ভিতর আরো ডিরেক্টরী এভাবেই ফোল্ডার বানিয়ে ডিরেক্টরী সাজানো হয় এবং ফাইল রাখা হয়। এই গঠনটি আরো অনেক বড়ও হতে পারে।
পিএইচপির মাধ্যমে নির্দিষ্ট কোন ডিরেক্টরীতে রাখা ফাইল- যাচাই করা (exist), কপি করা (copy), রিনেম করা (rename), ডিলিট করা (delete) ইত্যাদি অনেক কাজ করা যায়।
ফাইল সম্পর্কিত তথ্য সংগ্রহ
নির্দিষ্ট ফাইল নিয়ে কাজ করার জন্য নির্দিষ্ট কোন ডিরেক্টরীতে ওই নামের ফাইলটি আছে কিনা জানার প্রয়োজন হতে পারে। file_exists স্টেটমেন্টের মাধ্যমে নির্দিষ্ট নামের ফাইলটির অস্তিত্ব সম্পর্কে জানা যায়। যেমন-
$result = file_exists(“stuff.txt”);
এই স্টেটমেন্টটিতে $result ভ্যারিয়েবলটি true অথবা false বুলিয়ান ভ্যালু ধারণ করে। এই ফাংশনগুলো সাধারণত কন্ডিশনাল স্টেটমেন্টে ব্যবহার করা হয়। যেমন-
if(!file_exists(“stuff.txt”))
{
echo “File not found!\n”;
}
উপরের স্টেটমেন্টের মাধ্যমে stuff.txt ফাইলটি আছে নিশ্চিত হওয়ার পর ফাইলটি নিয়ে আরো অন্য কাজ করা যাবে।
নিচের টেবিলে ফাইল সিস্টেম সম্পর্কি পিএইচপির ফাংশনগুলো তুলে ধরা হলো-
ফাংশন
বিবরণ
আউটপুট
is_file(“stuff.txt”)
একটি রেগুলার ফাইল কিনা তা পরীক্ষা করে।
true অথবা false
is_dir(“stuff.txt”)
ফাইলটি কোন ডিরেক্টরী কিনা পরীক্ষা করে।
true অথবা false
is_executable(“do.txt”)
ফাইলটি এক্সিকিউটেবল কিনা পরীক্ষা করে।
true অথবা false
is_writable(“stuff.txt”)
ফাইলটিতে লেখা যাবে কিনা পরীক্ষা করে।
true অথবা false
is_readable(“stuff.txt”)
ফাইলটি পড়া যাবে কিনা পরীক্ষা করে।
true অথবা false
fileatime (“stuff.txt”)
সর্বশেষ কবে কবে এক্সেস করা হয়েছিল।
টাইম স্ট্যাম্প অথবা false
filectime(“stuff.txt”)
ফাইলটি কখন তৈরি করা হয়েছিল।
টাইম স্ট্যাম্প অথবা false
filemtime(“stuff.txt”)
ফাইলটি সর্বশেষ কখন মডিফাই করা হয়েছিল।
টাইম স্ট্যাম্প অথবা false
filegroup(“stuff.txt”)
ফাইলটি গ্রুপ আইডি রিটার্ন দেয়।
ইন্টেজার যা ফাইলের গ্রুপ আইডি অথবা false
fileowner(“stuff.txt”)
ফাইলটির ওনারের ইউজার আইডি রিটার্ন দেয়।
ইন্টেজার যা একটি ইউজার আইডি অথবা false
filesize(“stuff.txt”)
বাইট ফরম্যাটে ফাইলের আকার দেখায়।
ইন্টেজার অথবা false
filetype(“stuff.txt”)
কি ধরণের বা টাইপের ফাইল?
ফাইল টাইপ (যেমন- file, dir, link, char) অথবা false
basename(“/t1/do.txt”)
পাথটি থেকে ফাইলের নামটি রিটার্ন করে।
do.txt
dirname(“/t1/do.txt”)
পাথটি থেকে ডিরেক্টরীর নামটি রিটার্ন দেয়।
/t1
এছাড়াও আরো ফাংশন রয়েছে। যেমন pathinfo() ফাংশনটি একটি ফাইলের সম্পূর্ণ পাথটি সম্পর্কে তথ্য প্রদান করে। যেমন এই স্টেটমেন্টটি-
$pinfo = pathinfo(“/topdir/nextdir/stuff.txt”);
ফাইল চেকিং অর্থ্যাৎ এই ফাংশনগুলো ব্যবহারের সময় খুবই সাবধান থাকতে হবে যেন ফাইলের নাম বা ডিরেক্টরীর নামের বানানের কোন ভুল না হয়। ফাইল নামের বানানে ভুল হলে স্ক্রিপ্ট নির্দিষ্ট ফাইলটি না পেয়ে false ভ্যালু রিটার্ন করবে।
ফাইল কপি, রিনেম ও ডিলিট করা
কোন ডিরেক্টরীর একটি ফাইলকে আমরা নতুন একটি ফাইলে কপি করতে পারি। একটি ফাইল একই ডিরেক্টরিতে দুটি নামে অথবা একটি ডিরেক্টরীর পাশাপাশি অন্য ডিরেক্টরিতেও কপি করে রাখা হয়। বিশেষত ডাটাবেজ বা গুরুত্বপূর্ণ ফাইল ব্যাকআপ রাখার ক্ষেত্রে এই কপি স্টেটমেন্ট ব্যবহার করা হয়। যেমন-
copy(“fileold.txt”,”filenew.txt”);
এই স্টেটমেন্টটির মাধ্যমে fileold.txt ফাইলটি filenew.txt নামের একটি নতুন ফাইলে কপি হবে। ওই ডিরেক্টরীতে filenew.txt নামের কোন ফাইল থাকলে তা ওভার রাইট হয়ে যাবে। আর ওভার রাইট করতে না চাইলে স্টেটমেন্টটি এভাবে লিখতে হবে-
আমরা চাইলে ফাইলটি নতুন একটি ডিরেক্টরী অর্থ্যাৎ অন্য কোন ফোল্ডারেও কপি করে রাখতে পারি। তাহলে স্টেটমেন্টটি হবে নিচের মতো-
copy(“fileold.txt”,”newdir/filenew.txt”);
নিচের স্টেটমেন্টের মতো রিনেম স্টেটমেন্ট ব্যবহার করেও ফাইল রিনেম করা যায়।
rename(“oldname.txt”,”newname.txt”);
ডিরেক্টরীতে থাকা কোন ফাইলকে রিনেম করতে এই স্টেটমেন্টটি ব্যবহার করলে নিচের মতো সতর্কবার্তা আসবে-
Warning: rename(fileold.txt,filenew.txt): File exists in c:test.php on line 17
অপ্রয়োজনীয় ফাইল ডিলিট করতে unlink স্টেটমেন্ট ব্যবহার করা যায়। যেমন-
unlink(“badfile.txt”);
ফাইল সাজানো বা ফাইল বিন্যাস
ফাইল ফোল্ডারে সাজানো থাকে। এই সেকশনে কিভাবে ডিরেক্টরী তৈরি করা যায়, অপসারণ করা যায় এবং কিভাবে একটি ডিরেক্টরীর সবগুলো ফাইলের তালিকা পাওয়া যায় তা দেখব।
ডিরেক্টরী তৈরি
mkdir ফাংশনের মাধ্যমে ডিরেক্টরী ক্রিয়েট করা হয়। যেমন-
mkdir(“testdir”);
এই স্টেটমেন্টটি স্ক্রিপ্টটি যে ডিরেক্টরীতে রাখা আছে সেখানে testdir নামে একটি ফোল্ডার তৈরি করে। ওই ডিরেক্টরীতে testdir নামে কোন ফোল্ডার থাকলে নিচের মতো সতর্কীকরণ বার্তা দেখাবে-
Warning: mkdir(): File exists in d:/test/test.php on line 5
তাই কোন ডিরেক্টরী তৈরি করার আগে ওই নামে কোন ডিরেক্টরী আছে কিনা তা দেখে নিতে হয়। নিচের স্টেটমেন্টগুলোর মাধ্যমে ডিরেক্টরী যাচাই করা যায়-
ডিরেক্টরী তৈরি করার পর এর ভিতর কপি করে ফাইল রাখতে পারেন। অন্য কোন ডিরেক্টরীর ভিতর নতুন ফোল্ডার তৈরি করতে চাইলে তাও করা যাবে। এজন্য পুরো পাথটি নিচের মতো করে ব্যবহার করতে হবে-
mkdir(“/topdir/nextdir/mynewdir”);
ডিরেক্টরীর সব ফাইলের তালিকা তৈরি
অনেক সময় নির্দিষ্ট একটি ডিরেক্টরীতে কতগুলো ফাইল আছে এবং সেগুলোর তালিকা করার প্রয়োজন হতে পারে। পিএইচপিতে ওয়েব ডেভেলপমেন্ট করার ক্ষেত্রে এটি একটি গুরুত্বপূর্ন কাজ। উদাহরণস্বরূপ আপনি ডাউনলোড ফোল্ডারে রাখা ফাইলগুলোর একটি তালিকা তৈরি করে সেগুলো ইউজারকে ডাউনলোড করার সুযোগ করে দিতে পারেন অথবা নির্দিষ্ট একটি ডিরেক্টরীর ফাইলগুলোর মধ্যে ইমেজ বা গ্রাফিক ফাইলগুলোর তালিকা তৈরি করার প্রয়োজন হতে পারে। এজন্য ডিরেক্টরীকে প্রথম ওপেন করে তা রিড করতে হবে। এজন্য opendir ফাংশন রয়েছে। যেমন-
$dh = opendir(“/topdir/testdir”);
স্টেটমেন্টটিতে উল্লেখিত ডিরেক্টরীটির কোন অস্তিত্ব না থাকলে নিচের মতো সতর্কীকরণ বার্তা ডিসপ্লে করবে।
Warning: opendir(testdir): failed to open dir: Invalid argument in test13.php on line 5
আগের স্টেটমেন্টটিতে ভ্যারিয়েবল $dh একটি পয়েন্টার। এর মাধ্যমে ডিরেক্টরীটি ওপেন হয়েছে। এখন আপনি এই $dh এর মাধ্যমে অর্থ্যাৎ একে পয়েন্টার হিসেবে ব্যবহার করে ডিরেক্টরীটি রিড করতে পারেন। এজন্য readdir ফাংশন ব্যবহার করতে হবে নিচের মতো-
$filename = readdir($dh);
এই স্টেটমেন্টটিতে $filename ভ্যারিয়েবলটি একটি ফাইলের নামকে ধারণ করে। তাই ডিরেক্টরীর সবগুলো ফাইলকে রিড করতে একটি লুপ চালাতে হবে। নিচের মতো আমরা while লুপ ব্যবহার করতে পারি এই স্টেটমেন্টে-
এখন আমরা একটি ফোল্ডারে রাখা সবগুলো ছবি (ইমেজ ফাইল) দিয়ে একটি ফটোগ্যালারি তৈরি করব। কাজটি করতে আমরা opendir ও readdir ফাংশন ব্যবহার করবো। নিচের স্ক্রিপ্টটি একটি ফটোগ্যালারি তৈরি করবে-
<?php
/* Script name: displayGallery
* Description: Displays all the image files that are
* stored in a specified directory.
*/
echo “<html><head><title>Image Gallery</title></head>
<body>”;
$dir = “../test1/testdir/”; ➝8
$dh = opendir($dir); ➝9
while($filename = readdir($dh)) ➝10
{
$filepath = $dir.$filename; ➝12
if(is_file($filepath) and ereg(“\.jpg$”,$filename)) ➝13
{
$gallery[] = $filepath;
}
}
sort($gallery); ➝16
foreach($gallery as $image) ➝17
{
echo “<hr />”;
echo “<img src=’$image’ /><br />”;
}
?>
</body></html>
স্ক্রিপ্টটিতে প্রত্যেকটি লাইনের শেষে দেয়া লাইন নম্বরগুলো লক্ষ্য করুণ। লাইন নম্বরগুলোর মাধ্যমে ওই লাইনটি স্ক্রিপ্টে কিভাবে কাজ করেছে তা আলোচনা করা হলো-
এই লাইন ডিরেক্টরীর নামটি ভ্যারিয়েবলে ধারণ করেছে যাকে পয়েন্টার হিসেবে চিহ্নিত করে পরবর্তীতে ব্যবহার করা হবে। আরেকটি বিষয় লক্ষ্য লাখতে হবে ডিরেক্টরীর শেষে / (ব্যাকশ্ল্যাস) ব্যবহার করা হয়েছে। কখনোই / এর পরিবর্তে \ ব্যবহার করা যাবে না।
এই লাইনটি ডিরেক্টরীকে ওপেন করে।
এই লাইন ডিরেক্টরীর প্রতিটি ফাইলের নামকে রিড করার জন্য while লুপটি চালনা করে।
এই লাইনটি ফাইলের পুরো পাথটির জন্য $filepath ভ্যারিয়েবল তৈরি করে।
এই লাইনটি পরীক্ষা করে ফাইলটি .jpg এক্সটেনশনের কোন গ্রাফিক ফাইল কিনা। ফাইলটি .jpg এক্সটেনশনের হলে পুরো ফাইল পাথটি $gallery তে যোগ করে।
এই লাইনটি এ্যারেকে বর্ণনানুক্রমিকভাবে সর্টিং করে। ফলে ছবিগুলো বর্ণনানুক্রমিকভাবে ডিসপ্লে হয়।
এই লাইনটি ছবিগুলোকে পেজে ডিসপ্লে করতে foreach লুপটিকে চালনা করে।
অপারেটিং সিস্টেম কমান্ডের ব্যবহার
অপারেটিং সিস্টেমের সাথে ইন্টারএ্যাক্ট করা পিএইচপির একটি গুরুত্বপূর্ণ বিষয়। এজন্য পিএইচপির অনেক ফাংশন রয়েছে। অপারেটিং সিস্টেম কমান্ডের জন্য পিএইচপির ফাংশনগুলোর ব্যবহার খুবই নিরাপদ ও এগুলো খুবই দ্রুত কাজ করে। পিএইচপিতে অপারেটিং সিস্টেম কমান্ড চালানোর অনেকগুলো পদ্ধতি রয়েছে। যেমন-
ব্যাকটিকস (backticks): দুটি ` (ব্যাকটিক) এর মাঝের কমান্ডকে পিএইচপি এক্সিকিউট করে এবং তার আউটপুট ডিসপ্লে করে।
সিস্টেম ফাংশন (system function): এই ফাংশনটি সিস্টেম কমান্ডকে এক্সিকিউট করে আউটপুট দেখায় এবং আউটপুটের শেষ লাইনে পৌছায়।
ইএক্সইসি ফাংশন (exec function): এই ফাংশনটি সিস্টেম কমান্ডকে এক্সিকিউট করে আউটপুটকে একটি এ্যারেতে সংরক্ষণ করে এবং আউটপুটের শেষ লাইনটিকে রিটার্ন করে।
পাসথ্রো ফাংশন (passthru function): এই ফাংশনটি সিস্টেম কমান্ডকে এক্সিকিউট করে আউটপুট ডিসপ্লে করে।
তবে সিস্টেম কমান্ড চালানোর ক্ষেত্রে কিছু কিছু বিষয়ের অপারেটিরং সিস্টেমের উপর ভিত্তি করে ব্যতিক্রম হয়। যেমন নিচের কমান্ডগুলো অপারেটিং সিস্টেমের উপর ভিত্তি করে এক্সিকিউট হয়।
ব্যাকটিকের ব্যবহার
সিস্টেম কমান্ড এক্সিকিউট করার একটি সাধারণ পদ্ধতি হলো দুটি (`) ব্যাকটিকের মাঝখানে কমান্ডটিকে ব্যবহার করা। যেমন-
$result = `dir c:\php`;
$result ভ্যারিয়েবল কমান্ডের আউটপুটটি ধারণ করে। ভ্যারিয়েবলটিতে c:\php ডিরেক্টরীতে থাকা সবগুলো ফাইলের তালিকা সংরক্ষিত হয়। তাই $result ভ্যারিয়েবলটি ইকো করলে মোটামুটি এরকম একটি আউটপুট দেখাবে-
Volume in drive C has no label.
Volume Serial Number is 58B2-DBD6
Directory of c:\php
10/10/2013 05:43 PM <DIR> .
10/10/2013 05:43 PM <DIR> ..
10/10/2013 04:53 PM <DIR> dev
10/10/2013 04:53 PM <DIR> ext
10/10/2013 04:53 PM <DIR> extras
08/30/2013 07:11 AM 417,792 fdftk.dll
08/30/2013 07:11 AM 90,112 fribidi.dll
08/30/2013 07:11 AM 346,624 gds32.dll
08/30/2013 07:11 AM 90 go-pear.bat
08/30/2013 07:11 AM 96,317 install.txt
08/30/2013 07:11 AM 1,097,728 libeay32.dll
08/30/2013 07:11 AM 166,912 libmcrypt.dll
08/30/2013 07:11 AM 165,643 libmhash.dll
08/30/2013 07:11 AM 2,035,712 libmysql.dll
08/30/2013 07:11 AM 385,024 libswish-e.dll
08/30/2013 07:11 AM 3,286 license.txt
08/30/2013 07:11 AM 57,344 msql.dll
08/30/2013 07:11 AM 168,858 news.txt
08/30/2013 07:11 AM 278,800 ntwdblib.dll
10/10/2013 04:53 PM <DIR> PEAR
08/30/2013 07:11 AM 41,017 php-cgi.exe
08/30/2013 07:11 AM 32,825 php-win.exe
08/30/2013 07:11 AM 32,821 php.exe
08/30/2013 07:11 AM 2,523 php.gif
08/30/2013 07:11 AM 46,311 php.ini-dist
08/30/2013 07:11 AM 49,953 php.ini-recommended
08/30/2013 07:11 AM 36,924 php5apache.dll
08/30/2013 07:11 AM 36,925 php5apache2.dll
08/30/2013 07:11 AM 36,927 php5apache2_2.dll
08/30/2013 07:11 AM 36,932 php5apache2_filter.dll
08/30/2013 07:11 AM 57,410 php5apache_hooks.dll
08/30/2013 07:11 AM 669,318 php5embed.lib
08/30/2013 07:11 AM 28,731 php5isapi.dll
08/30/2013 07:11 AM 28,731 php5nsapi.dll
08/30/2013 07:11 AM 4,796,472 php5ts.dll
08/30/2013 07:11 AM 86,076 php_mysqli.dll
08/30/2013 07:11 AM 135 pws-php5cgi.reg
08/30/2013 07:11 AM 139 pws-php5isapi.reg
08/30/2013 07:11 AM 1,830 snapshot.txt
08/30/2013 07:11 AM 200,704 ssleay32.dll
35 File(s) 11,569,880 bytes
6 Dir(s) 180,664,549,376 bytes free
অপারেটিং সিস্টেমে safe_mode সক্রিয় করা থাকলে ব্যাকটিক অপারেটর কাজ করবে না। কিছু ক্ষেত্রে পিএইচপি ইনস্টল করার সময় ডিফল্ট ভাবে safe_mode বন্ধ করা থাকে। তবে সিস্টেমের এডমিনিস্ট্রেটর এই ভ্যালু নিজের মতো করে পরিবর্তন করতে পারেন।
সিস্টেম ফাংশনের ব্যবহার
সিস্টেম ফাংশন সিস্টেম কমান্ড এক্সিকিউট করে আউটপুট ডিসপ্লে করে এবং আউটপুটের শেষ লাইনটিকে ডিসপ্লে রিটার্ন করে। যেমন নিচের স্টেটমেন্টটি-
$result = system(“dir c:\php”);
এই স্টেটমেন্টটি এক্সিকিউট হওয়ার সময় ডিরেক্টরীর ফাইল লিস্ট দেখাতে থাকে এবং $result ভ্যারিয়েবলে শেষ লাইনটি রাখে। তাই $result ইকো করলে নিচের মতো দেখাবে-
11 Dir(s) 566,263,808 bytes free
ইএক্সইসি ফাংশনের ব্যবহার
exec ফাংশন একটি সিস্টেম কমান্ডকে এক্সিকিউট করে। কিন্তু কোন আউটপুট ডিসপ্লে করে না। আউটপুটটিকে একটি এ্যারেতে সংরক্ষণ করে। আউটপুটের প্রতিটি লাইন একেকটি ইলিমেন্ট হিসেবে এ্যারেতে সংরক্ষিত হয়।
কোন সময় হয়তো নির্দিষ্ট একটি ডিরেক্টরীতে কতগুলো ফাইল আছে এবং কত বাইট জায়গা খালি আছে তা জানার প্রয়োজন হতে পারে। নিচের স্টেটমেন্টটির মাধ্যমে আউটপুট কোন এ্যারেতে না রেখেও কমান্ডটি এক্সিকিউট করা যায়।
$result = exec(“dir c:\php”);
কমান্ডটি এক্সিকিউট হলে কোন আউটপুট ডিসপ্লে করে না। কারণ স্টেটমেন্টটিতে আউটপুটের শেষ লাইনটি ভ্যারিয়েবলে ধারণ করা হয়েছে। সুতরাং আউটপুট ডিসপ্লে করার জন্য ভ্যারিয়েবলটিকে ইকো করলে নিচের মতো আউটপুট দেখাবে-
11 Dir(s) 566,263,808 bytes free
এটি dir কমান্ডের আউটপুটের শেষ লাইনটিকে আউটপুট হিসেবে দেখায়। আপনি ইচ্ছা করলে কমান্ডের সম্পুর্ন আউটপুটটিকে একটি এ্যারেতে সংরক্ষণ করতে পারেন। এভাবে-
$dirout এ্যারেটি ডিরেক্টরীর ফাইলের তালিকার প্রতিটি লাইনকে ধারণ করে। তাই লুপটি নিচের মতো আউটপুট ডিসপ্লে করে-
Volume in drive C has no label.
Volume Serial Number is 394E-15E5
Directory of c:\php
10/10/2013 05:43 PM <DIR> .
10/10/2013 05:43 PM <DIR> ..
10/10/2013 04:53 PM <DIR> dev
10/10/2013 04:53 PM <DIR> ext
10/10/2013 04:53 PM <DIR> extras
08/30/2013 07:11 AM 417,792 fdftk.dll
পাসথ্রো ফাংশনের ব্যবহার
পাসথ্রো ফাংশনটি একটি সিস্টেম কমান্ডকে এক্সিকিউট করে এবং কমান্ডটি যা রিটার্ন করে তাই ডিসপ্লে হয়। একটি পাসথ্রো ফাংশন এক্সিকিউট করতে নিচের স্টেটমেন্টটি ব্যবহার করুন-
passthru(“dir c:\php”);
এই স্টেটমেন্টটি ডিরেক্টরীর ফাইলের তালিকা তৈরি করলেও কোন আউটপুট দেখায় না। এমনটি ডাটা সংরক্ষণ করার জন্য এখানে কোন ভ্যারিয়েবলও ব্যবহার করা হয়নি। সাধারণত বাইনারি আউটপুটের প্রয়োজন হলে এই পাসথ্রো ফাংশন ব্যবহার করা হয়।
সিস্টেম কমান্ডের এরর মেসেজ
সিস্টেম কমান্ড এক্সিকিউট করার সময় এটি যেকোন কারণে এক্সিকিউট করতে ব্যর্থ হলে পিএইচপি সাধারণত কোন তথ্যগত এরর মেসেজ বা ত্রুটি বার্তা দেখায় না। কমান্ডটি এক্সিকিউট করার পর কাঙ্খিত ফলাফল না পেলে বুঝতে হবে কমান্ডটি এক্সিকিউট হয়নি বা কোন ত্রুটি হয়েছে। কিন্তু কোথায় কি ত্রুটি হয়েছে তা জানতে পারবেন না। কারণ এটি কোন এরর মেসেজ দেখায় না।
তাই সিস্টেম কমান্ডের এরর মেসেজ ডিসপ্লে করতে চাইলে কমান্ডে কিছু বাড়তি ক্যারেক্টার যোগ করতে হবে। যেমন 2>&1 স্ট্রিংটি সিস্টেম কমান্ডের শেষে যোগ করে দিলে স্টেটমেন্টটি এক্সিকিউট করতে ব্যর্থ হলেই এরর মেসেজ দেখাবে। যেমন-
$result = system(“di c:\php”);
এই সিস্টেম কমান্ডটি এক্সিকিউট হলে সিস্টেম ফাংশনটি আউটপুট দেখাবে না। লক্ষ্য করলে দেখা যাবে dir বানানটি ভুল হয়েছে। আসলে di নামে কোন সিস্টেম কমান্ডের অস্তিত্ব না থাকায় কমান্ডটি এক্সিকিউট হবে না। কিন্তু এক্সিকিউট না হওয়ার বিষয়ে কোন বার্তাও দেখাবে না। এজন্য এই স্টেটমেন্টটিকে নিচের মতো করে লিখলে এরর মেসেজ প্রদর্শন করবে।
$result = system(“di c:\php 2>&1”);
ফলে এরর মেসেজটি হবে এরকম-
‘di’ is not recognized as an internal or external command, operable program or batch file.
2>&1 লেখার সময় অবশ্যই লক্ষ্য রাখতে হবে যে, ক্যারেক্টারগুলোর মাঝখানে কোন স্পেস যেন না থাকে।
নিরাপত্তা
একটি সিস্টেম কমান্ড এক্সিকিউট করা মানে ব্যবহারকারীকে আপনার কম্পিউটারে কোন এ্যাকশন ঘটাতে দেয়া বা কাজ করার অধিকার দেয়া। যেমন- dir c:\php কমান্ডটি আপনার কম্পিউটারে চালানো হলে আপনি হয়তো বলবেন- কোন সমস্যা নাই। কিন্তু rm /bin/* অথবা del c:\*.* কমান্ডটি আপনার কম্পিউটারে চালানো হলে আপনি কি বলবেন? অবশ্যই খুশি হবেন না। তাই সিস্টেম কমান্ড চালনা খুবই সতর্কতার সাথে করতে হবে।
যে সব ফরমে ব্যবহারকারীর কাছ থেকে ডাটা গ্রহণ করা হয়, এধরনের ফরমে সিস্টেম কমান্ড ব্যবহার করার সময় অবশ্যই খুব সাবধানতা অবলম্বন করতে হবে। উদাহরণস্বরূপ আপনি একটি এপ্লিকেশন তৈরি করেছেন যার মাধ্যমে ব্যবহারকারী ফরমে একটি নাম টাইপ করবে এবং ডাটাবেজে ওই নামে একটি ডিরেক্টরী তৈরি হবে। যার জন্য নিচের মতো একটি স্ক্রিপ্ট লিখলেন-
এখানে $directoryName = Sabina হলে এবং কমান্ডটি এক্সিকিউট হলে Sabina নামে একটি ডিরেক্টরী তৈরি হবে। তাহলে এটি কোন সমস্যা নয়। কিন্তু যদি ব্যবহারকারী $directoryName এর ঘরে ভুল বশতঃ Sabina, rm * লিখে ফেলে? এই কমান্ডটি এক্সিকিউট হলে Sabina নামে একটি ডিরেক্টরী তৈরি হবে এবং সেই সাথে বর্তমানে ডিরেক্টরীতে থাকা সব ফাইল রিমুভ হয়ে যাবে।
এপ্লিকেশনে একটি কাজ স্ক্রিপ্টের বিভিন্ন অংশে করার প্রয়োজন হয়। তাই একই কোড স্ক্রিপ্টের বিভিন্ন অংশে ব্যবহার করার জন্যই ফাংশনের ডিজাইন করা হয়েছে। ফাংশন পিএইচপি স্টেটমেন্টের একটি গ্রুপ যা নির্দিষ্ট একটি কাজ সম্পন্ন করে। ফাংশনটি ব্যবহার করে সেই কাজটি সম্পন্ন করা যাবে যেকোন জায়গায়। উদাহরণস্বরূপ নিচের কোডটির মাধ্যমে আপনার প্রতিষ্ঠানের লোগো ডিসপ্লে করে থাকেন-
এখন আপনি যে যে জায়গায় লোগোটি ডিসপ্লে করতে চান সবজায়গায় কোড না লিখে display_logo নামে একটি ফাংশন তৈরি করে এর মধ্যে ওই স্টেটমেন্টগুলো রেখে শুধুমাত্র ফাংশনটি ব্যবহার করে আপনার ইচ্ছাকৃত জায়গায় লোগোটি ডিসপ্লে করতে পারেন।
লোগোটি ডিসপ্লে করার জন্য ফাংশন ব্যবহার অনেক সুবিধাজনক এবং এতে স্ক্রিপ্টও থাকে অনেক সহজবোধ্য ও পরিচ্ছন্ন।
ফাংশন তৈরি
ফাংশন ব্লকের ভিতর কোডগুলো রেখে ফাংশন তৈরি করা হয়। ফাংশনের সাধারণ ফরম্যাট হলো-
function functionname()
{
block of statements;
return;
}
যেমন আমরা নিচের মতো করে display_logo() ফাংশনটি তৈরি করতে পারি-
display_logo() লিখে স্ক্রিপ্টের যে কোন জায়গায় ফাংশনটিকে কল করে লোগোটি ডিসপ্লে করতে পারি। ফাংশন ব্লকের শেষে দেয়া return স্টেটমেন্ট ফাংশনটিকে থামিয়ে দেয় এবং মূল স্ক্রিপ্টে ফিরে যায়।
ফাংশনে ভ্যারিয়েবলের ব্যবহার
ফাংশনে ভ্যারিয়েবল তৈরি ও ব্যবহার করা যায়। এধরনের ভ্যারিয়েবলকে ফাংশনে লোকাল ভ্যারিয়েবল বলা হয়। এই লোকাল ভ্যারিয়েবল ফাংশনের বাইরে কাজ করবে না। সেই নির্দিষ্ট ফাংশনটির বাইরে স্ক্রিপ্টের অন্য কোথাও লোকাল ভ্যারিয়েবলকে কল করা বা ব্যবহার করা যাবে না। ফাংশনে আরেক ধরনের ভ্যারিয়েবল আছে যাকে বলা হয় গ্লোবাল (global) ভ্যারিয়েবল। গ্লোবাল ভ্যারিয়েবল ফাংশনের বাইরে বা স্ক্রিপ্টের যে কোথাও কল করা যাবে। এজন্য গ্লোবাল স্টেটমেন্ট ব্যবহার করতে হবে। উদাহরণটিতে $name ভ্যারিয়েবল দিয়ে ফাংশনটি তৈরি করা হয়েছে-
এই স্টেটমেন্টগুলো কোন আউটপুট তৈরি করবে না। ইকো স্টেটমেন্টের $name ভ্যারিয়েবল কোন ভ্যালু ধারণ করে না। কারণ ফাংশনের ভিতরে $name নামে যে ভ্যারিয়েবলটি এসাইন করা হয়েছে সেখানে ভ্যালু আছে, কিন্তু ভ্যারিয়েবলটিকে ইকো করা হয়েছে ফাংশনের বাইরে। ভ্যারিয়েবলটি ফাংশনে লোকাল ভ্যারিয়েবল হিসেবে ব্যবহৃত হওয়ায় স্ক্রিপ্ট কোন আউটপুট তৈরি করেনি।
গ্লোবাল স্টেটমেন্টের মাধ্যমে ভ্যারিয়েবল তৈরি করে সেটি ফাংশনের বাইরে কল করে ব্যবহার করা যায়। নিচের স্টেটমেন্টগুলোতেও একই ফাংশনে গ্লোবাল স্টেটমেন্ট ব্যবহার করা হয়েছে-
ফাংশনের প্রথমেই ভ্যারিয়েবলটিকে গ্লোবাল করে নিতে হবে। ভ্যারিয়েবল এসাইনমেন্ট স্টেটমেন্টে global ব্যবহার করলে ফাংশন কোন আউটপুট দিবে না। উপরের উদাহরণটিতে $name = স্টেটমেন্টে global স্টেটমেন্ট ব্যবহার করলে ফাংশনটি সঠিকভাবে কাজ করবে না।
একইভাবে ভ্যারিয়েবল ছাড়া ফাংশনের বাইরের একটি সাধারণ ভ্যারিয়েবল ফাংশনের ভিতরে কাজ করে না। যেমন নিচের স্টেটমেন্টটি দেখুন-
$first_name = “John”;
$last_name = “Smith”;
function format_name()
{
global $first_name, $last_name;
$name = $last_name.”, “.$first_name;
echo “$name”;
}
format_name();
format_name(); এই ফাংশনটিও সঠিকভাবে কাজ করবে না। কারণ কোডে কোন global স্টেটমেন্ট নাই। ফাংশনের ভিতরের $last_name ও $first_name এবং বাইরের $last_name ও $first_name কে স্ক্রিপ্ট ভিন্ন ভাবে দেখে। তাই পিএইচপি আউটপুটে একটি , (কমা) দেখায়। তাই ফাংশনটি সঠিকভাবে কাজ করার জন global স্টেটমেন্ট ব্যবহার করার প্রয়োজন রয়েছে।
মুসলমানের হাসি বইটি রকমারি.কম থেকে কিনুন • মুসলমানের হাসি বইটি বইবাজার.কম থেকে কিনুন • মুসলমানের হাসি বইটি কিতাবঘর.কম থেকে কিনুন • মুসলমানের হাসি বইটি ইসলামিক বইঘর থেকে কিনুন • মুসলমানের হাসি বইটি ইত্যাদিশপ থেকে কিনুন
⭐ ⭐ ⭐ আপনি জানেন কী? > মানুষের মস্তিষ্কের ৭৫% পানি! > একটি জীবন্ত গাছের ৭৫%-ই পানি! > একজন ব্যক্তি খাবার ছাড়া প্রায় একমাস বেঁচে থাকতে পারেন, কিন্তু পানি ছাড়া বাঁচতে পারবেন মাত্র এক সপ্তাহ। >>> জানুন পানি নিয়ে কিছু চমকপ্রদ ও মজার তথ্য
বিশেষ কথা
এই ওয়েব সাইট থেকে অনেক বই free pdf download করার সুযোগ রাখা হয়েছে। তবে তিলটনি.কম সবসময়ই বই কিনে পড়ার জন্য উৎসাহিত করে। ইবুক ফ্রি পিডিএফ ডাউনলোড করলে লেখকগণ নিরুৎসাহিত হবেন। প্রকাশনা শিল্পের সাথে সংশ্লিষ্ট সকলে ক্ষতিগ্রস্ত হবেন। ভবিষ্যতে আরো বই লেখার ক্ষেত্রে আগ্রহ হারিয়ে ফেলবেন লেখকগণ। তাই পিডিএফ ডাউনলোড তিলটনি.কমও নিরুৎসাহিত করে। তবে, যাদের প্রকৃতই আর্থিক সমস্যা রয়েছে, তাদের জন্য এখানে পিডিএফ ডাউনলোডের ব্যবস্থা রাখা রয়েছে। তিলটনি আন্তরিকভাবে প্রত্যাশা করে, যাদের সামর্থ রয়েছে তারা যেন ক্রয় করে বই পড়েন। সেটা অনলাইন হোক আর প্রকাশনী থেকে হোক। সেজন্য এখানে অনলাইন থেকে ক্রয় করার তথ্য রাখা হয়েছে।
কিতাব মুসলমানের হাসি | মুসলমানের হাসি সব খন্ড pdf | মুসলমানের হাসি ২য় খন্ড | মুসলমানের হাসি গল্প | মুসলমানের হাসি ২য় খন্ড pdf | মুসলমানের হাঁসি | আশরাফ আলী থানভী বই pdf | মুসলমানের হাসি বই ডাউনলোড | মুসলমানের হাসি ২য় খন্ড | মুসলমানের হাসি সব খন্ড pdf | মুসলমানের হাসি ২য় খন্ড pdf | Musolmaner hasi | মুসলমানের হাঁসি | আশরাফ আলী থানভী বই pdf | আশরাফ আলী থানভী জীবনী pdf | musolmaner hasi pdf download | islamic book pdf | islamic books pdf | islamic novel pdf | pdf book download islamic | ramadan bangla book pdf | dr ragib sarjani pdf book |
পিডিএফ ডাউনলোড সম্পর্কিত একটি বিষয়
তিলটনি.কম এ যেসকল বইয়ের পিডিএফ লিংক দেয়া হয়েছে, সেগুলো থেকে সহজে ডাউনলোড করে নিতে পারবেন। এগুলো মধ্যে অনেক বই-ই পাসওয়ার্ড প্রোটেক্টেড। এ সকল বই মোবাইল, ট্যাব, কম্পিউটার ইত্যাদি ডিভাইসে সহজেই পড়া যাবে। কিন্তু কেউ প্রিন্ট করতে চাইলে বা অন্য কোন কাজে ব্যবহার করতে চাইলে সেক্ষেত্রে সমস্যার সম্মুখীন হতে পারেন। তাই ডাউনলোড রিকুয়েস্ট দিলে আন-প্রোটেক্টেড ফাইল সরবরাহ করা হবে, যা সহজেই প্রিন্ট করা বা অন্য কোন কাজে ব্যবহার করতে পারেন।
বেহেশতী জেওর বইটি রকমারি.কম থেকে কিনুন • বেহেশতী জেওর বইটি বইবাজার.কম থেকে কিনুন • বেহেশতী জেওর বইটি কিতাবঘর.কম থেকে কিনুন • বেহেশতী জেওর বইটি ইসলামিক বইঘর থেকে কিনুন
গুগল ড্রাইভ থেকে ডাউনলোড করার নির্দেশনা
গুগল ড্রাইভ থেকে ডাউনলোড করার জন্য লিংকটিতে ক্লিক করলে গুগল ড্রাইভ ফাইলটি এক্সেস করার জন্য অনুমতি নিতে বলবে (You need access! Ask for access, or switch to an account with access.)। সেটার নিচে লেখা নীল বাটনটিতে ক্লিক করলে ড্রাইভ রিকুয়েস্ট পাঠিয়ে দিবে (Request Sent! You’ll get an email letting you know if the file is shared with you)। এরপর যতদ্রুত সম্ভব আপনাকে এক্সেস দিয়ে দেওয়া হবে, যাতে করে আপনি সহজেই ফাইলটি ডাউনলোড করে নিতে পারেন।
⭐ ⭐ ⭐ একজন মুসলমান হিসেবে কিছু বই আপনার সংগ্রহে রাখা এবং পড়া উচিত। আপনার সংগ্রহে থাকলে আপনি নিজে পড়বেন, পরিবারের লোকজন পড়বে। এমনকি আপনার বাসায় আগত মেহমান-আত্মীয় স্বজনরাও পড়বে। সে জন্য এই বইগুলো একজন মুসলিম হিসেবে অবশ্যই আপনার সংগ্রহে রাখা এবং পড়া উচিত। জেনে নিন বইগুলোর নাম…
বিশেষ কথা
এই ওয়েব সাইট থেকে অনেক বই free pdf download করার সুযোগ রাখা হয়েছে। তবে তিলটনি.কম সবসময়ই বই কিনে পড়ার জন্য উৎসাহিত করে। ইবুক ফ্রি পিডিএফ ডাউনলোড করলে লেখকগণ নিরুৎসাহিত হবেন। প্রকাশনা শিল্পের সাথে সংশ্লিষ্ট সকলে ক্ষতিগ্রস্ত হবেন। ভবিষ্যতে আরো বই লেখার ক্ষেত্রে আগ্রহ হারিয়ে ফেলবেন লেখকগণ। তাই পিডিএফ ডাউনলোড তিলটনি.কমও নিরুৎসাহিত করে। তবে, যাদের প্রকৃতই আর্থিক সমস্যা রয়েছে, তাদের জন্য এখানে পিডিএফ ডাউনলোডের ব্যবস্থা রাখা রয়েছে। তিলটনি আন্তরিকভাবে প্রত্যাশা করে, যাদের সামর্থ রয়েছে তারা যেন ক্রয় করে বই পড়েন। সেটা অনলাইন হোক আর প্রকাশনী থেকে হোক। সেজন্য এখানে অনলাইন থেকে ক্রয় করার তথ্য রাখা হয়েছে।
বেহেশতী জেওর ১১ খন্ড | বেহেশতী জেওর এমদাদিয়া লাইব্রেরী pdf | বেহেশতী জেওর ১১ খন্ড pdf | বেহেশতী জেওর উর্দু | বেহেশতী জেওর pdf | বেহেশতী জেওর ১ম-১০ম খন্ড pdf download | বেহেশতী জেওর উর্দু pdf | বেহেশতী জেওর ফ্রি ডাউনলোড | বেহেশতী জেওর ১১ খন্ড pdf | বেহেশতী জেওর এমদাদিয়া লাইব্রেরী pdf | বেহেশতী জেওর বাংলা | বেহেশতী জেওর ১ম-১০ম খন্ড pdf download | বেহেশতী জেওর ফ্রি ডাউনলোড | বেহেশতী জেওর বাংলা ১ম ১০ম খন্ড pdf download | বেহেশতী জেওর উর্দু pdf | Beheshti jeor bangla pdf | bahishti zewar pdf english | www free download bahishti zewar pdf | bahishti zewar exposed | bahishti zewar meaning | bahishti zewar criticism | masail-e-bahishti zewar pdf download | bahishti zewar book in hindi pdf | sunni bahishti zewar english pdf | ramadan bangla book pdf | islamic book pdf | islamic novel pdf | pdf book download islamic
পিডিএফ ডাউনলোড সম্পর্কিত একটি বিষয়
তিলটনি.কম এ যেসকল বইয়ের পিডিএফ লিংক দেয়া হয়েছে, সেগুলো থেকে সহজে ডাউনলোড করে নিতে পারবেন। এগুলো মধ্যে অনেক বই-ই পাসওয়ার্ড প্রোটেক্টেড। এ সকল বই মোবাইল, ট্যাব, কম্পিউটার ইত্যাদি ডিভাইসে সহজেই পড়া যাবে। কিন্তু কেউ প্রিন্ট করতে চাইলে বা অন্য কোন কাজে ব্যবহার করতে চাইলে সেক্ষেত্রে সমস্যার সম্মুখীন হতে পারেন। তাই ডাউনলোড রিকুয়েস্ট দিলে আন-প্রোটেক্টেড ফাইল সরবরাহ করা হবে, যা সহজেই প্রিন্ট করা বা অন্য কোন কাজে ব্যবহার করতে পারেন।
এই ওয়েব সাইট থেকে অনেক বই free pdf download করার সুযোগ রাখা হয়েছে। তবে তিলটনি.কম সবসময়ই বই কিনে পড়ার জন্য উৎসাহিত করে। ইবুক ফ্রি পিডিএফ ডাউনলোড করলে লেখকগণ নিরুৎসাহিত হবেন। প্রকাশনা শিল্পের সাথে সংশ্লিষ্ট সকলে ক্ষতিগ্রস্ত হবেন। ভবিষ্যতে আরো বই লেখার ক্ষেত্রে আগ্রহ হারিয়ে ফেলবেন লেখকগণ। তাই পিডিএফ ডাউনলোড তিলটনি.কমও নিরুৎসাহিত করে। তবে, যাদের প্রকৃতই আর্থিক সমস্যা রয়েছে, তাদের জন্য এখানে পিডিএফ ডাউনলোডের ব্যবস্থা রাখা রয়েছে। তিলটনি আন্তরিকভাবে প্রত্যাশা করে, যাদের সামর্থ রয়েছে তারা যেন ক্রয় করে বই পড়েন। সেটা অনলাইন হোক আর প্রকাশনী থেকে হোক। সেজন্য এখানে অনলাইন থেকে ক্রয় করার তথ্য রাখা হয়েছে।
এছাড়াও এসংক্রান্ত যেকোন পরামর্শ, মতামত, অভিযোগ থাকলে তিলটনি.কম’র সাথে যোগাযোগ (ই-মেইল: info@tiltony.com) করার জন্য আন্তরিকভাবে অনুরোধ জানানো যাচ্ছে।
কন্ডিশনাল স্টেটমেন্ট নির্দিষ্ট কোন শর্ত সত্য হলে একটি ব্লকের স্টেটমেন্টগুলোকে এক্সিকিউট করে। এখানে দুই ধরণের কন্ডিশনাল স্টেটমেন্ট রয়েছে-
if স্টেটমেন্টঃ একটি শর্ত তৈরি করে এবং তা পরীক্ষা করে। শর্তটি সত্য হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হয়।
switch স্টেটমেন্টঃ কতগুলো বিকল্প শর্ত তৈরি করে। প্রত্যেকটি শর্তকে পরীক্ষা করে এবং সবচেয়ে যোগ্যতম শর্তের স্টেটমেন্টটি এক্সিকিউট করে।
if স্টেটমেন্ট
নির্দিষ্ট কোন শর্ত সত্য হলে if স্টেটমেন্ট একটি স্টেটমেন্ট ব্লককে এক্সিকিউট করে। এখানে আমরা সঠিক ফরম্যাটে if স্টেটমেন্ট তৈরি, অসত্য কোন শর্তের if স্টেটমেন্ট তৈরি ও একটি if স্টেটমেন্টের ভিতর অন্য if স্টেটমেন্টের শর্ত দেয়া নিয়ে আলোচনা করব। নিচের উদাহরণটি একটি if স্টেটমেন্টের সাধারণ ফরম্যাট-
if ( condition )
{
block of statements
}
elseif ( condition )
{
block of statements
}
else
{
block of statements
}
এই স্টেটমেন্টটিতে তিনটি অংশ রয়েছে-
if: এই অংশটি অত্যাবশ্যক। একটি ifই গ্রহণযোগ্য। এটা শর্তকে পরীক্ষা করে।
শর্তটি সত্য হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে। স্টেটমেন্ট ব্লকটি এক্সিকিউট হওয়ার পর স্ক্রিপ্ট পরবর্তী শর্তে চলে যায়। অর্থাৎ স্টেটমেন্টে কোন elseif অথবা else সেকশন থাকলে স্ক্রিপ্ট সেখানে চলে যায়।
শর্তটি সত্য না হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে না। স্টেটমেন্টে কোন elseif অথবা else সেকশন থাকলে স্ক্রিপ্ট সেখানে চলে যায়।
elseif: এই অংশটি ঐচ্ছিক। চাইলে এক বা তারও অধিক elseif ব্যবহার করা যাবে। elseifও শর্ত পরীক্ষা করে।
শর্তটি সত্য হলে স্টেটমেন্টটি এক্সিকিউট হবে। এরপর স্ক্রিপ্ট পরবর্তী নির্দেশনায় চলে যায়। যদি আরও elseif থাকে স্ক্রিপ্ট সেখানে চলে যায়।
শর্তটি সত্য না হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে না। স্টেটমেন্টে কোন elseif অথবা else সেকশন থাকলে স্ক্রিপ্ট সেখানে চলে যায়।
else: এই অংশটিও ঐচ্ছিক। একটি মাত্র else ব্যবহার করা যাবে। এই অংশটি কোন শর্ত পরীক্ষা করে না। কিন্তু স্টেটমেন্ট ব্লককে এক্সিকিউট করে। if সেকশন এবং সবগুলো elseif সেকশনই যখন মিথ্যা হয়ে যায় তখন স্ক্রিপ্ট else সেকশনে প্রবেশ করে।
উদাহরনে একটি if স্টেটমেন্ট দেখানো হলো। স্টেটমেন্টটি স্কোর পরীক্ষা করবে এবং শিক্ষার্থীদের প্রাপ্ত স্কোর অনুযায়ী গ্রেড এবং ছোট একটি বার্তা দেখাবে। এই স্টেটমেন্টটিতে একটি if স্টেটমেন্টের তিনটি (if, elseif ও else) অংশই নিম্নরুপভাবে ব্যবহৃত হয়েছে-
$score এর ভ্যালুকে 92 এর সাথে তুলনা করা হয়েছে। স্কোর 92 এর চেয়ে বড় হলে গ্রেড হবে A আর বার্তা আসবে Excellent! এবং স্ক্রিপ্ট সরাসরি ইকো স্টেটমেন্টে চলে যাবে। স্কোর 92 অথবা এর কম হলে শর্তটি সত্য না হওয়ায় $grade ও $message এ স্ক্রিপ্ট যাবে না। চলে যাবে পরবর্তী অর্থাৎ elseif সেকশনে।
$score এর ভ্যালুকে 92 থেকে 83 এর মধ্যে তুলনা করা হয়েছে। স্কোরটি 92 এর সমান অথবা এর কম এবং 83 এর বড় হলে $grade ও $message কাজ করবে এবং স্ক্রিপ্ট ইকো স্টেটমেন্টে চলে যাবে। স্কোরটি 83 অথবা কম হলে স্টেটমেন্টটি সত্য না হওয়ায় $grade ও $message সেট হবে না এবং স্ক্রিপ্ট পরবর্তী elseif সেকশনে চলে যাবে।
$score এর ভ্যালুকে 83 থেকে 74 এর মধ্যে তুলনা করা হয়েছে। স্কোরটি 83 এর সমান অথবা এর কম এবং 74 এর বড় হলে $grade ও $message কাজ করবে এবং স্ক্রিপ্ট ইকো স্টেটমেন্টে চলে যাবে। স্কোরটি 74 অথবা কম হলে স্টেটমেন্টটি সত্য না হওয়ায় $grade ও $message সেট হবে না এবং স্ক্রিপ্ট পরবর্তী elseif সেকশনে চলে যাবে।
$score এর ভ্যালুকে 74 থেকে 62 এর মধ্যে তুলনা করা হয়েছে। স্কোরটি 74 এর সমান অথবা এর কম এবং 62 এর বড় হলে $grade ও $message কাজ করবে এবং স্ক্রিপ্ট ইকো স্টেটমেন্টে চলে যাবে। স্কোরটি 62 অথবা কম হলে স্টেটমেন্টটি সত্য না হওয়ায় $grade ও $message সেট হবে না এবং স্ক্রিপ্ট পরবর্তী elseif সেকশনে চলে যাবে।
সবগুলো শর্তই যখন মিথ্যা হয়ে যাবে তখন গ্রেড F এ সেট হবে এবং Bad Result! বার্তাটি ইকো করবে।
কোন if কন্ডিশনাল স্টেটমেন্টে একটিমাত্র শর্ত বা স্টেটমেন্ট থাকলে দ্বিতীয় বন্ধনী ব্যবহার না করলেও চলে। যেমন উপরের উদাহরণটিতে-
if ($grade > 92 )
{
$grade = “A”;
}
এভাবে লিখা যায়-
if ($grade > 92 )
$grade = “A”;
এতে টাইপিংয়ের সময়ও বাঁচে এবং স্ক্রিপ্টটি সহজবোধ্য হয়। কিন্তু একাধিক স্টেটমেন্ট ব্যবহারের ক্ষেত্রে অবশ্যই দ্বিতীয় বন্ধনী ব্যবহার করতে হবে।
না বোধক বা নেগেটিভ if স্টেটমেন্ট
if স্টেটমেন্টে শর্তের সামনে ! চিহ্ন ব্যবহার করে নেগেটিভ স্টেটমেন্ট লেখা হয়। অর্থ্যাৎ কন্ডিশনটি মিথ্যা হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে। উদাহরণস্বরুপ নিচের স্টেটমেন্টটি দেখতে পারি-
if (preg_match(“/^S[a-z]*/”,$string))
{
$list[]=$string.”\n”;
}
এই স্টেটমেন্টে শর্ত হিসেবে একটি প্যাটার্ন দেয়া হয়েছে। স্ট্রিংটির সাথে প্যাটার্নের মিল হলে শর্তটি সত্য হবে এবং স্টেটমেন্টটি এক্সিকিউট হবে। এখন শর্তটির শুরুতে একটি ! চিহ্ন দিলে এর কাজ যথেষ্টভাবে বিপরীতমুখী হয়ে যাবে। এক্ষেত্রে উপরের উদাহরণটি আমরা এভাবে উপস্থাপন করতে পারি-
if (!preg_match(“/^S[a-z]*/”,$string)
{
$list[]=$string.”\n”;
}
এখানে যে স্ট্রিংগুলো প্যাটার্নটির সাথে মিলবে না সেগুলোকেই এ্যারেতে ধারণ করবে।
if স্টেটমেন্টকে একত্রীকরণ
একটি if কন্ডিশনাল স্টেটমেন্টের ভিতর অন্য আরেকটি কন্ডিশনাল স্টেটমেন্ট থাকতে পারে। উদাহরণস্বরুপ আপনার এমন সব ক্রেতার সাথে যোগাযোগ করা প্রয়োজন যারা চট্টগ্রামে বসবাস করে। তাদের মধ্যে যার ই-মেইল ঠিকানা আছে তাদের ই-মেইল ও যাদের ই-মেইল ঠিকানা নেই তাদের চিঠি পাঠানো হবে। নিচের স্টেটমেন্টটির মাধ্যমে এই কাজটি করা যায়।
এই স্টেটমেন্টটি প্রথমে পরীক্ষা করে ক্রেতা চট্টগ্রামে বসবাস করে কিনা। ক্রেতা চট্টগ্রামের বাসিন্দা হলে স্ক্রিপ্ট ই-মেইল ঠিকানা খোঁজে। ই-মেইল ঠিকানা না পেলে যোগাযোগের পদ্ধতি চিঠিতে সেট করে। আর প্রথমেই ক্রেতা চট্টগ্রামের বাসিন্দা না হলে স্ক্রিপ্ট else সেকশনে চলে যায় এবং বলে দেয় যোগাযোগ করার প্রয়োজন নেই।
সুইচ স্টেটমেন্টের ব্যবহার
কন্ডিশনাল স্টেটমেন্টে বা এধরণের কন্ডিশনাল স্টেটমেন্ট নিয়ে কাজ করার প্রয়োজন হলে বেশিরভাগ ক্ষেত্রে if স্টেটমেন্টই খুব ভাল কাজ করে এবং এটিই বহুল ব্যবহৃত। তবে কিছু কিছু ক্ষেত্রে এমন হতে পারে যে আপনার অনেকগুলো কন্ডিশন রয়েছে এবং প্রত্যেকটি কন্ডিশনের জন্য আলাদা স্টেটমেন্ট এক্সিকিউট করতে চান। উদাহরণস্বরূপ আপনি যে স্ক্রিপ্টটি তৈরি করছেন সেটি কোন প্রতিষ্ঠানের সেলস ট্যাক্স হিসাব করবে। কিভাবে আপনি ভিন্ন ভিন্ন বিষয় বা এলাকার ট্যাক্স রেট নিয়ে কাজ করবেন? এই পরিস্থিতির জন্যই সুইচ (switch) স্টেটমেন্টটি ডিজাইন করা হয়েছে।
সুইচ স্টেটমেন্ট একটি ভ্যারিয়েবলের ভ্যালুকে পরীক্ষা করে এবং ওই ভ্যারিয়েবলের সাথে মিলে যাওয়া ভ্যালুর জন্য স্টেটমেন্ট ব্লক এক্সিকিউট করে। একটি সুইচ স্টেটমেন্টের ফরম্যাট নিচে দেয়া হলো-
switch ( $variablename )
{
case value :
block of statements;
break;
case value :
block of statements;
break;
...
default:
block of statements;
break;
}
সুইচ স্টেটমেন্টটি $variablename এর ভ্যালুকে পরীক্ষা করে। তারপর স্ক্রিপ্ট case সেকশনে চলে যায় এবং স্টেটমেন্টগুলোকে এক্সিকিউট করে যতক্ষণ পর্যন্ত সে কোন break স্টেটমেন্ট না পায় অথবা স্টেটমেন্টের শেষে না পৌছায়। $variablename এর ভ্যালুর সাথে ম্যাচিং না হলে স্ক্রিপ্ট default সেকশনে চলে যায়। স্টেটমেন্টে যতগুলো প্রয়োজন case সেকশন ব্যবহার করা যাবে। আর default সেকশনটি ঐচ্ছিক। নিচের স্টেটমেন্টটি বিভিন্ন এলাকার সেলস ট্যাক্সের হারকে সেট করে।
ঢাকার জন্য সেলস ট্যাক্সের হার 0, চট্টগ্রামের জন্য ট্যাক্সের হার শতকরা 100 ভাগ এবং অন্যান্য সকল এলাকার জন্য শতকরা 50 ভাগ। স্টেটমেন্ট প্রথমে $custState এর ভ্যালুকে দেখে এবং মিলে যাওয়া ভ্যালুর সেকশনে চলে যায়। যেমন $custState এর মান Rajshahi হলে স্ক্রিপ্ট default সেকশনকে এক্সিকিউট করে এবং ট্যাক্সের হারকে 0.5 এ সেট করে। এভাবে স্ক্রিপ্ট সেলস ট্যাক্সের হার হিসাব করে।
প্রত্যেকটি case সেকশনের শেষে break স্টেটমেন্ট অবশ্যই ব্যবহার করতে হবে। কোন সেকশনে break না থাকলে স্ক্রিপ্ট যতক্ষণ না কোন break স্টেটমেন্ট পাবে অথবা স্টেটমেন্টটি শেষ না হবে ততক্ষণ স্টেটমেন্টগুলো একাধারে এক্সিকিউট করতে থাকে।
লুপ
স্ক্রিপ্টে কোন নির্দিষ্ট স্টেটমেন্ট ব্লকের পুনরাবৃত্তি ঘটাতে অর্থাৎ একই কোড ব্লক একটি সারিতে বারবার চালাতে লুপ ব্যবহার করা হয়। লুপ নির্দিষ্ট বার অর্থাৎ যতবার সেট করে দেয়া হবে ততবার পুনরাপবৃত্তি ঘটবে। উদাহরণস্বরূপ একটি লুপ বাংলাদেশের সবগুলো জেলার নামকে ইকো করবে। লুপটিতে 64 বার পুনরাবৃত্তি করতে বা চলতে হবে। এমনও হতে পারে নির্দিষ্ট কোন শর্তে না পৌছা পর্যন্ত লুপটি চলতে থাকবে। যেমন একটি লুপ কোন একটি ডিরেক্টরিতে রাখা সবগুলো ফাইলের নামকে ইকো করবে সেখানে যতগুলো ফাইলই থাকুক না কেন। পিএইচপিতে তিন ধরনের লুপ রয়েছে।
for লুপ একটি হিসাব বা সংখ্যা সেট করে। স্টেটমেন্টের পুনরাবৃত্তি ঘটায় যতক্ষণ না ওই হিসাব বা সংখ্যায় না পৌছায়।
while লুপ একটি শর্ত তৈরি করে এবং শর্তটি পরীক্ষা করে। শর্ত সত্য হলে শর্তটি মিথ্যা হওয়ার আগ পর্যন্ত স্টেটমেন্ট ব্লকটিকে চালাতে থাকে।
do..while লুপ একটি শর্ত জুড়ে দেয়া হয় ও একটি স্টেটমেন্ট ব্লককে এক্সিকিউট করে। এরপর শর্তটি পরীক্ষা করে, সত্য হলে স্টেটমেন্ট ব্লকটি পুনরাবৃত্তি ঘটাতে থাকে যতক্ষণ না কন্ডিশনটি মিথ্যা হয়।
নিচে প্রত্যেকটি লুপ সম্বন্ধে বিস্তারিত আলোচনা করা হলো-
for লুপের ব্যবহার
লুপ সাধারণত গণনা বা হিসাব করার কাজে ব্যবহৃত হয়। যেমন ক্রমিক নম্বর বসানো বা এই ধরণের কাজ। কাউন্টারে প্রতিবার যখন স্টেটমেন্টটি এক্সিকিউট হবে শুরুর ভ্যালু, শেষ ভ্যালু এবং কি হারে বৃদ্ধি ঘটবে তা সেট করে দিতে হবে। for লুপের সাধারণ ফরম্যাট-
for (startingvalue;endingcondition;increment)
{
block of statements;
}
একটি স্টেটমেন্টে নিচের ভ্যালুগুলো পূরণ করতে হবে-
startingvalue হলো যেখান থেকে গণনাটি শুরু হবে। যেমন স্টেটমেন্টটিতে $i=1 হলে $i ভ্যারিয়েবলটির মান সমান 1 হবে। অর্থাৎ গণনা 1 থেকে শুরু হবে।
endingcondition একটি স্টেটমেন্ট যা শেষ ভ্যালুকে নির্ধারণ করে দেয়া হয়। যতক্ষণ এই স্টেটমেন্টটি সত্য থাকে ততক্ষণ লুপটি চলতে থাকে। স্ক্রিপ্ট যখন দেখে স্টেটমেন্টটি মিথ্যা তখনই লুপটি বন্ধ হয়ে যায়। যেমন $i<10 স্টেটমেন্টটিতে লুপের শেষ ভ্যালু নির্ধারণ করা হয়েছে 10। লুপটি চলতে চলতে যখন $i এর মান 10 হয় তখনই লুপটি বন্ধ হয়ে যায়। অর্থাৎ $i=10 হয়ে গেলে শর্তটি আর সত্য থাকে না। $i<$size এর মতো স্টেটমেন্টে ভ্যারিয়েবলও অন্তর্ভুক্ত করা যায়।
increment: এই স্টেটমেন্ট হিসাব সংখ্যাটির বৃদ্ধি ঘটায়। যেমন $i++ স্টেটমেন্ট প্রত্যেকটি ব্লকের শেষে 1 করে যোগ করে। $i=+1 অথবা $i– এই ধরণের ইনক্রিমেন্ট স্টেটমেন্ট ব্যবহার করা হয়।
for ($i=1;$i<=3;$i++)
{
echo “$i. Hello World!<br />”;
}
স্টেটমেন্টগুলো এরকম আউটপুট দিবে-
1. Hello World!
2. Hello World!
3. Hello World!
for লুপকে একত্রীকরণ
লুপকে ডাইনামিক করতে অর্থাৎ জটিল কাজের প্রয়োজনে একটি লুপের ভিতর আরো এক বা একাধিক লুপ সেট করা হয়। যেমন আমরা গুণ করার মাধ্যমে 1 থেকে 9 পর্যন্ত নামতাগুলো দেখাতে পারি। তার জন্য নিচের স্টেটমেন্টটি লিখতে হবে-
লুপের গঠনটি আসলে খুবই সাধারণ এবং এটি দিয়ে লুপ সংক্রান্ত যে কোন উদ্দেশ্যেই সফল হওয়া যাবে। ইতিপূর্বে আমরা মৌলিক লুপ সম্বন্ধে জেনেছি। নিচে আমরা সাধারণ লুপের ফরম্যাটটি দেখব-
for (beginning statements; conditional statements; ending statements)
{
block of statements;
}
এই for লুপটি অনেকগুলো নিয়ম মেনে চলে। যেমন-
beginning statements লুপের শুরুতেই একবার এক্সিকিউট হয়।
The conditional statements প্রত্যেকটি লুপের পুনরাবৃত্তির জন্য স্ক্রিপ্ট কন্ডিশনকে পরীক্ষা করে। এটা হবে ভ্যালুর বৃদ্ধির হার।
প্রতিটি স্টেটমেন্টের সেকশন ; (সেমিকোলন) দিয়ে আলাদা করা হয়। প্রত্যেকটি সেকশনে প্রয়োজনীয় সংখ্যক স্টেটমেন্ট ব্যবহার করা যাবে। প্রতিটিতে কমা ব্যবহার করতে হবে।
এই উদাহরণটিতে $i=0 ও $j=1 হলো বিগেনিং স্টেটমেন্ট, $t<=4 হলো কন্ডিশনাল স্টেটমেন্ট এবং $i++ ও $j++ হলো এন্ডিং স্টেটমেন্ট।
স্টেটমেন্টগুলোর আউটপুট হবে এরকম-
1
3
5
এই লুপটি যে ক্রমে এক্সিকিউট হয়েছে-
বিগেনিং সেকশনের দুটি স্টেটমেন্ট এক্সিকিউট হয়েছে। $i তে 0 ও $j তে 1 সেট করা হয়েছে।
কন্ডিশনাল সেকশনের স্টেটমেন্টটি মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? হ্যাঁ, তাই স্টেটমেন্টটি সত্য। লুপটির এক্সিকিউশন চলতে থাকে।
স্টেটমেন্ট ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হয়েছে। $i যোগ $j সমান $t, যা 0+1 সমান 1। তারপর ইকো হয়ে আউটপুট হয়েছে।
এন্ডিং সেকশনের দুটি স্টেটমেন্ট এক্সিকিউট হয়েছে। $i ও $j উভয়টিতে 1 বৃদ্ধি বা ইনক্রিমেন্ট হয়েছে। তাই $i সমান 1 ও $j সমান 2।
কন্ডিশনাল সেকশন মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? এই অবস্থানে সমান, তাই স্টেটমেন্টটি সত্য। সুতরাং লুপটি এক্সিকিউট হতে থাকবে।
স্টেটমেন্ট ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হয়েছে। এখন $t সমান 3 ($i যোগ $i যা 1+2)। $t ইকো হয়েছে যার আউটপুট 3।
এন্ডিং সেকশনের দুটি স্টেটমেন্ট হয়েছে। $i ও $j উভয়টিতেই 1 বৃদ্ধি পেয়েছে। সুতরাং $i সমান 2 ও $j সমান 3।
কন্ডিশনাল সেকশনটি মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? এখানে সমান 3 হওয়ায় স্টেটমেন্টটি সত্য। সুতরাং লুপটি এক্সিকিউট হতে থাকে।
স্টেটমেন্ট ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হয়েছে। এখন $t সমান 5 ($i যোগ $i যা 2+3)। $t ইকো হয়েছে যার আউটপুট 5।
এন্ডিং সেকশনের দুটির স্টেটমেন্ট আবার এক্সিকিউট হয়েছে। $i ও $j দুটিতেই 1 ইনক্রিমেন্ট হয়েছে। তাই $i সমান 2 ও $j সমান 3।
কন্ডিশনাল স্টেটমেন্ট আবার মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? এই অবস্থানে $t এর মান 5 হওয়ায় স্টেটমেন্টটি আর সত্য রইল না। লুপটি আর চলবে না, বন্ধ হয়ে গেছে। স্ক্রিপ্ট লুপটির পরের অন্য স্টেটমেন্টে চলে যাবে।
while লুপের ব্যবহার
একটি while লুপ যতক্ষণ পর্যন্ত নির্দিষ্ট শর্তটি সত্য থাকে ততক্ষণই পুনরাবৃত্তি হতে থাকে। লুপটি নিচের মতো কাজ করে-
একটি শর্ত সেট করা হয়।
প্রতিটি লুপের শুরুতে শর্তটি পরীক্ষা করা হয়।
কন্ডিশনটি সত্য হলে লুপের পুনরাবৃত্তি ঘটতে থাকে। শর্তটি মিথ্যা হলে লুপটি থেমে যায়।
while লুপের সাধারণ ফরম্যাট
while ( condition )
{
block of statements
}
নিচের স্টেটমেন্টগুলো একটি while লুপ তৈরি করে-
$fruit = array (“orange”, “apple”, “grape”);
$testvar = “no”;
$k = 0;
while ( $testvar != “yes” )
{
if ($fruit[$k] == “apple” )
{
$testvar = “yes”;
echo “apple\n”;
}
else
{
echo “$fruit[$k] is not an apple\n”;
}
$k++;
}
লুপটি চালালে নিচের মতো আউটপুট ব্রাউজারে ডিসপ্লে করবে-
লুপটি শুরু হওয়ার আগে ভ্যারিয়েবল সেট করা হয়েছে। $fruit একটি এ্যারে যার তিনটি ভ্যালু রয়েছে। $testvar একটি ভ্যারিয়েবল যার ভ্যালু “no”, $k একটি ভ্যারিয়েবল যার মান 0।
লুপটি পরীক্ষা করে দেখে $testvar != “yes” স্টেটমেন্টটি সত্য। $testvar এ “no” সেট করায় স্টেটমেন্টটি সত্য, তাই লুপটি চলতে থাকে।
if স্টেটমেন্টের শর্তটি পরীক্ষা করা হয়েছে। $fruit[$k] == “apple” কি সত্য? এই অবস্থানে $k সমান 0। তাই স্ক্রিপ্ট $fruit[0] পরীক্ষা করে। $fruit[0] সমান “orange” হওয়ায় স্টেটমেন্টটি মিথ্যা। সুতরাং if ব্লকের স্টেটমেন্টগুলো এক্সিকিউট না হয়ে স্ক্রিপ্ট চলে যাবে else সেকশনে।
else স্টেটমেন্টটি এক্সিকিউট হয়েছে। ব্লক “orange is not an apple” লাইনটি আউটপুট দেয়।
$k তে 1 যোগ হয়েছে। তাই $k সমান 1।
স্ক্রিপ্ট লুপের শেষে পৌছায় এবং পুনরায় while লুপের শুরুতে চলে যায়।
লুপটি পুনরায় পরীক্ষা করে দেখে $testvar != “yes” স্টেটমেন্টটি সত্য। কারন $testvar != “yes” পরিবর্তন হয়নি। এটি এখনও “no” তে সেট করা আছে। লুপটি চলতে থাকে।
if স্টেটমেন্টের শর্তটি আবার পরীক্ষা করা হয়েছে। $fruit[$k] == “apple” কি সত্য? এই অবস্থানে $k সমান ১। স্ক্রিপ্ট $fruit[1] পরীক্ষা করে। $fruit[1] সমান “apple” হওয়ায় স্টেটমেন্টটি সত্য। সুতরাং লুপটি if ব্লকে প্রবেশ করে।
if ব্লকের স্টেটমেন্টটি এক্সিকিউট হয়েছে। এই স্টেটমেন্ট দেখে $testvar সমান “yes” এবং “apple” আউটপুট দেয়। এটি আউটপুটের দ্বিতীয় লাইন।
$k তে 1 যোগ হয়েছে। তাই $k সমান 2।
স্ক্রিপ্ট লুপের শেষে পৌছায় এবং পুনরায় while লুপের শুরুতে চলে যায়।
লুপটি শেষবারের মতো $testvar != “yes” স্টেটমেন্টটি পরীক্ষা করে। $testvar != “yes” কি সত্য? $testvar পরিবর্তন হয়ে “yes” এ সেট হয়েছে। তাই এটি সত্য না হওয়ায় লুপটি থেমে যায়।
do..while লুপ
do..while লুপ while লুপের মতোই। পূর্বের মতোই এই লুপটি নির্দিষ্ট কোন শর্ত সত্য থাকা পর্যন্ত এর পুনরাবৃত্তি ঘটাতে থাকে। একটি do..while লুপের সাধারণ ফরম্যাট-
do
{
block of statements
} while ( condition );
নিচের স্টেটমেন্টটি একটি লুপ সেট করে এবং আপেল কে খুজে বের করে। পূর্বের while লুপের উদাহরণটির মতোই এটি কাজ করে।
$fruit = array ( “orange”, “apple”, “grape” );
$testvar = “no”;
$k = 0;
do
{
if ($fruit[$k] == “apple” )
{
$testvar = “yes”;
echo “apple\n”;
}
else
{
echo “$fruit[$k] is not an apple\n”;
}
$k++;
} while ( $testvar != “yes” );
যার আউটপুট হলো-
orange is not an apple
apple
while ও do..while দুটি লুপই একই ধরণের আউটপুট দেয়। দুটি লুপের মধ্যে পার্থক্য হলো শর্তগুলো যেখানে পরীক্ষা করা হয়। এমনকি শর্তটি কখনোই সত্য না হলে লুপটি কখনোই এক্সিকিউট হবে না। do..while লুপে একবারে লুপের নিচে শর্তটি পরীক্ষিত হয়। সুতরাং এখানে যদি শর্তটি সত্য না হয় তাহলেও অন্তত একবার লুপটি এক্সিকিউট হবে। উদাহরণস্বরুপ পূর্বের উদাহরণটিতে মূল শর্তে no এর পরিবর্তে yes সেট করা হয়েছে-
$testvar = “yes”;
শর্তটি প্রথমেই মিথ্যা এবং কখনোই সত্য হবে না। while লুপে এর কোন আউটপুট হয় না। do..while লুপের ক্ষেত্রে শর্তটি পরীক্ষা করার আগেই স্টেটমেন্ট ব্লকটি এক্সিকিউট হয়। তাই while লুপ কোন আউটপুট না দিলেও do..while লুপ আউটপুট দেয়।
অসীম লুপ পরিহার করা
সহজেই লুপকে এমনভাবে সেট করা যায় যা আর কখনোই থামবে না। এটা অসীম লুপ বলে। এটা পুনরাবৃত্তি ঘটতে থাকে চিরতরে। তবে সাধারণ এরকম অসীম লুপ খুব কমই তৈরি করা হয়। অনেক সময় প্রোগ্রামিং ভুলের কারণে এ ধরণের লুপ তৈরি হয়। যেমন আগের উদাহরণে লুপটি একটি পরিবর্তন করে দিলেই লুপটি একটি অসীম লুপে পরিণত হবে। যেমন-
$fruit = array (“orange”, “apple”, “grape”);
$testvar = “no”;
while ( $testvar != “yes” )
{
$k = 0;
if ($fruit[$k] == “apple” )
{
$testvar = “yes”;
echo “apple\n”;
}
else
{
echo “$fruit[$k] is not an apple\n”;
}
$k++;
}
এখানে $k = 0 স্টেটমেন্টটি লুপের বাইরে থেকে ভিতরে আনা হয়েছে। এই পরিবর্তনটি লুপটিকে অসীম লুপে পরিণত করেছে। স্ক্রিপ্টটি ব্রাউজারে নিচের আউটপুট দেখায়-
orange is not an apple
orange is not an apple
orange is not an apple
orange is not an apple
… এটি চিরতরে চলতেই থাকবে। যখনই লুপটি চলে তখন $k সমান 0 পায়। তখন $fruit[0] হয় এবং লুপটি ইকো হয়। লুপটি শেষে $k তে 1 যোগ হয়। লুপটি যখন আবার শুরু হয় $k তে আবার 0 সেট হয়। তাৎক্ষণিকভাবে এ্যারের প্রথম ভ্যালু orange তে স্ক্রিপ্ট প্রতিবার পড়ে। লুপটি কখনোই apple এবং $testvar সমান “yes” হয় না। তাই লুপটি অসীম।
পিএইচপি স্ক্রিপ্ট হলো কতগুলো নির্দেশনাযুক্ত পিএইচপি এক্সটেনশনের একটি ফাইল যা সার্ভারকে এর সেকশন বা স্টেটমেন্টগুলোকে দেখায়। স্ক্রিপ্ট উপরের দিক থেকে নির্দেশনাগুলো পড়ে এবং প্রতিটি এক্সিকিউট করে। পিএইচপি স্টেটমেন্টগুলোই হলো ইনস্ট্রাকশন বা নির্দেশনা- যা সিম্পল বা কমপ্লেক্স যে কোন ধরণেরই হতে পারে। পূ্র্ববর্তী অধ্যয়ে আমরা সিম্পল ও কমপ্লেক্স স্টেটমেন্ট নিয়ে আলোচনা করেছি। Hello World একটি সিম্পল স্টেটমেন্ট। যেমন- ডাটাবেজড ওয়েব এপ্লিকেশন তৈরি করতে যে সকল স্ক্রিপ্ট তৈরি করা হয় সেগুলোকেই সাধারণত কমপ্লেক্স স্টেটমেন্ট বলা হয়। এগুলো ডাইনামিক, এগুলো সার্ভারের মাধ্যমে ডাটাবেজ এবং ব্যবহারকারী দুইজনের সাথে কাজ করে। সহজভাবে বলতে গেলে, একসাথে একাধিক কমপ্লেক্স স্টেটমেন্টই হলো স্ক্রিপ্ট।
কমপ্লেক্স স্টেটমেন্ট এক বা একাধিক স্টেটমেন্ট বা স্টেটমেন্ট ব্লককে এক্সিকিউট করে। একটি ব্লক স্টেটমেন্ট এক বা একাধিক সিম্পল স্টেটমেন্টের একটি গ্রুপ যা দ্বিতীয় বন্ধনী দিয়ে আবদ্ধ করে রাখা হয়। পিএইচপি বন্ধনীর সমাপ্তিকে কমপ্লেক্স স্টেটমেন্টের শেষ ব্লক হিসেবে এক্সিকিউট করে।
এই অধ্যায়ে আমরা কন্ডিশনাল স্টেটমেন্ট, লুপ ও ফাংশন সম্বন্ধে আলোচনা করব।
কন্ডিশনাল স্টেটমেন্ট (conditional statement): কন্ডিশনাল স্টেটমেন্টে এক বা একাধিক শর্ত জুড়ে দেয়া হয়। শর্তগুলো সত্য হলে অর্থাৎ মিলে গেলে স্টেটমেন্টটি এক্সিকিউট হয়। if এবং switch হলো পিএইচপির কন্ডিশনাল স্টেটমেন্ট।
লুপ (loop): পর্যায়ক্রমিকভাবে কোন স্টেটমেন্টকে এক্সিকিউট করার জন্য লুপ ব্যবহার করা হয়। পিএইচপিতে চার ধরণের লুপ রয়েছে। যেমন- foreach, for, while ও do..while।
ফাংশন (function): ফাংশন একাধিক জায়গায় একাধিকবার ব্যবহার করা যায়। অনেক কাজ রয়েছে যেগুলো একটি এপ্লিকেশনের বিভিন্ন অংশে ব্যবহারের প্রয়োজন হয়। পিএইচপি কিছু স্টেটমেন্ট ব্লক দিয়ে ফাংশন তৈরি করে বারবার ব্যবহার করার সুযোগ দেয়।
কন্ডিশনাল স্টেটমেন্ট এবং লুপ শর্তের উপর ভিত্তি করে একটি স্টেটমেন্ট ব্লককে এক্সিকিউট করে। শর্তটি সত্য হলে স্টেটমেন্টটি এক্সিকিউট হয়। তাই কন্ডিশনাল স্টেটমেন্ট ও লুপে শর্তের ব্যবহার রয়েছে।
এই অংশে কিভাবে কমপ্লেক্স স্টেটমেন্ট ব্যবহার করতে হয় এবং কিভাবে তা স্ক্রিপ্টে সাজাতে হয় সে সম্বন্ধে জানব।
কন্ডিশন বা শর্ত সেট করা
কন্ডিশন একটি রাশি বা অভিব্যক্তি যাকে পিএইচপি মূল্যায়ন করে এটি সত্য না মিথ্যা। কমপ্লেক্স স্টেটমেন্টে ব্যবহৃত শর্তটি নির্ধারণ করে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে কি হবেনা। কন্ডিশন সেট করে ভ্যালুর সাথে তুলনা করতে হয়। এ কন্ডিশন সেট করতে ভ্যালুর তুলনার জন্য এখানে কিছু প্রশ্ন দেয়া হলো-
দুইটি ভ্যালু কি একই?- রাসেল ও রাহাতের জন্মস্থান কি একই? সজিবের বয়স কি ৭ বছর?
একটি ভ্যালু অন্যটি থেকে ছোট না বড়?- রুম্পা কি রেখার চেয়ে বয়সে ছোট? বাচ্চু সাহেবের সম্পদের পরিমান কি 10 কোটি টাকারও বেশি?
স্ট্রিংটি নির্দিষ্ট কোন প্যাটার্নের সাথে মিলে কি না?- রানার নাম r দিয়ে শুরু? জিপ কোড কি 5 সংখ্যার হয়?
দুই বা তার অধিক প্রশ্ন বা শর্ত দিয়েও কন্ডিশন সেট করা যায়। যেমন- আজ কি শনিবার এবং শনিবার কি অফিস বন্ধ থাকে? জুন মাস কি 30 দিনে শেষ অথবা 30 জুন কি সরকারি ছুটি?
ভ্যালুর তুলনা
আমরা সংখ্যা এবং স্ট্রিং দুটোরই তুলনা করতে পারি যে দুটি একই বা সমান কিনা? একটি অন্যটির ছোট কিনা অথবা একটি আরেকটির সমান নয়? এসব তুলনাগুলো করতে কম্পেরিজন অপারেটর (comparison operator) ব্যবহার করা হয়। পিএইচপি সেই তুল্য বিষয়গুলোকে মূল্যায়ন করে এবং সত্য অথবা মিথ্যা বের করে দেয়। যেমন-
$result = $a == $b;
= = কম্পেরিজন অপারেটরটি পরীক্ষা করে দুটি ভ্যালু সমান। যদি $a এবং $b সমান হয় তাহলে $result এ true নামে একটি বুলিয়ান ভ্যালু এসাইন হয়। $a এবং $b সমান না হলে $result এ false নামে একটি বুলিয়ান ভ্যালু এসাইন হয়। তাই $a == $b একটি সাধারণ কন্ডিশন যা সত্য অথবা মিথ্যা হতে পারে।
পিএইচপিতে ভ্যালুকে তুলনা করার জন্য অনেকগুলো কম্পেরিজন অপারেটর রয়েছে। নিচের টেবিলে কম্পেরিজন অপারেটরগুলো দেখানো হলো-
অপারেটর
ব্যাখ্যা
==
দুটি ভ্যালুর মান কি সমান?
===
দুটি ভ্যালুর মান এবং ডাটা টাইপ কি একই?
>
দ্বিতীয়টির চেয়ে প্রথম ভ্যালুটির মান বড়?
>=
দ্বিতীয়টির চেয়ে প্রথম ভ্যালুটির মান বড় অথবা সমান?
<
দ্বিতীয়টির চেয়ে প্রথম ভ্যালুটির মান ছোট?
<=
দ্বিতীয়টির চেয়ে প্রথম ভ্যালুটির মান ছোট অথবা সমান?
!=, <>
দুটি ভ্যালুর মান সমান নয়?
!==
দুটি ভ্যালুর মান এবং ডাটা টাইপ একই নয়?
কম্পেরিজন অপারেটর | Comparison Operator
কন্ডিশনাল স্টেটমেন্টে সংখ্যা এবং স্ট্রিং দুটোরই তুলনা করা যায়। পিএইচপি স্ট্রিংকে প্রথমে বর্ণানুক্রমিক, পরে বড়হাতের অক্ষর এবং সবশেষে ছোটহাতের অক্ষর এই ক্রমে তুলনা করে। যেমন- SS অবশ্যই Sa এর আগে আসবে। পিএইচপিতে স্ট্রিংকে তুলনা করা হয় তাদের ASCII কোডের উপর ভিত্তি করে।
নিচে কয়েকটি কম্পেরিজন দেয়া হলো যেগুলোকে পরীক্ষা করে পিএইচপি নির্ধারণ করতে পারে কোনটি সত্য কোনটি মিথ্যা-
$a == $b
$age != 21
$ageRumpa < $ageRekha
$house_price >= 1000000
দুটি == (সমান) চিহ্নের কম্পেরিজন অপারেটর দুটি ভ্যালু সমান কি না জিজ্ঞেস করে। এক্ষেত্রে একটি ভুল সচরাচর ঘটে থাকে। সেটি হলো দুটির পরিবর্তে একটি সমান চিহ্নের ব্যবহার। একটি সমান চিহ্নের মাধ্যমে ভ্যারিয়েবলে ভ্যালুকে ধারণ করা বুঝায়। যেমন- if ($weather = “raining”) স্টেটমেন্টে raining কে $weather এর ভ্যালু হিসেবে সেট করা হয়েছে। কিন্তু শর্ত হিসেবে আসলেই বৃষ্টি হচ্ছে কি না তা পরীক্ষা করে না এবং সবসময়ই এটি সত্য হবে। আর যদি আমরা লিখি if ($weather = “raining”) তাহলে পিএইচপি দেখবে $weather সমান if raining কিনা। $weather যদি raining হয় তাহলে স্টেটমেন্টটি সত্য, আর raining না হলে মিথ্যা হবে। তাই = চিহ্নের ব্যবহারে সতর্ক থাকতে হবে।
ভ্যারিয়েবলের কনটেন্ট বা বিষয়বস্তু পরীক্ষা করা
কোন কোন ক্ষেত্রে নির্দিষ্ট কোন নামে ভ্যারিয়েবল আছে কি না, ভ্যারিয়েবলে কোন ধরণের ডাটা রয়েছে তা জানার প্রয়োজন হতে পারে। যেমন ভ্যালুটি ইন্টেজার কি না তা নিচের মতো করে জানা যায়-
isset($varname): এই নামে কোন ভ্যারিয়েবল থাকলেই কন্ডিশনটি সত্য হবে। যদি ভ্যারিয়েবলটিতে কোন ভ্যালু এসাইন না করা হয় তারপরও কন্ডিশনটি সত্য হবে।
empty($varname): যদি এই নামে কোন ভ্যারিয়েবল না থাকে তাহলে কন্ডিশনটি সত্য হবে। ভ্যালু 0 হলে, কোন ক্যারেক্টারবিহীন স্ট্রিং থাকলেও কন্ডিশনটি সত্য হবে।
ভ্যারিয়েবলটিতে কোন ধরণের ডাটা রয়েছে অর্থ্যাৎ এর ডাটাটাইপ জানা যায়। যেমন-
is_int($number)
তুলনাটি সত্য যখন $number টি একটি ইন্টেজার হবে। এধরনের আরো কিছু স্টেটমেন্ট নিচে তুলে ধরা হলো-
is_array($var2): পরীক্ষা করে $var2 একটি এ্যারে কি না।
is_float($number): পরীক্ষা করে $number একটি ফ্লোটিং পয়েন্ট নাম্বার কি না।
is_null($var1): পরীক্ষা করে $var1 এর মান 0 শূন্য কি না।
is_numeric($string): পরীক্ষা করে $string কোন নিউমেরিক স্ট্রিং বা সংখ্যা কি না।
is_string($string): পরীক্ষা করে $string একটি স্ট্রিং কি না।
এক্সপ্রেশনের সামনে একটি ! (বিস্ময়সূচক) চিহ্ন বসিয়ে কোন না বোধক কন্ডিশন পরীক্ষা করা হয়। এটি আসলে লজিক্যাল ‘না বোধক’ কন্ডিশন। এর মানে পিএইচপিকে এটি বলে- “যদি এই শর্তটি সত্য না হয়, তাহলে কিছু একটা কর”। যেমন- $varname ভ্যারিয়েবলটির কোন অস্তিত্ব না থাকলে স্টেটমেন্টটি সত্য হবে।
!isset($varname)
সহজ ভাষায় এটি আমরা প্রকাশ করতে পারি এভাবে- “যদি $varname না থাকে…”।
এক্সপ্রেশনে প্যাটার্নের মিলকরণ
কোন ফরম বা ফরমের ফিল্ড থেকে যখন ভ্যালু বা তথ্য সংগ্রহ করি তখন ভ্যালুটি নির্দিষ্ট কোন আকৃতি, ফরম্যাট বা প্যাটার্নে প্রত্যাশা করতে পারি। এই ধরণের নির্দিষ্ট ফরম্যাটের ভ্যালু পেতে চাইলে ক্যারেক্টার স্ট্রিংকে তুলনা করতে হবে নির্দিষ্ট কিছু বৈশিষ্ট্যের সাথে। উদাহরণস্বরুপ আমি এমন একটি ভ্যালু চাই যে স্ট্রিংটি শুরু হবে S দিয়ে অথবা স্ট্রিংটির মধ্যে একটি সংখ্যা থাকবে। এই ধরণের ভ্যালুর জন্য একটি স্ট্রিং প্যাটার্নের সাথে প্রাপ্তব্য ভ্যালুটিকে তুলনা করতে হয়। এই প্যাটার্নকে রেগুলার এক্সপ্রেশন বলা হয়।
যেমন- ex*.txt একটি প্যাটার্ন। এটি একটি স্ট্রিং যা শুরু হবে ex দিয়ে এবং শেষ হবে .txt দিয়ে। ex এবং .txt এর মাঝখানে যে কোন ক্যারেক্টার বসতে পারে। exam.txt, ex33.txt ও ex3x4.txt সবগুলোই এই প্যাটার্ণটির সাথে মিলে যায়।
প্যাটার্ন ম্যাচিং সবচেয়ে বেশি ব্যবহৃত হয় ওয়েব পেজের ফরম থেকে ইনপুট নেয়ার সময়। একে ফরম ভ্যালিডেশনও বলা হয়।
ব্যবহারকারীর দেয়া তথ্য যদি নির্দিষ্ট প্যাটার্নের সাথে না মিলে তাহলে ইনপুট দেয়া তথ্য ডাটাবেজে সংরক্ষিত হবে না। যেমন একজন ব্যবহারকারী একটি ফরমে জিপ কোড টাইপ করবে। এক্ষেত্রে কোডটির ফরম্যাট হবে পাঁচ সংখ্যার বা ZIP + 4। এভাবে কন্ডিশনে প্যাটার্ন সেট করে পরীক্ষা করতে পারি ইনপুটটি প্যাটার্ণটির সাথে মিলে কি না। না মিললে ব্যবহারকারীর কাছে পুনরায় সঠিক তথ্যটি চাইতে পারি।
প্যাটার্নে স্পেশাল ক্যারেক্টার বা বিশেষ অক্ষরের ব্যবহার
প্যাটার্নে সাধারণ অক্ষর বা বিশেষ অক্ষর থাকতে পারে।
সাধারণ অক্ষর (literal character): এগুলো হলো সাধারণ অক্ষর যার বিশেষ আলাদা কোন অর্থ নেই। যেমন e। ইংরেজি বর্ণমালার 26টি অক্ষরের যে কোনটিই হতে পারে।
বিশেষ অক্ষর (special character): অন্যদিকে প্যাটার্নে বিশেষ অক্ষরের বিশেষ অর্থ রয়েছে। যেমন- * (তারকা) চিহ্ন।
প্যাটার্ন তৈরিতে ব্যবহৃত কিছু অক্ষর ও তার ব্যাখ্যা এখানে দেয়া হলোঃ
অক্ষর
ব্যাখ্যা
উদাহরণ
মিলবে
মিলবে না
^
লাইনের শুরু
^c
cat
my cat
$
লাইনের শেষ
c$
tic
stick
.
একটিমাত্র ক্যারেক্টার
..
দুই ক্যারেক্টারের যে কোন স্ট্রিং
a, I
?
পূর্ববর্তী ক্যারেক্টারটি ঐচ্ছিক
mea?n
mean, men
moan
( )
একসঙ্গে আক্ষরিক অক্ষরের গ্রুপ
m(ea)n
mean
men, mn
[ ]
ঐচ্ছিক আক্ষরিক অক্ষরের একটি সেট আবদ্ধ করা হয়
m[ea]n
men, man
mean, mn
–
এই দুই অক্ষরের মধ্যকার সবগুলো অক্ষর বসতে পারে
m[a-c]n
man, mbn, mcn
mdn, mun, maan
+
পূর্ববর্তী আইটেম এর পর এক বা একাধিক ক্যারেক্টার বসবে
door[1-3]+
door111, door131
door, door55
*
পূর্ববর্তী আইটেম এর পর জিরো বা আরো অধিক স্ট্রিং বসবে
door[1-3]*
door, door311
door4, door445
{ , }
শুরু এবং পুনরাবৃত্তির পরিসীমার শেষ সংখ্যা
a{2,5}
aa, aaaaa
a, xx3
\
পরের অক্ষরটির আক্ষরিক অক্ষর হবে
m\*n
m*n
men, mean
(||)
একটি বিকল্প স্ট্রিং এর সেট
(Tom|Tommy)
Tom, Tommy
Thomas, To
প্যাটার্নের কিছু উদাহরণ
আক্ষরিক ও বিশেষ অক্ষর একসাথে ব্যবহার করে দীর্ঘ ও জটিল প্যাটার্ণ তৈরি করা যায়। একটি স্ট্রিংকে প্যাটার্নের সাথে তুলনা করা হয়। যদি এটি প্যাটার্নের সাথে মিলে যায় তাহলে স্টেটমেন্টটি সত্য হয়।
উদাহরণ-১:
^[A-Za-z].*
এই প্যাটার্নটির দুটি অংশ রয়েছে-
^[A-Za-z]: প্রথম অংশটি নির্দেশ করে স্ট্রিংটির শুরু হবে একটি বর্ণ দিয়ে। যা বড়হাতের অক্ষর বা ছোটহাতের অক্ষর যে কোনটিই হতে পারে।
.*: এই অংশটি নির্দিষ্ট করে স্ট্রিংটিতে এক বা একাধিক ক্যারেক্টার থাকতে পারে। এগুলো হতে পারে সংখ্যা, বর্ণ, স্পেইস বা অন্যকিছু।
^[A-Za-z].* প্যাটার্নটি again, Sam, 4 times, and I স্ট্রিং এর সাথে মিল হবে। কিন্তু 123 ও ? এর সাথে মিলবে না।
উদাহরণ-২:
Dear (Kim|Rikki)
এই প্যাটার্নটিতেও দুটি অংশ রয়েছে এবং দুটি স্ট্রিংকে আলাদাভাবে সংজ্ঞায়িত করেছে।
Dear: প্রথম অংশটি একটি আক্ষরিক ক্যারেক্টার স্ট্রিং মাত্র।
(Kim|Rikki): এই অংশটি নির্দেশ করে Kim অথবা Rikki স্ট্রিংটি অবশ্যই মিলতে হবে।
এক্সপ্রেশনটি Dear Kim ও My Dear Rikki স্ট্রিং এর সাথে মিললেও Dear Bobby ও Kim এর সাথে মিলবে না।
উদাহরন-৩:
^[0-9]{5}(\-[0-9]{4})?$
এই প্যাটার্নটি কোন জিপ কোডকে সংজ্ঞায়িত করেছে এবং এর অনেকগুলো অংশ রয়েছে।
^[0-9]{5}: প্রথম অংশটি বলে দিচ্ছে এটি হবে পাঁচটি সংখ্যার একটি স্ট্রিং।
\-: ব্যাকশ্ল্যাসটি (-) হাইফেন একটি সাধারণ অক্ষর এটি নির্দেশ করে।
[0-9]{4}: এই অংশটি পিএইচপিকে বলে দেয় এটি হবে চারটি সংখ্যার একটি স্ট্রিং।
( )?: এই ক্যারেক্টারগুলো শেষ দুটি পার্টকে গ্রুপ করে এবং ঐচ্ছিক বলে চিহ্নিত করে।
$: ডলার চিহ্নটি বলে দেয় স্ট্রিংটি শেষ। এরপর আর কোন ক্যারেক্টার বসানো যাবে না।
প্যাটার্নটি 90001 ও 90002-4323 এর সাথে মিলে এবং 9001 ও 12-4321 সাথে কখনোই মিলবে না।
উদাহরণ-4:
^.+@.+\.com$
এই প্যাটার্নটি বুঝায় @ এর সাথে কোন ক্যারেক্টার বসবে এবং প্যাটার্নটি .com দিয়ে শেষ হবে। সহজ কথায় এটি একটি ই-মেইল ঠিকানা নির্দেশ করার সাধারণ ফরম্যাট। প্যাটার্নটিতে অনেকগুলো অংশ রয়েছে।
^.+: এই অংশটি বুঝায় এর পূর্বে এক বা একাধিক ক্যারেক্টার স্ট্রিং বসতে পারে।
@: এটি একটি অক্ষর। এটি কোন স্পেশাল ক্যারেক্টার নয় এবং @ এর পূর্বে ব্যাকশ্ল্যাস দেয়ার প্রয়োজন হয় না।
.+: এটি এক বা একাধিক ক্যারেক্টারের স্ট্রিং নির্দেশ করে।
\.: শ্ল্যাসটি পিএইচপিকে একটি আক্ষরিক . (ডট) দেখতে বলে।
com$: সবশেষে স্ট্রিং থাকবে এবং ডলার সাইন পুরো এক্সপ্রেশনটি শেষ হয়েছে নির্দেশ করে।
এই প্যাটার্নটি you@yourcompany.com ও johndoe@somedomain.com এর সাথে মিলে যায় এবং কোনভাবেই you@yourcompany.net, you@.com ও @you.com. এর সাথে মিলবে না।
প্যাটার্ন মিল করার জন্য ফাংশনের ব্যবহার
প্যাটার্ন তৈরি করার পর তা ফাংশনে ব্যবহারের মাধ্যমে ভ্যালুর সাথে তুলনা করতে হবে। preg_match ফাংশন ব্যবহার করে একটি স্ট্রিংকে প্যাটার্নের সাথে মিল করে তুলনা করতে পারি। এর সাধারণ ফরম্যাটটি হলো-
preg_match(“pattern”,value);
প্যাটার্নটি অবশ্যই ডাবল কোটেশনের মধ্যে রাখতে হবে। অনেকসময় ডাবল কোটেশনের মধ্যে প্যাটার্নের দুইপাশে দুটি ফরওয়ার্ড শ্ল্যাসও ব্যবহার করা হয়। উদাহরণস্বরূপ নিচে একটি ফরমের নামকে প্যাটার্নের সাথে তুলনা করে পরীক্ষা করা হয়েছে। ভ্যালুটি $name নামের ভ্যারিয়েবলে রাখা হয়েছে।
preg_match(“/^[A-Za-z’ -]+$/”,$name)
এই স্টেটমেন্টে প্যাটার্নটি যা নির্দেশ করে-
প্যাটার্নটি ফরওয়ার্ড শ্ল্যাস দিয়ে আবদ্ধ করা হয়েছে।
^ ও $ চিহ্ন যথাক্রমে স্ট্রিংটি শুরু ও শেষকে নির্দেশ করে।
[] দ্বারা সবধরনের আক্ষরিক ক্যারেক্টার মেনে নেওয়া হবে বুঝানো হয়েছে। ক্যারেক্টারগুলোর মধ্যে ছোটহাতের, বড়হাতের অক্ষর, ঊর্ধ্বকমা বা এপোসট্রোপ ও হাইফেন থাকতে পারে।
এরপর একটি + চিহ্ন ব্যবহার করা হয়েছে। এর মানে হলো [] এর ভিতর যে কোন দৈর্ঘ্যের ক্যারেক্টার ব্যবহার করা যাবে কিন্তু কমপক্ষে একটি ক্যারেক্টার অবশ্যই ব্যবহার করতে হবে।
একাধিক তুলনা একত্রীকরণ
আপনার শর্তকে নিশ্চিত করতে একাধিক প্রশ্ন করতে হতে পারে। অর্থাৎ একটি শর্তের মধ্যে একাধিক প্রশ্ন থাকতে পারে বা অনেকগুলো শর্ত মিলে একটি শর্ত গঠিত হতে পারে। উদাহরণস্বরুপ আপনার প্রতিষ্ঠানের বিভিন্ন পণ্যের তালিকা বা ক্যাটালগ রয়েছে তিনটি ভাষায়। ক্রেতা কোন পণ্যের ক্যাটালগ কোন ভাষায় দেখতে চায় সেটা জানা প্রয়োজন। এজন্য তুলনাগুলোকে একসাথে করার প্রয়োজন হয়। এর সাধারণ ফরম্যাট হলো-
তুলনাগুলোকে একসাথে করতে সাধারণত তিনটি শব্দ ব্যবহৃত হয়-
and: যখন দুটি তুলনা বা শর্তই সত্য হয়।
or: যে কোন একটি অথবা দুটি শর্তই সত্য হয়।
xor: একটিমাত্র শর্ত সত্য হয়।
এখানে একটি টেবিলে কতগুলো তুলনার উদাহরণ দেয়া হলো-
তুলনা
সত্যহবেযদি…
$ageShampa == 21 or $ageShampa == 22
শম্পার বয়স 21 অথবা 22 হয়।
$ageShampa > 29 and $city == “DK”
শম্পার বয়স 29 এর বেশি এবং সিটি ঢাকা হয়।
$ageShampa > 29 or $state == “DK”
শম্পার বয়স 29 এর বেশি অথবা এলাকা ঢাকা হয়।
$city == “DK” xor $state == “NK”
সিটি ঢাকা অথবা এলাকা নেত্রকোনা, কিন্তু দুটোই নয়।
$name != “Shampa” and $age < 13
শম্পা ছাড়া যে কেউ এবং বয়স 13 এর কম।
এভাবে প্রয়োজনীয় সংখ্যক তুলনা একসাথে করা যায়। তুলনায় পিএইচপি প্রথম and, পরে xor এবং সবশেষে or কে মূল্যায়ন করে। যেমন নিচের শর্তটিতে তুলনা করা হয়েছে-
$resCity == “Dhaka” or $resArea == “Dhanmondi” and $name == “Rasel”
ক্রেতার নাম Rasel এবং তিনি যদি Dhaka বসবাস করেন তাহলে তুলনাটি সত্য। যদি তিনি Dhanmondi তেও বসবাস করেন তাহলেও স্টেটমেন্টটি সত্য, তার নাম যাই হোক না কেন। অপরদিকে যদি Dhaka বসবাস করে কিন্তু নাম Rasel না হয় তাহলে শর্তটি মিথ্যা হবে। স্ক্রিপ্ট নিচের ধারাবাহিকতায় শর্তগুলো পরীক্ষা করে বলেই আমরা এই ধরণের ফলাফল পেয়েছি-
প্রথমে and কে পরীক্ষা করেঃ স্ক্রিপ্ট প্রথমে $resArea পরীক্ষা করে দেখে এটা Dhanmondi তারপর $name পরীক্ষা করে দেখে Rasel। স্ক্রিপ্ট যখন দেখে দুটোই মিলে যায় তখন শর্তটি সত্য হয় এবং স্ট্রিপ্ট or শর্তটি আর পরীক্ষা করে না। একটি অথবা কোন শর্তই না মিললে স্ক্রিপ্ট or শর্তটি পরীক্ষা করতে যায়।
পরবর্তীতে or কে পরীক্ষা করেঃ স্ক্রিপ্ট $resCity পরীক্ষা করে দেখে এটি Dhaka কি না। Dhaka হলে স্টেটমেন্টটি সত্য, অন্যথায় মিথ্যা।
তবে প্রয়োজনে () প্রথম বন্ধনী ব্যবহার করে শর্ত পরীক্ষার এই ক্রমটিকে পরিবর্তন করা যায়। প্রথম বন্ধনীর ভিতরের অংশটিকেই স্ক্রিপ্ট প্রথমে পরীক্ষা করে। যেমন পূর্বের স্টেটমেন্টটিকে নিচের মতো করে লিখে এর শর্তগুলো পরীক্ষার ক্রমটিকে পরিবর্তিত করতে পারি-
($resCity == “Dhaka” or $resArea == “Dhanmondi”) and $name == “Rasel”
প্রথম বন্ধনী শর্তপরীক্ষা করার ক্রমটিকে পরিবর্তিত করেছে। or প্রথমে মূল্যায়িত হয়েছে কারণ এটি প্রথমবন্ধনীর ভিতরে। এখন $name সমান Rasel এবং Dhaka অথবা Dhanmondi যে কোন একটি জায়গায় বসবাস করলেই শর্তটি সত্য হবে। স্ক্রিপ্ট নিচের ক্রমে শর্তটি পরীক্ষা করে-
প্রথমে or কে পরীক্ষা করেঃ স্ক্রিপ্ট পরীক্ষা করে $resCity সমান Dhaka অথবা $resArea সমান Dhanmondi কিনা। না মিললে শর্তটি মিথ্যা এবং পিএইচপি স্ক্রিপ্ট পড়া বন্ধ করে দেয় আর এগোয় না। আর মিলে গেলে এই অংশের শর্তটি সত্য হবে এবং স্ক্রিপ্ট and এর পরের অংশটি পরীক্ষা করবে।
পরবর্তীতে and কে পরীক্ষা করেঃ স্ক্রিপ্ট $name পরীক্ষা করে দেখে এটি Rasel কিনা। মিলে গেলে শর্তটি সত্য হবে অন্যথায় মিথ্যা।
অন্যান্য প্রোগ্রামিং ভাষা যেমন সি ভাষার মতো পিএইচপিতেও and এর পরিবর্তে && এবং or এর পরিবর্তে || ব্যবহার করা যায়। $a < $b and $c > $b স্টেটমেন্টটির মতোই $a < $b && $c > $b একটি বৈধ স্টেটমেন্ট যা পিএইচপি স্বীকৃত।