freelancerstutorial

This WordPress.com site is the cat’s pajamas

সহজে শিখুন পিএইচপি এডভান্সড

পিএইচপি টিউটোরিয়াল | এডভান্সড

freelancerstutorial.wordpress.com এর এই সেকশনে বাংলায় পিএইচপির এডভান্সড টিউটোরিয়াল থাকবে যেমন -পিএইচপি সেশন,পিএইচপি কুকি,
পিএইচপি ফাইল ফাংশন,পিএইচপি ডেট ফাংশন,পিএইচপি এরর হ্যান্ডলার,পিএইচপি মেইল ফাংশনইত্যাদি।

এডভান্সড পিএইচপি তে বলতে গেলে আরও অনেক জিনিস আছে যেমন

রিফ্লেকশন API,পিএইচপি ইউনিট টেস্ট,স্টান্ডার্ড পিএইচপি লাইব্রেরি (SPL),পিএইচপি দিয়ে ওয়েব এপ্লিকেশন তৈরীর সময় এক্সএমএল এর ব্যবহার,পিএইচপিতে এজাক্সের ব্যবহার,ডিজাইন প্যাটার্ন ইত্যাদি।এছাড়াও পরোক্ষভাবে সম্পর্কিত যেমন স্মার্টি পিএইচপি টেম্পপ্লেট ইত্যাদি ।

রিফ্লেকশন API হচ্ছে কিছু ফাংশন যেগুলির দ্বারা রানটাইমে একটা অবজেক্ট বা ক্লাস কিধরনের এসব বোঝা যায়।অর্থ্যাৎ এর ভিতরের ফাংশন,ক্লাস,প্রোপার্টি ইত্যাদির বিস্তারিত তথ্য পাওয়া যায়।

ইউনিট টেস্ট প্রতিটি প্রোগ্রামিং ল্যাংগুয়েজে আছে,এটা এমন একটা টুল যার দ্বারা আপনি আপনার কোডকে পরীক্ষা করে দেখতে পারেন যে এটা ঠিক আছে কিনা।কোডে ভুল থাকলে ইউনিট টেস্টের মাধ্যমে তা বের হয়।পিএইচপির একটা বিখ্যাত ইউনিট টেস্টিং পাকেজের নাম পিএইচপি ইউনিট (PHPUnit)

স্টান্ডার্ড পিএইচপি লাইব্রেরী (SPL) হচ্ছে কিছু বিল্ট ইন ইন্টারফেস এবং ক্লাস,এসব রেডিমেট ক্লাস এবং ইন্টারফেস এর কারনে অনেক জটিল সমস্যা সমাধানের জন্য আপনার ঘাম কম ঝরবে।

এসবের উপর টিউটোরিয়াল এই সাইটে ধীরে ধীরে দেয়া হবে।

 

 

 

 

 

পিএইচপি ডেট ফাংশন টিউটোরিয়াল

ওয়েব এপ্লিকেশন তৈরীতে পিএইচপি এর date/time ফাংশন প্রায় সবসময় লাগে।ফোরাম,ব্লগ বা শপিং কার্ট ইত্যাদি তৈরীর সময় পিএইচপির এই ফাংশন কাজে লাগবে।যেমন ফোরামে একজন কবে নিবন্ধন করল,কবে সর্বশেষ লগিন করেছে,সর্বশেষ লগিন করার পর থেকে এখন পর্যন্ত কতটি নতুন পোস্ট হল,ইকমার্স সাইট হলে একটা পন্য কবে বিক্রি হল ইত্যাদি দেখানোর প্রয়োজন হতে পারে বা ইউজারকে এসব দেখাতেই হয়।যেকোন ব্লগ ফোরামে যান,এসব দেখতে পাবেন।

পিএইচপিতে স্ট্রিং বা সংখ্যা নিয়ে কাজ করার চেয়ে date এবং time নিয়ে কাজ করা বেশি জটিল কারন একটা তারিখে অনেকগুলি বিষয়ের সমন্বয় থাকে।যেমন মাস,দিন,ঘন্টা,মিনিট ইত্যাদি।এখানে প্রতিটি ভাগ আবার আলাদা আলাদা যেমন ঘন্টা ২৪ (বা ১২) এর বেশি হতে পারবেনা,মিনিট এবং সেকেন্ড ৬০ পর্যন্ত হবে,মাস ৩০ দিনে তাও আবার সব মাস ৩০ দিনে হবেনা।

যাইহোক পিএইচপিতে এসব ম্যানিপুলেট করার জন্য অনেক ফাংশন আছে যা আপনার কাজ সহজ করে দেবে।

টাইমস্টাম্প (timestamp): টাইমস্টাম্প হচ্ছে ১৯৭০ সালের পহেলা জানুয়ারী থেকে অতিবাহিত সেকেন্ডের মান(মোট কত সেকেন্ড অতিবাহিত হয়েছে)।এটাকে ইউনিক্স টাইমস্টাম্পও বলে।পিএইচপিতে এই টাইমস্টাম্পের সাথে কাজ করার জন্য অনেক ফাংশন আছে।

ডেট ফাংশনে দুটি প্যারামিটার আছে format এবং timestamp

date(format,timestamp)

ব্যাখ্যা:format প্যারামিটার দিয়ে তারিখ বা সময় কোন্ ফরমেটে দেখাবে এটা ঠিক করে দেয়া যায়।যেমন 2010/05/11 এই ফরমেটে আপনি তারিখ দেখতে চাইতে পারেন অথবা  2010,05,11 এভাবে অথবা 2010-05-11 এভাবে ,যাইহোক এরকম আরও অনেক ফরমেট আছে।আর timestamp প্যারামিটার দিয়ে এটা ঠিক করে দিতে পারেন যে বর্তমান সময়ের কতদিন পরের তারিখটি/সময়টি বা বর্তমান সময়ের কতদিন আগের তারিখটি/সময়টি দেখাবে।যেমন সবনিচের টাইমস্টাম্প এর উদাহরনটিতে একদিন পরের তারিখ দেখানো হয়েছে।

আপনি আপনার ওয়েবপেজের কোন পার্শ্বে বর্তমান তারিখ/সময় দেখাতে চাইতে পারেন তখন পিএইচপি এর date() ফাংশন দ্বারা এটি করতে পারেন।নিচের উদাহরনে দেখুন date ফাংশনে শুধু একটা প্যারমিটার (format) দেয়া আছে,timestamp প্যারামিটারটি নেই।এই প্যারামিটারটি অপশনাল ইচ্ছে করলে দিতে পারেন আর না দিলে বর্তমান সময় দেখাবে।যেমন

01.<?php
02.echo date("Y/m/d") . "<br />";
03.
04.
05.echo date("Y.m.d") . "<br />";
06.
07.echo date("Y-m-d")
08.
09.?>

Output

2009/05/11

2009.05.11

2009-05-11

এখানে আপনি যে ফরম্যাটটি পছন্দ করেন সেটি দিয়ে দিবেন।

টাইমস্টাম্প দিয়ে

এবার date() ফাংশনে দুটি প্যারামিটার দিয়ে

1.<?php
2.$tomorrow = mktime(0, 0, 0, date("m"), date("d")+1, date("y"));
3.
4.echo "Tomorrow is ".date("m/d/y", $tomorrow);
5.
6.?>

এই উদাহরনে পিএইচপির mktime() ফাংশন ব্যবহার করা হয়েছে আগামীকালের টাইমস্টাম্প তৈরীর জন্য।এই  কোড রান করিয়ে দেখুন যে দিন রান করাবেন তার পরেরদিন এর তারিখ দেখাবে

আউটপুট

Tomorrow is 04/12/11

 

 

 

 

 

 

পিএইচপি ইনক্লুড ফাংশন টিউটোরিয়াল (PHP Include Function Tutorial in Bangla)

আপনি ইচ্ছে করলেই সার্ভার এক্সিকিউট করার আগেই পিএইচপি এর একটা ফাইলের অংশ অন্য আরেকটা পিএইচপি ফাইলে ঢুকিয়ে দিতে পারেন include() ফাংশন দিয়ে।

Require()-ভুল হলে fatal error(গুরতর ভুল)দেখাবে এবং স্ক্রিপ্টটি এক্সিকিউট করা বন্ধ করে দিবে।

Include()-ভুল হলে সতর্ক করে দিবে এবং স্ক্রিপ্টটি এক্সিকিউট করবে

এ ফাংশন দুটি দিয়ে অনেক কাজ বেচে যায় যেমন আপনি যদি একটা মেনু,হেডার,ফুটার বা যেকোন অংশ যেটা আপনি চান যে আমার ওয়েব সাইটের সকল পেজেই এটা দেখাবে তাহলে একটা পিএইচপি ফাইলে সেটা(মেনু,হেডার,ফুটার ইত্যাদি) তৈরী করে অন্য সব পেজে এ ফাংশন দুটি দিয়ে যোগ করে দিতে পারেন।ফলে আলাদা আলাদা ভাবে প্রতিটি পেজে আর এগুলো যোগ করতে হলনা।আবার যদি এই include ফাইলে কোন কিছু আপডেট করেন সেটা বা একটা কোন নতুন জিনিস যোগ করেন তাহলে সেটা সব পেজে গিয়েই যুক্ত হবে।পৃথকভাবে সব পেজে গিয়ে আর যোগ করতে হবেনা।উদাহরন,ধরুন “menu.php”নামে একটা ফাইল অঅছে নিচের মত

1.<a href="/default.php">Home</a>
2.<a href="/tutorials.php">Tutorials</a>
3.<a href="/references.php">References</a>
4.<a href="/examples.php">Examples</a>
5.<a href="/about.php">About Us</a>
6.<a href="/contact.php">Contact Us</a>

এটাকে যোগ করতে হবে এভাবে

01.<html>
02.<body>
03.<div>
04.<?php include("menu.php"); ?>
05.</div>
06.<h1>Welcome to my home page.</h1>
07.<p>Some text.</p>
08.</body>
09.</html>
পিএইচপি রিকোয়ার ফাংশন (PHP require Function Tutorial in Bangla)

require() ফাংশন include() এর মতই শুধু মাত্র ভুল হলে কিরুপ আচরন করবে এর উপর ভিত্তি করে একটু ভিন্নতা আছে।

Include() এ ভুল করলে এরকম মেসেজ দিবে।

01.<html>
02.<body>
03.
04.<?php
05.include("wrongFile.php");
06.echo "Hello World!";
07.?>
08.</body>
09.</html>

Error message:

Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5

Warning: include() [function.include]:
Failed opening ‘wrongFile.php’ for inclusion
(include_path=’.;C:\php5\pear’)
in C:\home\website\test.php on line 5

Hello World!

Notice that the echo statement is executed! This is because a Warning does not stop the script execution.

require() Functionএ ভুল করেলে এরকম মেসেজ দিবে

Now, let’s run the same example with the require() function.

1.<html>
2.<body>
3.<?php
4.require("wrongFile.php");
5.echo "Hello World!";
6.?>
7.</body>
8.</html>

Error message:

Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5

Fatal error: require() [function.require]:
Failed opening required ‘wrongFile.php’
(include_path=’.;C:\php5\pear’)
in C:\home\website\test.php on line 5

echo statement এখানে এক্সিকিউট হয়নাই

 

 

 

 

 

 

 

পিএইচপি ফাইল ফাংশন টিউটোরিয়াল (PHP File Function Tutorial in Bangla)

fopen এটা দিয়ে পিএইচপি তে ফাইল খোলা যায়।যেমন

1.<html>
2.<body>
3.<?php
4.$file=fopen("welcome.txt","r");
5.?>
6.</body>
7.</html>

fopen  এরপর ব্রাকেটে দুটি জিনিস আছে একটি “welcome.txt”অর্থ্যাৎ এই নামের ফাইলটি খুলবে এবং দ্বিতীয়টি “r” এটা একটা প্যারামিটার যেটা দিয়ে ঠিক করে দেয়া যায় ফাইলটি কোন অবস্থায়(মোডে)খূলবে।এখানে “r” দেয়া আছে তাই এটি read only মোডে খুলবে।

এরকম আরো কিছু প্যারামিটার

Modes Description
r Read only. Starts at the beginning of the file
r+ Read/Write. Starts at the beginning of the file
w Write only. Opens and clears the contents of file; or creates a new file if it doesn’t exist
w+ Read/Write. Opens and clears the contents of file; or creates a new file if it doesn’t exist
a Append. Opens and writes to the end of the file or creates a new file if it doesn’t exist
a+ Read/Append. Preserves file content by writing to the end of the file
x Write only. Creates a new file. Returns FALSE and an error if file already exists
x+ Read/Write. Creates a new file. Returns FALSE and an error if file already exists

যদি নির্দিষ্ট ফাইলটি fopen() function টি খুলতে ব্যার্থ হয় তাহলে নিচের মত কোডটি লিখে একটা মেসেজ দেখানো হয়

1.<html>
2.<body>
3.<?php
4.$file=fopen("welcome.txt","r") or exit("Unable to open file!");
5.?>
6.</body>
7.</html>

একটা ফাইল ক্লোজ করা

fclose() function দিয়ে খোলা কোন ফাইল বন্ধ করা যায়।

1.<?php
2.$file = fopen("test.txt","r");
3.
4.//some code to be executed
5.
6.fclose($file);
7.?>

end-of-file চেক করা

এটা দিয়ে ফাইলের শেষে পৌছালো কিনা তা চেক করা হয়।

if (feof($file)) echo “End of file”;

এটা লুপিং এর সময় কাজে লাগে।

একটা ফাইল Line by Line পড়া

fgets() function টি দিয়ে পিএইচপি  তে একটি একটি করে লাইন পড়া যায়।এই ফাংশনটি কল করার সাথে সাথে ফাইল নির্দেশকটি পরের লাইনে চলে যায়।নিচের উদাহরনে দেখুন এটি একটি একটি করে লাইন পড়বে শেষ  না পৌছা পর্যন্ত।

01.<?php
02.$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
03.//Output a line of the file until the end is reached
04.while(!feof($file))
05.{
06.echo fgets($file). "<br />";
07.}
08.fclose($file);
09.?>

Character by Character একটা ফাইল পড়া

fgetc() function টি একটা ফাইল থেকে একটা একটা করে অক্ষর পড়বে।

নিচের উদাহরনটি ফাইল থেকে একটি একটি করে অক্ষর পড়বে।

1.<?php
2.$file=fopen("welcome.txt","r") or exit("Unable to open file!");
3.while (!feof($file))
4.{
5.echo fgetc($file);
6.}
7.fclose($file);
8.?>
পিএইচপি ফাইল আপলোড টিউটোরিয়াল

এই ফাংশনের মাধ্যমে ইউজার আপনার সার্ভারে ফাইল আপলোড করতে পারবে।যেমন

01.<html>
02.<body>
03.
04.<form action="upload_file.php" method="post"
05.enctype="multipart/form-data">
06.<label for="file">Filename:</label>
07.<input type="file" name="file" id="file" />
08.<br />
09.<input type="submit" name="Submit" value="Submit" />
10.</form>
11.</body>
12.</html>

এখানে action=”upload_file.php” এবং method=”post”  দেয়া হয়েছে অর্থ্যাৎ সাবমিট বাটনে ক্লিক করলে ফর্মের ডেটা গুলো পোস্ট মেথড এর মাধ্যমে upload_file.php নামের ফাইলে যাবে।এবার দেখি upload_file.php তে ডেটা গুলো নিয়ে এসে কি করব।

Upload_file.php স্ক্রিপ্টটি হবে এরকম

01.<?php
02.if ($_FILES["file"]["error"] > 0)
03.{
04.echo "Error: " . $_FILES["file"]["error"] . "<br />";
05.}
06.else
07.{
08.echo "Upload: " . $_FILES["file"]["name"] . "<br />";
09.echo "Type: " . $_FILES["file"]["type"] . "<br />";
10.echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
11.echo "Stored in: " . $_FILES["file"]["tmp_name"];
12.}
13.?>

global PHP $_FILES  অ্যারে ব্যাবহার করে আপনি ক্লাইন্ট কম্পিউটার থেকে রিমোট সার্ভারে ফাইল আপলোড করতে পারবেন।

  • $_FILES[“file”][“name”] – আপলোডকৃত ফাইলের নাম
  • $_FILES[“file”][“type”] – আপলোডকৃত ফাইলের type
  • $_FILES[“file”][“size”] – আপলোডকৃত ফাইলের size
  • $_FILES[“file”][“tmp_name”] আপলোডকৃত ফাইলের temporary copy যেটা সার্ভারে সংরক্ষিত থাকে।

আপনি ইচ্ছে করলে ফাইল কে এবং কি আপলোড করতে পারবে তা ঠিক করে দিতে পারেন নিরাপত্তার জন্য যাতে যেকোন কেউ যেকোন ফাইল আপলোড করতে না পারে।যেমন ২০ কিলোবাইটের অধিক পরিমান ফাইল আপলোড করতে পারবেনা বা শুধু .jpeg,.jpg,.gif ফরম্যাটের ফাইল আপলোড করতে পারবে ইত্যাদি ঠিক করে দিতে পারেন।

01.<?php
02.if ((($_FILES["file"]["type"] == "image/gif")
03.|| ($_FILES["file"]["type"] == "image/jpeg")
04.|| ($_FILES["file"]["type"] == "image/pjpeg"))
05.&& ($_FILES["file"]["size"] < 20000))
06.{
07.if ($_FILES["file"]["error"] > 0)
08.{
09.echo "Error: " . $_FILES["file"]["error"] . "<br />";
10.}
11.else
12.{
13.echo "Upload: " . $_FILES["file"]["name"] . "<br />";
14.echo "Type: " . $_FILES["file"]["type"] . "<br />";
15.echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
16.echo "Stored in: " . $_FILES["file"]["tmp_name"];
17.}
18.}
19.else
20.{
21.echo "Invalid file";
22.}
23.?>

আপলোডকৃত ফাইল সেভ করে রাখা

আগেই বলেছি উপরের কোডগুলো দিয়ে সার্ভারে ফাইল অস্থায়ী(temporary copy) ভাবে সেভ হয়,স্থায়ী করে রাখার জন্য এভাবে কোডটি লিখুন (সার্ভারে upload নামে একটা ফোল্ডার তৈরী করে নিন)

01.<?php
02.if ((($_FILES["file"]["type"] == "image/gif")
03.|| ($_FILES["file"]["type"] == "image/jpeg")
04.|| ($_FILES["file"]["type"] == "image/pjpeg"))
05.&& ($_FILES["file"]["size"] < 20000))
06.{
07.if ($_FILES["file"]["error"] > 0)
08.{
09.echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
10.}
11.else
12.{
13.echo "Upload: " . $_FILES["file"]["name"] . "<br />";
14.echo "Type: " . $_FILES["file"]["type"] . "<br />";
15.echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
16.echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
17.
18.if (file_exists("upload/" . $_FILES["file"]["name"]))
19.{
20.echo $_FILES["file"]["name"] . " already exists. ";
21.}
22.else
23.{
24.move_uploaded_file($_FILES["file"]["tmp_name"],
25."upload/" . $_FILES["file"]["name"]);
26.echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
27.}
28.}
29.}
30.else
31.{
32.echo "Invalid file";
33.}
34.?>

স্ক্রিপ্টটি দেখবে আগে থেকেই এই নামের কোন ফাইল সার্ভারে আছে কিনা ,না থাকলে move_uploaded_file ফাংশনটির সাহায্যে নির্দিষ্টকৃত ফোল্ডারে গিয়ে ফাইলটি সেভ হবে।

উপরের উদাহরনে “upload” নামের একটা ফোল্ডারে গিয়ে ফাইলটি সেভ হবে।

 

 

 

 

 

 

 

 

পিএইচপি কুকি টিউটোরিয়াল (PHP Cookie Tutorial in Bangla)

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

 কুকি কিভাবে তৈরী করতে হয়

setcookie() function এটা ব্যাবহৃত হয় কুকি তৈরী করতে।

setcookie() function টি অবশ্যই ট্যাগ এর আগে থাকতে হবে।

setcookie(name, value, expiration);

namename:এটা কুকির নাম,পরে এই নামটি ব্যাবহার করতে হবে কুকিটি ফেরৎ পেতে ।

value:এটা কুকিতে মান সংরক্ষন করে রাখে,বহুল ব্যাবহৃত কুকি হচ্ছে username(string)এবং last visit(date)

expiration:এটা ওই সময় যখন কুকিটির মেয়াদ শেষ হবে।যদি আপনি এই মেয়াদের তারিখটি(কুকিটি কতক্ষন থাকবে)ঠিক না করে দেন তাহলে ব্রাউজার রির্স্টার্ট করার সাথে সাথেই কুকিটি মুছে যাবে।

নিচের উদাহরনে আমি একটি কুকি তৈরী করব যেটা ইউজার সর্বশেষ কখন ওয়েবসাইটি visit করেছেন সেই তথ্য সংরক্ষন করে রাখবে যাতে নাকি পরে এটা দিয়ে বের করেতে পারি একজন ইউজার কত ঘনঘন আমার সাইটে আসেন।আপনি চাইলে কুকির মেয়াদকাল ঠিক করে দিতে পারেন যেমন আমি এখানে মেয়াদকাল ৩০ দিন করে দিয়েছি।অর্থ্যাৎ এখানে ওই সমস্ত ইউজারকে ignore করা হয়েছে যারা ৩০ দিনের ভিতরে একবার সাইটে ঢোকেনা।

01.<?php
02.//Calculate 60 days in the future
03.
04.//seconds * minutes * hours * days + current time
05.
06.$inTwoMonths = 60 * 60 * 24 * 60 + time();
07.
08.setcookie('lastVisit', date("G:i - m/d/y"), $inTwoMonths);
09.
10.?>

কুকি উদ্ধার (retrieve) করা

যদি কুকির মেয়াদ শেষ না হয়ে থাকে তাহলে পিএইচপির $_COOKIE variable দিয়ে  কুকি retrieve করা যায়।

01.<?php
02.if(isset($_COOKIE['lastVisit']))
03.$visit = $_COOKIE['lastVisit'];
04.else
05.echo "You've got some stale cookies!";
06.
07.
08.echo "Your last visit was - ". $visit;
09.?>

এই কোডে isset ফাংশন ব্যাবহার করা হয়েছে এটা নিশ্চিত করতে যে “lastVisit”   কুকি এখনও ইউজারের পিসিতে আছে কিনা,যদি থাকে তাহলে ইউজার সর্বশেষ কবে visit করেছেন তা দেখা যাবে।

কুকি মুছে ফেলা

কুকি মোছার আগে এটা নিশ্চিত হয়ে নিন যে কুকির মেয়াদ শেষ হয়েছে কিনা।

1.<?php
2.// set the expiration date to one hour ago
3.setcookie("lastVisit", "", time()-3600);
4.?>
পিএইচপি সেশন টিউটোরিয়াল (PHP Session Tutorial in Bangla)

যখন কোন এপ্লিকেশন নিয়ে কাজ করেন,খোলেন,বন্ধ করেন বা কোন পরিবর্তন করার পর বন্ধ করেন এটা একটা সেশনের মত।কম্পিউটার বোঝে আপনি কে।আপনি কখন কাজ শুরু করেছেন,কখন শেষ করেছেন এসবের তথ্য তার কাছে থাকে।কিন্তু ইন্টারনেটে একটা সমস্যা হয়-ওয়েব সার্ভার বুঝতে পারেনা আপনি কে আর এতক্ষন কি করলেন।পিএইচপি সেশন এই সমস্যার সমাধান দিয়েছে।পিএইচপি সেশন ইউজারের তথ্য সার্ভারে সংরক্ষন করে রাখে পরে ব্যাবহারের জন্য।এই সেশন তথ্য অস্থায়ী এবং ইউজার সাইট ত্যাগ করার সাথে সাথে তা মুছে যায়।যদি স্থায়ীভাবে রাখতে চান তাহলে ডেটাবেসে সেভ করে রাখতে পারেন।পিএইচপি সেশন প্রতিটি ইউজারের জন্য অনন্য পরিচয় unique id (UID)  তৈরী করে।

পিএইচপি সেশনে ইউজারের তথ্য সংরক্ষন করার আগে সেশন শুরু করতে হবে।পিএইচপি সেশন session_start()   ফাংশন দিয়ে শুরু করতে হয় এবং <html> tag  এর  আগে রাখতে হয়।

1.<?php session_start(); ?>
2.
3.<html>
4.<body>
5.
6.</body>
7.</html>

এইকোডটি সার্ভারের সাহায্যে ইউজারের সেশন রেজিস্টার করবে এবং এই সেশনকে একটা আইডি দিয়ে তার তথ্য সেভ করা শুরু করবে।

সেশন ভ্যারিয়েবল সংরক্ষন করা

সেশন তথ্য সংরক্ষন ও উদ্ধারের সঠিক উপায় হল সেশন ভ্যারিয়েবল $_SESSION  ব্যাবহার করা।

01.<?php
02.session_start();
03.// store session data
04.$_SESSION['views']=1;
05.?>
06.<html>
07.<body>
08.
09.<?php
10.//retrieve session data
11.echo "Pageviews=". $_SESSION['views'];
12.?>
13.
14.</body>
15.</html>

আউটপুট

Pageviews=1

নিচের উদাহরনটি page view counter(page কতবার দেখা হয়েছে তা দেখার জন্য) তৈরীর জন্য।এটি করার জন্য isset() ফাংশনটি ব্যাবহার করা হয়।এই ফাংশনটি চেক করে দেখবে ‘views’ ভ্যারিয়েবল আগে থেকেই সেট করা আছে কিনা।যদি ‘views’ variable সেট করা থাকে তাহলে আমরা অমাদের counter বাড়াতে পারি।আর যদি না থাকে তাহলে ‘views’variable তৈরী করব এবং এখানে ১ সেট করে দেব।

01.<?php
02.session_start();
03.
04.if(isset($_SESSION['views']))
05.$_SESSION['views']=$_SESSION['views']+1;
06.else
07.$_SESSION['views']=1;
08.echo "Views=". $_SESSION['views'];
09.?>

একটা সেশন ধ্বংস করা (Destroying a session)

সেশন ডেটা মুছে ফেলতে unset() or the session_destroy() function  ব্যাবহার করা হয়।]

unset() function  নির্দিষ্ট একটা সেশন ভ্যারিয়েবল মুছে ফেলতে ব্যাবহৃত হয়।

1.<?php
2.unset($_SESSION['views']);
3.?>

একটা সেশনকে সম্পূর্নভাবে ধ্বংশ করতে session_destroy() function  ব্যাবহৃত হয়।

1.<?php
2.session_destroy();
3.?>

session_destroy() সেশনকে reset করবে এবং এতে করে সেভ করে রাখা সেশনের সব তথ্য হারাবেন।

 

 

 

 

 

 

 

পিএইচপি এরর হ্যান্ডলার টিউটোরিয়াল (PHP Error Handler Tutorial in Bangla)

যখন পিএইচপি স্ক্রিপ্ট লিখবেন বা কোন ওয়েব এপ্লিকেশন তৈরী করবেন তখন error handling এরএকটি গুরত্বপূর্ন ভুমিকা থাকে।যদি এরর (ভুল) চেকিং কোডে কোন ঘাটতি থাকে তাহলে আপনার প্রোগ্রামটি আর বেশি ভাল হবেনা এবং নিরাপত্তাজনিত ঝুকি থাকবে।

এই টিউটোরিয়ালে এরর চেকিং এর কিছু প্রচলিত পদ্ধতি নিয়ে আলোচনা করা হবে।যেমন

“die()” statements

Custom errors and error triggers

Error reporting

“die()” স্টেটমেন্ট  ব্যাবহার করে এরর হ্যান্ডল করা

এটা একটা ছোট কোড যেটা টেক্সক্ট ফাইল খুলবে।

1.<?php
2.$file=fopen("welcome.txt","r");
3.?>

যদি ফাইলটির কোন অস্তিতই না থাকে তাহলে ব্রাউজারে নিচের মত প্রদর্শন করবে।

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

ইউজারকে উপরের মত মেসেজ থেকে মুক্তি দিয়ে নিজের মত বোধগম্য মেসেজ দিতে পারেন।যেমন

01.<?php
02.if(!file_exists("welcome.txt"))
03.{
04.die("File not found");
05.}
06.else
07.{
08.$file=fopen("welcome.txt","r");
09.}
10.?>

এবার যদি ফাইলটি না পায় তাহলে এই মেসেজ দেখাবে।

File not found

এই কোডটি উপরের কোডের চেয়ে একটু ভিন্ন।এটা একটা সাধারন পদ্ধতি এতে error হলে স্ক্রিপ্ট বন্ধ হয়ে যাবে।তবে এ পদ্ধতি ব্যাবহার করা অনেক সময় সঠিক নয়।

কাস্টম এরর হ্যান্ডলার তৈরী করা

এখানে আমি সাধারন একটা পিএইচপি ফাংশন তৈরী করব যেটা এরর হলে যেন call করা যায়।এই ফাংশনে কমপক্ষে দুটি(error level and error message) এবং সর্বোচ্চ পাচটি (optionally: file, line-number, and the error context)প্যারামিটার থাকবে।

error_function(error_level,error_message,

error_file,error_line,error_context)

 

প্যারামিটার বর্ননা
error_level আবশ্যক।ইউজার কৃত ভুলের error report level সুনির্দিষ্ট করে।অবশ্যই একটাvalue number  থাকতে   হবে।নিচের টেবিলে সম্ভাব্য error report level দেয়া হল।
error_message আবশ্যক। ইউজার কৃত ভুলের জন্য error message নির্দিষ্ট করে।
error_file ঐচ্ছিক। ঐ ফাইলটির নাম উল্লেখ করে যেখানে ভুল হয়েছে।
error_line ঐচ্ছিক। ঐ লাইনটির নাম উল্লেখ করে যেখানে ভুল হয়েছে।
error_context ঐচ্ছিক।একটা অ্যারে উল্লেখ(Specifies an array) করে যেখানে সব ভ্যারিয়েবল এবং তাদের মান থাকে।

 

এরর রিপোর্টিং এর মান(value)

 

মান Constant বর্ননা
2 E_WARNING run-time errors. স্ক্রিপ্টের Execution বন্ধ হয়না
8 E_NOTICE Run-time notices.
256 E_USER_ERROR ইউজারকৃত মারাত্নক ভুল।এটা  E_ERROR এর মত যেটা প্রোগ্রামার সেট করে দেয় PHP
function trigger_error() ব্যাবহার করে।
512 E_USER_WARNING Runtime warnings generated by a call to trigger_error( )
1024 E_USER_NOTICE Runtime warnings generated by a call to trigger_error( )
4096 E_RECOVERABLE_ERROR Catchable fatal error.
8191 E_ALL সব errors এবং  warnings, শুধু level E_STRICT ছাড়া(E_STRICT PHP 6.0 এর E_ALL এর অংশ  হবে।)

এবার একটা ফাংশন তৈরী করব এরর হ্যান্ডল এর জন্য

1.function customError($errno, $errstr)
2.{
3.echo "<b>Error:</b> [$errno] $errstr<br />";
4.echo "Ending Script";
5.die();
6.}

এটা একটা সাধারন error handling ফাংশন।যখন এটা চলবে তখন এটা একটা error level এবং মেসেজ পাবে।এই লেভেল এবং মেসেজ আউটপুট হিসেবে দেখিয়ে স্ক্রিপ্ট সমাপ্ত করবে।

এরর হ্যান্ডলার সেট করা

পিএইচপিতে ডিফল্ট হিসেবে একটা error handler বিল্টইন থাকে।আপনি ইচ্ছে করলে এর পরিবর্তে  নিজের মত error handler  দিতে পারেন PHP তে।নিচের উদাহরনে দেখব কিভাবে এই নিজের তৈরী error handler ব্যাবহার করতে হয়

set_error_handler(“customError”);

যেহেতু error handle করার জন্য আমরা নিজের তৈরী ফাংশন ব্যাবহার করতে চাই,তাই set_error_handler()  এর একটা প্যারামিটার দরকার,২য় আরেকটা প্যারামিটার যোগ করা যেতে পারে error level এর জন্য।

এরকম একটা উদাহরন

01.<?php
02.//error handler function
03.function customError($errno, $errstr)
04.{
05.echo "<b>Error:</b> [$errno] $errstr";
06.}
07.
08.//set error handler
09.set_error_handler("customError");
10.
11.//trigger error
12.echo($test);
13.?>

উপরের কোডের আউটপুট হবে এমন

Error: [8] Undefined variable: test

কোন ভুলকে trigger করা

কোন স্ক্রিপ্ট যেখানে ইউজার ডেটা ইনপুট করতে পারে সেখানে trigger করা উপকারী যখন ইউজার ভুল/অবৈধ ইনপুট করবে।trigger_error() function দিয়ে এটা করা হয়।এই উদাহরনে test ভ্যারিয়েবল যদি ১ এর চেয়ে বড় হয় তখন error হবে।

1.<?php
2.$test=2;
3.if ($test>1)
4.{
5.trigger_error("Value must be 1 or below");
6.}
7.?>

আউটপুট

Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

একটা error কে স্ক্রিপ্টের যেকোন জায়গায় trigger করা যায় এবং আরেকটা প্যারামিটার যোগ করে নির্দিষ্ট করে দিতে পারেন যে কোন error level টি trigger করা হয়েছে।

সম্ভাব্য error এর ধরন

  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE

উদাহরন

যদি test ভ্যারিয়েবল এর মান ১ এর চেয়ে বেশি হয় তাহলে এখানে E_USER_WARNING error টি হবে এবং এখন আমরা নিজের তৈরী error handler টি ব্যাবহার করব।

01.<?php
02.//error handler function
03.function customError($errno, $errstr)
04.{
05.echo "<b>Error:</b> [$errno] $errstr<br />";
06.echo "Ending Script";
07.die();
08.}
09.
10.//set error handler
11.set_error_handler("customError",E_USER_WARNING);
12.
13.//trigger error
14.$test=2;
15.if ($test>1)
16.{
17.trigger_error("Value must be 1 or below",E_USER_WARNING);
18.}
19.?>

আউটপুট

Error: [512] Value must be 1 or below
Ending Script

এরর লগিং

PHP তে error_log()  নামের একটা ফাংশন বিল্টইন আছে এটা দিয়ে যেখানে ইচ্ছা error log(যে ভুলটি হবে তার তথ্য)টি পাঠাতে পারেন এমনকি নিজের মেইল ঠিকানাতেও।

ইমেইলের সাহায্যে এরর মেসেজ পাঠানো

<?php
//error handler function
function customError($errno, $errstr)
{
echo “<b>Error:</b> [$errno] $errstr<br />”;
echo “Webmaster has been notified”;
error_log(“Error: [$errno] $errstr”,1,
someone@example.com“,”From: webmaster@example.com“);
}

//set error handler
set_error_handler(“customError”,E_USER_WARNING);

//trigger error
$test=2;
if ($test>1)
{
trigger_error(“Value must be 1 or below”,E_USER_WARNING);
}
?>

আউটপুট

Error: [512] Value must be 1 or below
Webmaster has been notified

এই কোডের কারনে এমন একটা মেইল পাবে

Error: [512] Value must be 1 or below

 

 

 

 

 

 

 

 

পিএইচপি ফিল্টার টিউটোরিয়াল (PHP Filter Tutorial in Bangla)

যেসব ডেটা অনিরাপদ উৎস যেমন ইউজার ইনপুট থেকে আসে পিএইচপি ফিল্টার তাদের গ্রহনযোগ্য(validate/acceptable) এবং ছাকতে(filter) ব্যাবহৃত হয়।কোন ওয়েব এপ্লিকেশনে এটা খুবই গুরত্বপূর্ন।বেশিরভাগ ওয়েব এপ্লিকেশন বাইরের ইনপুটের উপর নির্ভর করে।আপনি যখন কোন ওয়েব এপ্লিকেশন তৈরী করবেন তখন বাইরে যেখান থেকেই কোন ডেটা আসুক না কেন সেটা filter করে নেয়াই বুদ্ধিমানের কাজ হবে।কারন এটা নিরাপত্তাজনিত বিষয়।ডেটা বিভিন্ন উৎস থেকে আসতে পারে যেমন-

  • একটা ফর্মের ইনপুটকৃত ডেটা
  • কুকি
  • ওয়েব সার্ভিসেস ডেটা
  • সার্ভার ভেরিয়েবল
  • ডেটাবেস কোয়েরির ফলাফল

ফাংশন এবং ফিল্টার

কোন ভ্যারিয়েবলকে filter করতে নিচের ফাংশনগুলি ব্যাবহার করা হয়-

  • filter_var() – নির্দিষ্ট একটা ফিল্টার দিয়ে একটা ভ্যারিয়েবলকে filter করে।
  • filter_var_array() – একই বা ভিন্ন ফিল্টার দিয়ে একাধিক ভ্যারিয়েবলকে ফিল্টার করে।
  • filter_input – একটা ভ্যারিয়েবল ইনপুট পায় এবং ফিল্টার করে
  • filter_input_array – একাধিক ভ্যারিয়েবলের ইনপুট পায় এবং একই বা ভিন্ন ফিল্টার দিয়ে ফিল্টার করে।
  • নিচের উদাহরনে filter_var() function দিয়ে একটা  পূর্নসংখ্যা validate করব
01.<?php
02.$int = 123;
03.
04.if(!filter_var($int, FILTER_VALIDATE_INT))
05.{
06.echo("Integer is not valid");
07.}
08.else
09.{
10.echo("Integer is valid");
11.}
12.?>

এই কোডটি “FILTER_VALIDATE_INT”  দ্বারা$int ভ্যারিয়েবলকে ফিল্টার করবে,এখানে আউটপুট “Integer is valid” কারন 123 একটা integer.

Validating এবং Sanitizing

ফিল্টার ২ ধরনের

Validating filters:

  • user input validate করতে ব্যাবহৃত হয়
  • নিয়ম করাকরি করে দেয়া হয় (যেমন URL বা  E-Mail validating)

Sanitizing filters:

  • একটা স্ট্রিং এ নির্দিষ্ট কোন অক্ষর অনুমোদন পাবে কিনা সেজন্য ব্যাবহার হয়।
  • সবসময় স্ট্রিং return করে।

Options এবং Flags

Option এবং Flag কোন নির্দিষ্ট ফিল্টারে অতিরিক্ত filtering option যোগ করতে ব্যাবহৃত হয়।বিভিন্ন ফিল্টারে বিভিন্ন option এবং flag আছে।নিচের উদাহরনে একটি পূর্ন সংখ্যাকে validate করতে filter_var() ফিল্টার এবং “min_range” ও “max_range” option ব্যাবহার করা হয়েছে।

01.<?php
02.$var=300;
03.
04.$int_options = array(
05."options"=>array
06.(
07."min_range"=>0,
08."max_range"=>256
09.)
10.);
11.
12.if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
13.{
14.echo("Integer is not valid");
15.}
16.else
17.{
18.echo("Integer is valid");
19.}
20.?>

উপরের কোডের মত options অবশ্যই associative array তে রাখতে হবে এবং “options’’ নামে রাখতে হবে।যদি flag ব্যাবহার করা হয় তাহলে এটা অ্যারে হওয়া জরুরি নয়।এখানে যেহেতু  ৩০০ পূর্নসংখ্যা কিন্তু নির্দিষ্ট পরিসীমার মধ্যে নয় তাই এর আউটপুট হবে “Integer is not valid”.

Validate Input

প্রথমে নিশ্চিত হতে হবে যে ইনপুটকৃত ডেটা যেটা আমরা খুজছি তার অস্তিত্ব আছে কিনা।তারপর filter_input() function  দ্বারা  ইনপুটকৃত ডেটাকে ফিল্টার করতে হবে।উদাহরন

01.<?php
02.if(!filter_has_var(INPUT_GET, "email"))
03.{
04.echo("Input type does not exist");
05.}
06.else
07.{
08.if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
09.{
10.echo "E-Mail is not valid";
11.}
12.else
13.{
14.echo "E-Mail is valid";
15.}
16.}
17.?>

ব্যাখ্যা:উপরের উদাহরনে একটা ইনপুট(ইমেইল) আছে যা “GET” method ব্যাবহার করে পাঠানো হয়েছে।

১.চেক কর ইনপুট ভ্যারিয়েবল এ “email” যেটা  GET মেথড ব্যাবহার করে পাঠানো হয়েছে সেটার অস্তিত্ব আছে কিনা।

২.যদি ইনপুট ভ্যারিয়েবল এর অস্তিত্ব থাকে তাহলে চেক কর এটা সঠিক ইমেইল এড্রেস কিনা।

Sanitize Input

প্রথমে নিশ্চিত হতে হবে যে ইনপুটকৃত ডেটা যেটা আমরা খুজছি তার অস্তিত্ব আছে কিনা।তারপর filter_input() function  দ্বারা  ইনপুটকৃত ডেটাকে sanitize করতে হবে।উদাহরন

01.<?php
02.if(!filter_has_var(INPUT_POST, "url"))
03.{
04.echo("Input type does not exist");
05.}
06.else
07.{
08.$url = filter_input(INPUT_POST,
09."url", FILTER_SANITIZE_URL);
10.}
11.?>

ব্যাখ্যা:উপরের উদাহরনে একটা ইনপুট(url) আছে যা “POST” method ব্যাবহার করে পাঠানো হয়েছে।

১.চেক কর ইনপুট ভ্যারিয়েবল এ “url” যেটা  POST  মেথড ব্যাবহার করে পাঠানো হয়েছে সেটার অস্তিত্ব আছে কিনা।

২.যদি ইনপুট ভ্যারিয়েবল এর অস্তিত্ব থাকে তাহলে sanitize(অপ্রয়োজনীয় অক্ষরকে ফেলে দেয়া) কর এবং এটা $url variable এ সংরক্ষন কর।

যদি ইনপুট ভ্যারিয়েবল এধরনের স্ট্রিং হয় “http://www.W3ååSchøøools.com/” তাহলে $url variable sanitizing এর পর এরকম হবে।

http://www.W3Schools.com/

একাধিক ইনপুট ফিল্টার করা

একটা ফর্মে সাধারনত একাধিক ইনপুট ফিল্ড থাকে।একটা একটা করে ফাংশন call করে এগুলো filter করার চেয়ে আমরা filter_var_array বা the filter_input_array function ব্যাবহার করতে পারি।যেমন

01.<?php
02.$filters = array
03.(
04."name" => array
05.(
06."filter"=>FILTER_SANITIZE_STRING
07.),
08."age" => array
09.(
10."filter"=>FILTER_VALIDATE_INT,
11."options"=>array
12.(
13."min_range"=>1,
14."max_range"=>120
15.)
16.),
17."email"=> FILTER_VALIDATE_EMAIL,
18.);
19.
20.$result = filter_input_array(INPUT_GET, $filters);
21.
22.if (!$result["age"])
23.{
24.echo("Age must be a number between 1 and 120.<br />");
25.}
26.elseif(!$result["email"])
27.{
28.echo("E-Mail is not valid.<br />");
29.}
30.else
31.{
32.echo("User input is valid");
33.}
34.?>

উপরের উদাহরনে ৩ টি ইনপুট(name, age and email) আছে যা GET Method ব্যাবহার করে পাঠানো হয়েছে।

 

 

 

 

 

 

 

 

 

পিএইচপি মেইল ফাংশন টিউটোরিয়াল

আপনি PHP mail() ফাংশন দ্বারা সরাসরি ওয়েব পেজ থেকে ইমেইল পাঠাতে পারেন।

সংকেত

1.mail(to,subject,message,headers,parameters)
প্যারামিটার বর্ননা
to জরুরি।এখানে যে ইমেইল ঠিকানা থাকবে সেই ঠিকানায় মেইল যাবে।
subject জরুরি।এখানে বিষয় উল্লেখ থাকবে।
message জরুরি।এখানে মেসেজ থাকবে যা পাঠানো হবে।মেসেজের লাইনগুলি (\n) চিহ্ন দ্বারা পৃথক হবে এবং কোন লাইন ৭০ অক্ষরের বেশি হবেনা।
headers ঐচ্ছিক।এর দ্বারা অতিরিক্ত শিরোনাম যোগ করা যাবে।যেমন:From,Cc,Bcc.
parameters ঐচ্ছিক।অতিরিক্ত প্যারামিটার যোগ করা যায়।

নোট:মেইল ফাংশন কার্যকর করার জন্য আপনার সিস্টেমে ইমেইল সার্ভার ইনস্টল থাকতে হবে এবং php.ini ফাইলটি সেই অনুযায়ী কনফিগার করে নিতে হবে>>বুঝতে সমস্যা হচ্ছে?বিব্রত হওয়ার দরকার নেই-আপনাকে কিছুই করতে হবেনা।কারন আমরা যেসব হোস্টিং প্রোভাইডারের কাছে আমাদের সাইটগুলি হোস্টিং করাই তাদের সার্ভারে এসব করাই থাকে।এসব থাক্ আপনি শুধু নিচের টুকু ভাল করে পড়ুন।

ধরুন আপনার একটা টিউটোরিয়াল সাইট আছে এবং প্রতিটি টিউটোরিয়ালের পর মন্তব্য করার ব্যাবস্থা আছে আর আপনি চাচ্ছেন যে মন্তব্যগুলি আপনার মেইল ঠিকানায় চলে আসুক যাতে বুঝতে পারেন আপনার টিউটোরিয়াল টি কতজনের কাছে ভাল বা খারাপ লেগেছে।অর্থ্যাৎ ফিডব্যাক ফর্ম।এটা করার জন্য পিএইচপি মেইল ফাংশন।

নিচের উদাহরনে একটি টেক্সট মেসেজ পাঠানো হয়েছে ঐ মেইলে যা লিখেছি (অর্থ্যাৎ someone@example.com এই মেইলে),এখানে প্রথমে কিছু ভেরিয়েবল ডিক্লেয়ার করেছি ($to, $subject, $message, $from, $headers) তারপর এই ভেরিয়েবল mail()  ফাংশনে ব্যবহার করে মেইল পাঠানো হয়েছে।

 

<?php
$to = “someone@example.com”;
$subject = “Test mail”;
$message = “Hello! This is a simple email message.”;
$from = “someonelse@example.com”;
$headers = “From:” . $from;
mail($to,$subject,$message,$headers);
echo “Mail Sent.”;
?>

 

পিএইচপি ফিডব্যাক ফর্ম

আপনার সাইটে একটা ফিডব্যাক ফর্ম যোগ করতে নিচের কোডটি লিখে mailform.php নামে সেভ করুন আর মেইলের জায়গায় যে মেইলে তথ্য যাবে (যে মেইলে ফিডব্যাক পেতে চান) সে মেইলের নাম লিখে দিন।

mailform.php ফাইল

 

<html>
<body>

<?php
if (isset($_REQUEST[’email’]))
//if “email” is filled out, send email
{
//send email
$email = $_REQUEST[’email’] ;
$subject = $_REQUEST[‘subject’] ;
$message = $_REQUEST[‘message’] ;
mail( “someone@example.com”, “Subject: $subject”,
$message, “From: $email” );
echo “Thank you for using our mail form”;
}
else
//if “email” is not filled out, display the form
{
echo “<form method=’post’ action=’mailform.php’>
Email: <input name=’email’ type=’text’ /><br />
Subject: <input name=’subject’ type=’text’ /><br />
Message:<br />
<textarea name=’message’ rows=’15’ cols=’40’>
</textarea><br />
<input type=’submit’ />
</form>”;
}
?>

</body>
</html>

 

নোট: লোকালহোস্টে (লোকাল সার্ভারে) যদি এই পরীক্ষা করতে চান তাহলে আপনার সিস্টেমে মেইল সার্ভার ইনস্টল থাকতে হবে।পাবলিক সার্ভারে করলে কাজ হবে কারন এখানে মেইল সিস্টেম ইনস্টল দেয়াই থাকে।

ব্যাখ্যা:

প্রথমে দেখ যে ইমেইল এর ঘরটি পুরন করেছে কিনা

যদি না করে তাহলে HTML ফর্মটিই  দেখাও

যদি পুরন করে তাহলে ফর্ম থেকে ডেটা নিয়ে মেইল পাঠিয়ে দাও

এই ৩টি logic এখানে ব্যাবহৃত হয়েছে।

এরপর যখন ফর্ম পুরন করে সাবমিট বাটনে ক্লিক করবে তখন পেজটি reload হয় এবং যখন দেখে ইমেইল এর ঘরটি পুরন করেছে তখন মেইল পাঠিয়ে দেয়।

টিপস:এটা নিরাপদ পদ্ধতি নয় এতে করে এই ফর্ম ব্যাবহার করে অবৈধ ইউজার মেইল করে দিতে পারে এটাকে বলে ইমেইল ইনজেকশন।ইমেইল ইনজেকশন থেকে বাচার উপায় হল form validation.যা PHP ফিল্টার (Filter) অংশের টিউটোরিয়ালে বর্ননা করেছি।

 

 

 

 

 

 

 

 

পিএইচপি রেগুলার এক্সপ্রেশন (PHP Regular Expression)

পৃষ্ঠা 1 মোট পৃষ্ঠা 3

নিজের কম্পিউটারে অনেক সময় আমরা ফাইল সার্চ করি যেমন আপনি যদি My Computer (Win7) এ গিয়ে ডানদিকে উপরে সার্চ বক্সে *.txt লিখে এন্টার দেন তাহলে আপনার পিসিতে থাকা সব txt ফাইল এনে হাজির করবে।*.txt হচ্ছে একটা প্যাটার্ন।এভাবে আরও নির্দিষ্ট প্যাটার্ন লিখে আপনি নির্দিষ্ট কিছু ফাইল বের করতে পারেন।

 

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

 

যেমন আপনার সাইটে ধরুন একটা ফর্ম আছে যেখানে ইউজারকে মোবাইল নম্বর টাইপ করতে হবে।আপনি চাচ্ছেন যে সিটিসেল ছাড়া অন্য কোন মেবাইল নম্বর দেয়া যাবেনা তাহলে preg_match() ফাংশন দিয়ে যাচাই করতে পারবেন সে সিটিসেল নাম্বার দিয়েছে কিনা।অথবা আপনার একটা ব্লগ আছে আপনি চান কেউ যেন মন্তব্যের সাথে কোন লিংক দিতে না পারে।তখন <a> এবং </a> ট্যাগ অন্য কোন ট্যাগ দিয়ে রিপ্লেস করতে পারবেন এধরনের ফাংশন আছে।

 

যাইহোক এধরনের অনেক ফাংশন আছে যা দিয়ে নানান ধরনের কাজ করা যায়।ফাংশন গুলি বোঝা এবং ব্যবহার করা সহজ।এই ফাংশনগুলিতে আর্গুমেন্ট হিসেবে প্যাটার্ন দিতে হয় আর এই প্যাটার্নগুলি লেখা বেশ ঝামেলার।কারন প্যাটার্ন লেখার অনেক অনেক অনেক… নিয়ম আছে।প্যাটার্নে অনেক ধরনের চিহ্ন ব্যবহার করা হয় এগুলি কষ্ট করে মনে রাখতে হবে।এই প্যাটার্নগুলিই হচ্ছে রেগুলার এক্সপ্রেশন।যেমন

\d{3}(-\d{5})? এটা একটা প্যাটার্ন এর অর্থ হচ্ছে ৮ সংখ্যার কোন একটা অংক যেখানে ৩টি সংখ্যার পর  একটা হাইফেন থাকবে (-) আর শেষের ৫টি সংখ্যা ঐচ্ছিক।এই প্যাটার্নটি মিলবে 254-65824,215-65497,646 এই ধরনের অংকগুলির সাথে।

 

ব্যাখ্যা:

\d অর্থ একটা সংখ্যা ০ থেকে ৯ এর মধ্যে

{3} অর্থ আগের আইটেমটি মোট ৩ বার হবে (অর্থ্যাৎ ৩টি সংখ্যা হবে)

– এটাকে বলে লিটারেল অক্ষর (literal character)

\d একটা সংখ্যা ০ থেকে ৯ এর মধ্যে

{5} অর্থ আগের আইটেমটি মোট ৫ বার হবে (অর্থ্যাৎ ৫টি সংখ্যা হবে)

()? এর অর্থ ব্রাকেটের ভিতর যা আছে তা ঐচ্ছিক (এই চিহ্নের কারনে উপরের 646 এর সাথেও মিলবে কারন হাইফেন থেকে শুরু করে বাকি অংশ ঐচ্ছিক)

 

 

 

 

 

পিএইচপি রেগুলার এক্সপ্রেশন (PHP Regular Expression) – প্যাটার্ন লেখার নিয়ম

পৃষ্ঠা 2 মোট পৃষ্ঠা 3

 

 

পিএইচপি তে রেগুলার এক্সপ্রেশন নিয়ে কাজ করার জন্য আগে দুটি অপশন ছিল।এর মধ্যে POSIX রেগুলার এক্সপ্রেশন এখন বাদ দেয়া হয়েছে।এখন শুধু PCRE রেগুলার এক্সপ্রেশন এর সাপোর্ট আছে।টেক্সট প্রসেসিং এর এই সিস্টেমটা পার্ল ল্যাংগুয়েজ থেকে নিয়ে পরে পিএইচপির জন্য যোগ্য করা হয়েছে।পার্ল ল্যাংগুয়েজের এই টেক্সট প্রসেসিং সিস্টেম বিশ্বের সব ল্যাংগুয়েজের চেয়ে বেশি উন্নত।শুধু পিএইচপি নয় আরও অনেক ল্যাংগুয়েজ আছে যারা এই সিস্টেম তাদের ল্যাংগুয়েজের জন্য কমপিটাবল করে নিয়েছে।তবে যে সিস্টেমেরই ফাংশন ব্যবহার করেন না কেন প্যাটার্ন লেখার নিয়ম প্রায়ই একই।

প্যাটার্ন লেখার নিয়ম:

ডিলিমিটার (Delimiters)

ফাংশনে যখন প্যাটার্ন লিখবেন তখন অবশ্যই প্যাটার্নের আগে পিছে ডিলিমিটার (সীমাবদ্ধক) দিতে হবে।অক্ষর,নাম্বার,ব্যাকস্লাশ,স্পেস বাদে যেকোন কিছু ডিলিমিটার হিসেবে ব্যবহার করতে পারবেন।সাধারনত “/” (ফরওয়ার্ড স্লাশ) বেশি ব্যবহার করা হয়।আপনি ইচ্ছে করলে “#” (হ্যাশ), “%” এসব ব্যবহার করতে পারবেন।

প্যাটার্ন লেখার সময় যেসব চিহ্ন ব্যবহার করা হয় এইসব চিহ্নই যদি খুজে বের করতে হয় (match করতে হয়) তাহলে এসব চিহ্নের আগে একটা “\” (ব্যাকস্লাশ) দিতে হবে।কয়েকটা প্যাটার্ন

/web/

#[a-z]#

/[a\-z]/

শেষের প্যাটার্নটি ছোট হাতের a,হাইফেন -, এবং ছোটহাতের z এই ৩ টির মধ্যে যেকোনটির সাথে মিলবে।অর্থ্যাৎ হয় a অথবা – অথবা z

কিন্তু দ্বিতীয় প্যাটার্নটি  ছোটহাতের a থেকে z পর্যন্ত যেকোনটির সাথে মিলবে।থার্ড ব্রাকেটের মধ্যে হাইফেন – এর বিশেষ অর্থ আছে।এটা দিয়ে পরিসীমা বুঝায় অর্থ্যাৎ কত থেকে শুরু করে কত পর্যন্ত হবে।এই হাইফেন – টির সামনে (৩য় প্যাটার্নে) ব্যাকস্লাশ দিয়ে এটাকে লিটারেল ক্যারেক্টার বানিয়ে দিয়েছি।

 

মেটা ক্যারেক্টার (Meta Characters)

প্যাটার্নে কোন অক্ষর লিখলে সেটা গিয়ে কাঙ্খিত টেক্সটে খুজবে যেমন উপরে প্রথম প্যাটার্নটি web এটি মিলাবে।এগুলি হচ্ছে লিটারেল ক্যারেক্টার কিন্তু কিছু অক্ষর বা চিহ্ন আছে যেগুলি প্যাটার্নে ব্যবহার করলে সে নিজেকে মিলাবে না বরং তার বিশেষ অর্থ আছে।নিচের ক্যারেক্টারগুলির এর বিশেষ অর্থ আছে প্যাটার্নে,এগুলিকে মেটা ক্যারেক্টার বলে।

$ ( ) * + . ? [  \ ^ {  |

এই চিহ্নগুলি যখন প্যাটার্নে ব্যবহার করবেন তখন এগুলি নিজেকে মিলাবে না বরং বিশেষ অর্থ প্রকাশ করবে যেমন /!$/ এই প্যাটার্নটি মিলবে Joomla!, Hooray! এগুলির সাথে।! এর পরে ডলার সাইন দিলে যে লাইনের শেষে ! চিহ্ন আছে সেটার সাথে মিলবে।

 

. (ডট) দিয়ে যেকোন একটা ক্যারেক্টার বোঝায়।যেমন /re.oan/ এই প্যাটার্নটি মিলবে rejoan,rezoan ইত্যাদি।অর্থ্যাৎ e এবং o এর মাঝখানে যেকোন একটা ক্যারেক্টার থাকতে হবে।এমনকি একটা সংখ্যা হলেও থাকতে হবে।

 

| এই বার চিহ্ন দিয়ে অপশন দেয়া যায় যেমন /rejoan|rezoan/ এই প্যাটার্নটির অর্থ হয় rejoan না হয় rezoan ইচ্ছে করলে দুটির বেশি অপশন দিতে পারেন যেমন /rejoan|rezoan|rezwan/ এভাবে।প্রথম ব্রাকেট দিয়ে আরও উন্নত করে লেখা যায় যেমন /re(j|z)oan)/ এর অর্থ হচ্ছে প্রথমে শুরু হবে re দিয়ে এরপর হয় j অথবা z এবং শেষ হবে oan দিয়ে।

 

কোয়ান্টিফায়ার (Quantifier)

মেটা ক্যারেক্টার এর মধ্যে *,?,+ এগুলিকে আবার বলে কোয়ান্টিফায়ার (Quantifier) এগুলি যে আইটেমের পরে দিবেন সেটা কতবার হবে এটা বোঝাবে।যেমন /r+/ এর দ্বারা বোঝায় কমপক্ষে একটা r থাকতে হবে।এটা মিলবে r,rr,ro,refuse ইত্যাদি।

* এটা যদি কোন আইটেমের সামনে থাকে তাহলে সেই আইটেমটি শূন্য থেকে শুরু করে আরও বেশি হতে পারে।যেমন /b*s/ মিলবে s,bs,bbbbbs ইত্যাদি।

? এটা কোন আইটেমের সামনে থাকলে সেটা ঐচ্ছিক হয়ে যায়।এটার আলোচনা প্রথম উদাহরনেও হয়েছে।

 

ক্যারেক্টার ক্লাস (Character Class)

প্যাটার্নে থার্ড ব্রাকেটের ভিতর যা থাকবে তাই ক্যারেক্টার ক্লাস।ক্যারেক্টার ক্লাসের ভিতর থাকা ক্যারেক্টার গুলির যেকোন একটি মিলবে।এর আগে উদাহরনে যেমন দেখানো হয়েছে।যেমন [a-z] এর অর্থ হচ্ছে হয় a নাহয় b নাহয় c ….এভাবে z পর্যন্ত।মেটা ক্যারেক্টারগুলির অর্থ ক্যারেক্টার ক্লাসের ভিতরে একরকম আর এর বাইরে আরেক রকম।

যেমন ক্যারেট (^) এই মেটা ক্যারেক্টার টি যদি ক্যারেক্টার ক্লাসের বাইরে থাকে তাহলে এর অর্থ যেটা হবে সেটা ক্যারেক্টার ক্লাসের ভিতরে থাকলে যা হবে তার সম্পূর্ন বিপরীত।যেমন

/^web/ এই প্যাটার্নটি মিলবে ঐ লাইনের সাথে যে লাইন web দিয়ে শুরু হয়েছে।কিন্তু এই ক্যারেট চিহ্নই যদি ক্যারেক্টার ক্লাসের ভিতরে থাকে তাহলে অর্থ হবে এর বিপরীত যেমন /[^web]/ এর দ্বারা শুধু সেটা মিলবে যেটা web দিয়ে শুরু হয়নি।

/[^a-zA-Z]/ এর দ্বারা ছোট এবং বড় হাতের a থেকে z পর্যন্ত সব বাদ দিয়ে খুজবে।

 

 

ব্যাকস্লাশ দিয়ে তৈরী কিছূ ক্যারেক্টারের অর্থ

\d এটা প্যাটার্নে থাকলে বুঝতে হবে সেখানে কোন সংখ্যা হবে।

\D এটা থাকলে বুঝতে হবে সেখানে কোন সংখ্যা হতে পারবেনা।আগেরটার বিপরীত

\s স্পেস

\S আগেরটার বিপরীত অর্থ্যাৎ স্পেস নয়

এই ক্যারেক্টারগুলি একেকটা একটা ক্যারেক্টার ক্লাসের মত যেমন \d হচ্ছে [0-9] এর সমান,আবার \D হচ্ছে [^0-9] এর সমান।ধারনা আসছেনা এবার?এখানে গুরত্বপূর্ন কয়েকটি আলোচনা করা হল আরও আছে প্রয়োজেনে পিএইচপি ম্যানুয়াল দেখে নিবেন।

যাইহোক এরুপ আরো অনেক নিয়ম আছে প্যাটার্ন লেখার এমনকি রেগুলার এক্সপ্রেশন (প্যাটার্ন) এর উপর বড় বড় বই পর্যন্ত আছে।সব নিয়ম আলোচনা করা এখানে সম্ভব নয়।এখানে গুরত্বপূর্ন এবং সেইসব প্রয়োজনীয় বিষয়ের আলোচনা করা হয়েছে যেগুলি দিয়ে রেগুলার এক্সপ্রেশন সম্পর্কে ধারনা স্বচ্ছ হয়।

 

 

 

 

 

 

 

 

পিএইচপি রেগুলার এক্সপ্রেশন (PHP Regular Expression) – রেগুলার এক্সপ্রেশন সম্পর্কিত ফাংশন

পৃষ্ঠা 3 মোট পৃষ্ঠা 3

 

 

পিএইচপিতে ৮ টি ফাংশন আছে রেগুলার এক্সপ্রেশন নিয়ে কাজ করার জন্য।প্রয়োজনীয়গুলি নিচে আলোচনা করা হল

 

preg_match() ফাংশন

রেগুলার এক্সপ্রেশনের ফাংশনগুলিতে সবসময় প্রথম প্যারামিটার হিসেবে প্যাটার্ন থাকে।ফাংশনের কাজ হচ্ছে প্যাটার্নটি গিয়ে খুজবে যদি পায় তাহলে true এবং যদি না পায় তাহলে false রিটার্ন করবে।যেমন

1.<?php
2.$line = "Webcoachbd is a informative site about web development";
3.if(preg_match("/\bwebcoachbd\b/i",$line)){
4.echo "match found";
5.}else{
6.echo "match not found";
7.}
8.?>

আউটপুট match found আসবে

ব্যাখ্যা:পিএইচপিতে প্যাটার্ন ডাবল বা সিঙ্গেল কোটেশনের মধ্যে রাখতে হবে অর্থ্যাৎ প্রতিটি প্যাটার্ন শেষ পর্যন্ত একটা শব্দ বা স্ট্রিং হবে।যাইহোক প্যাটার্নটি দেখুন দুটি ফরওয়ার্ড স্লাশ (/) এর ভিতর রেখেছি যা হচ্ছে এখানে ডিলিমিটার (delimiter).ডিলিমিটারের বাইরে একটা i দিয়েছি এটা হচ্ছে প্যাটার্ন মডিফায়ার (modifier)।মডিফায়ার এভাবে দিতে হয়,এটার দ্বারা বুঝাচ্ছে যে শব্দটি মিলবে সেটা case insensitive (ছোট বা বড় হাতের যেকোনটি) হতে পারবে।

এরপর \b দ্বারা ওয়ার্ড বাউন্ডারি (word boundary) বোঝায়,দেখুন webcoachbd এর দুপাশেই এই বাউন্ডারি দিয়েছি অর্থ্যাৎ এই শব্দের বাইরে কোন কিছু হতে পারবেনা।

তাহলে সবশেষে আমাদের প্যাটার্নটির অর্থ হল webcoachbd শব্দটি যেটা ছোট বা বড় হাতের হবে।আর ফাংশনটি $line এ গিয়ে এই স্ট্রিং (প্যাটার্নটি) খুজবে যেহেতু $line এ Webcoachbd আছে তাই match found দেখাবে।

 

preg_replace() ফাংশন

এই ফাংশন দিয়ে কোন স্ট্রিং বা অ্যারেতে একটা শব্দ খুজে সেটা ইচ্ছেমত যেকোন স্ট্রিং বা অ্যারে দ্বারা রিপ্লেস করা যাবে।যেমন আপনার সাইটে যদি এমন ফর্ম থাকে যেখানে ক্রেডিট কার্ড নাম্বার দিতে হবে,কার্ডের নাম্বারে যেহেতু -,স্পেস ইত্যাদি থাকেনা তাই ইউজার এসব টাইপ করলে আপনি তা উঠিয়ে নিতে পারেন যেমন

1.<?php
2.preg_replace('#[\-\s.]#', '', $card);
3.?>

ব্যাখ্যা: $card ভেরিয়েবল থেকে ইউজারের ইনপুটকৃত ডেটা নিয়ে পরীক্ষা করে দেখবে যে এখানে হাইফেন (-),স্পেস বা ডট চিহ্ন আছে কিনা যদি থাকে তাহলে সেটা মুছে দেবে (” দিয়ে রিপ্লেস হবে)।” এর ভিতর যেটাই দিবেন সেটা দিয়েই রিপ্লেস হবে।

 

preg_match_all() ফাংশন

এটা preg_match() ফাংশনের মতই শুধু পার্থক্য হচ্ছে এই ফাংশন প্রথমবার মেলার পর থেমে যাবেনা বরং সবগুলি মিল বের করবে।এই ফাংশন একটা নাম্বার রিটার্ন করবে (যতবার মিলেছে সেই সংখ্যাটি)।

01.<?php
02.$html = <<<PARA
03.<p>Bnagladesh is a country of natural beauty</p>
04.<p>Please share webcoachbd inn your facebook n twitter</P>
05.PARA;
06.if (preg_match_all('@<p>@', $html, $all_match)>1){
07.echo "there are more than one p tag";
08.}else{
09.echo "less than";
10.}
11.?>

ব্যাখ্যা:এখানে আউটপুট there are more than one p tag এটা আসবে কারন $html এ একাধিক p tag আছে।$all_match ভেরিয়েবলে একটা অ্যারে তৈরী হবে যে মানগুলি মিলবে সেগুলি নিয়ে।এখানে প্যাটার্নে @ হচ্ছে ডিলিমিটার।

 

preg_replace_callback() ফাংশন

এই ফাংশন preg_replace() ফাংশনের মতই শুধু পার্থক্য হচ্ছে preg_replace ফাংশনে যে আর্গুমেন্ট দিয়ে রিপ্লেসমেন্ট হয় সেই আর্গুমেন্টের জায়গায় পিএইচপি কলব্যাক বসবে।এই কলব্যাক এর দ্বারা এখানে একটি ফাংশন কল হবে এবং এই ফাংশনটি এখানে ঐ শব্দগুলি (বা অ্যারে) বসাবে যেটা দিয়ে রিপ্লেসমেন্ট করা হবে।যেমন

01.<?php
02.function acronym($matches) {
03.$acronyms = array(
04.'PHP' => 'PHP Hypertext Processor',
05.'WWW' => 'World Wide Web');
06.return $acronyms[$matches[1]];
07.}
08.$text = " now a days<acronym>PHP</acronym> is the
09.popular language for <acronym>WWW</acronym>.";
10.$newtext = preg_replace_callback("/<acronym>(.*)<\/acronym>/", 'acronym',
11.$text);
12.print_r($newtext);
13.?>

ব্যাখ্যা: ১০ নম্বর লাইনে প্যাটার্ন /<acronym>(.*)<\/acronym>/ এর দ্বারা বুঝাচ্ছে যে <acronym> এবং এর ভিতর যা আছে সব মিলাবে।এরপর acronym স্ট্রিং দ্বারা acronym ফাংশন কল হবে (কলব্যাক ফাংশন এভাবে স্ট্রিং লিখে কল করতে হয়,acronym() এভাবে লিখতে হবেনা)।এই ফাংশন কল হওয়ার সাথে রিপ্লেসমেন্ট টেক্সটগুলি এখানে আসবে (PHP Hypertext Processor এবং World Wide Web)।

 

 

 

ধন্যবাদ।

 


Leave a comment