পিএইচপি - ৮ [ফাইল হ্যান্ডেলিং, ফাইল খোলা/পড়া/বন্ধ, ফাইল তৈরি/লেখা] - SMH Amiri

সর্বশেষ লিখাসমূহ

পিএইচপি - ৮ [ফাইল হ্যান্ডেলিং, ফাইল খোলা/পড়া/বন্ধ, ফাইল তৈরি/লেখা]

 


পিএইচপি ফাইল হ্যান্ডেলিং

ফাইল হ্যান্ডেলিং যেকোন ওয়েব এপ্লিকেশনেরই একটি গুরুত্বপূর্ণ অংশ। বিভিন্ন কাজের জন্য প্রায়ই আপনাকে ফাইল ওপেন এবং প্রসেস করতে হতে পারে।


পিএইচপি ফাইল ম্যানিপুলেশন

ফাইল তৈরি, পড়া, আপলোড এবং মডিফাই বা পরিবর্তন করার জন্য পিএইচপিতে বেশ কয়েকটি ফাংশন রয়েছে।

ফাইল ম্যানিপুলেশনের সময় সতর্ক থাকা উচিৎ!

ফাইল ম্যানিপুলেশন(Manipulation) এর সময় আপনাকে অবশ্যই খুব সতর্ক থাকতে হবে।

কারণ আপনার সামান্য ভুলে অনেক বড় ধরনের ক্ষতি হয়ে যেতে পারে। সাধারন ভূলগুলো হলোঃ ভুল করে সঠিক ফাইল এডিট না করা, অপ্রয়োজনীয় ডেটা দিয়ে হার্ড-ড্রাইভ পূর্ণ করা এবং ভুলবশত কোন ফাইল ডিলেট করে ফেলা।


পিএইচপি readfile() ফাংশন

readfile() ফাংশন একটি ফাইলকে পড়ে এবং এটিকে আউটপুট বাফারে(buffer) লিখে প্রকাশ করে।

মনে করুন "abbreviation.txt" নামে আমাদের সার্ভারে একটি টেক্সট ফাইল রয়েছে।

"abbreviation.txt" ফাইল
Wi-Fi = Wireless Fidelity <br>
WiMax = Worldwide Interoperability for Microwave Access <br>
GSM = Global System for Mobile communication <br>
CDMA = Code Division Multiple Access <br>
W-CDMA = Wideband Code Division Multiple Access <br>
AMPS = Advance Mobile Phone System <br>
UMTS = Universal Mobile Telecommunication System <br>
IMT = International Mobile Telecommunication <br>

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

উদাহরণ
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি ফাইল হ্যান্ডেলিং  উদাহরণ</title>
</head>
<body>

<?php
 //abbreviation.text ফাইলকে পড়ে ব্রাউজারে রিটার্ন করবে। 
  echo readfile("abbreviation.txt");
?>

</body>
</html>

ফলাফল
Wi-Fi = Wireless Fidelity 
WiMax = Worldwide Interoperability for Microwave Access
GSM = Global System for Mobile communication
CDMA = Code Division Multiple Access
W-CDMA = Wideband Code Division Multiple Access
AMPS = Advance Mobile Phone System
UMTS = Universal Mobile Telecommunication System
IMT = International Mobile Telecommunication 370

আপনি যখন শুধুমাত্র ফাইল ওপেন করতে এবং এর কন্টেন্ট পড়তে চাইবেন কেবল তখনই readfile() ফাংশনটি সবচেয়ে বেশী কার্যকরী হবে।

পরবর্তী অধ্যায়গুলোতে ফাইল হ্যান্ডেলিং সম্মন্ধে আরো ভালো ধারনা দেওয়া হয়েছে।




পিএইচপি ফাইল খোলা/পড়া/বন্ধ


পিএইচপি fopen() ফাংশন ব্যবহার করে ফাইল খোলা

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

পূর্বের মত এই অধ্যায়েও আমরা "abbreviation.txt" টেক্সট ফাইলটি ব্যবহার করবোঃ

"abbreviation.txt" ফাইল
Wi-Fi = Wireless Fidelity <br>
WiMax = Worldwide Interoperability for Microwave Access <br>
GSM = Global System for Mobile communication <br>
CDMA = Code Division Multiple Access <br>
W-CDMA = Wideband Code Division Multiple Access <br>
AMPS = Advance Mobile Phone System <br>
UMTS = Universal Mobile Telecommunication System <br>
IMT = International Mobile Telecommunication <br>

fopen() সিনট্যাক্স
 fopen(filename,  mode)
প্যারামিটার এর বর্ণনাঃ
  • filename- fopen() ফাংশনের মাধ্যমে যে ফাইলটি ওপেন করা হবে সেটির নাম নির্দেশ করে।
  • mode- ফাইলটি যেই মোডে ওপেন হবে সেই মোডকে নির্দেশ করে।

নিচের উদাহরণের মাধ্যমে দেখানো হলো fopen() ফাংশন ব্যবহার করে কিভাবে একটি ফাইল ওপেন করতে হয় এবং যদি নির্দিষ্ট ফাইলটি ওপেন করা সম্ভব না হয় তাহলে কিভাবে একটি ত্রুটি(error) মেসেজ জেনারেট করতে হয়ঃ

উদাহরণ
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি fopen() ফাংশনের উদাহরণ</title>
</head>
<body>

<?php
//সার্ভারে ফাইল ওপেন করে এবং সম্ভব না হলে এরর তৈরি করে।
$file = fopen("abbreviation.txt", "r") or die("ফাইলটি ওপেন করা সম্ভব হচ্ছে না!");
//ওপেন করা ফাইল পড়ে 
echo fread($file,filesize("abbreviation.txt"));
//ফাইল বন্ধ করে
fclose($file);
?>

</body>
</html>

ফলাফল
Wi-Fi = Wireless Fidelity 
WiMax = Worldwide Interoperability for Microwave Access
GSM = Global System for Mobile communication
CDMA = Code Division Multiple Access
W-CDMA = Wideband Code Division Multiple Access
AMPS = Advance Mobile Phone System
UMTS = Universal Mobile Telecommunication System
IMT = International Mobile Telecommunication

নিম্নের টেবিলে ফাইল ওপেন এর বিভিন্ন মোড তুলে ধরা হলোঃ

মোডবিবরণ
rread only মোডে ফাইল ওপেন করে
ফাইল পয়েন্টার ফাইলের একেবারে প্রথম থেকে আরম্ভ হয়।
wwrite only মোডে ফাইল ওপেন করে
বিদ্যমান ফাইলের সকল কন্টেন্ট মুছে ফেলবে অথবা আগে থেকে ফাইল না থাকলে নতুন ফাইল তৈরি করবে। ফাইল পয়েন্টার ফাইলের একেবারে প্রথম থেকে আরম্ভ হয়।
awrite only মোডে ফাইল ওপেন করে
বিদ্যমান ফাইলের সকল কন্টেন্ট সংরক্ষিত থাকবে। ফাইল পয়েন্টার ফাইলের একেবারে শেষ থেকে আরম্ভ হয়। পূর্বে থেকে ফাইল না থাকলে নতুন ফাইল তৈরি করবে।
xwrite only মোডে নতুন ফাইল তৈরি করে
যদি পূর্বে থেকে ফাইল বিদ্যমান থাকে তাহলে FALSE এবং error রিটার্ন করবে।
r+read/write মোডে ফাইল ওপেন করে
ফাইল পয়েন্টার ফাইলের একেবারে শুরু থেকে আরম্ভ হয়।
w+read/write মোডে ফাইল ওপেন করে
ফাইলে কোন তথ্য থাকলে মুছে যাবে। অথবা আগে থেকে ফাইল না থাকলে নতুন ফাইল তৈরি করে। ফাইল পয়েন্টার ফাইলের একেবারে প্রথম থেকে আরম্ভ হয়।
a+read/write মোডে ফাইল ওপেন করে
ফাইল থেকে পূর্বর তথ্য মুছে যাবে না, বরং নতুন তথ্য সংযোজন হবে। ফাইল পয়েন্টার ফাইলের একেবারে শেষ থেকে আরম্ভ হয়। এক্ষেত্রে আগে থেকে ফাইল না থাকলে নতুন ফাইল তৈরি করবে।
x+read/write মোডে নতুন ফাইল তৈরি করে
যদি পূর্বে থেকে ফাইল বিদ্যমান থাকে তাহলে FALSE এবং error রিটার্ন করবে।

fread() ফাংশন ব্যবহার করে পিএইচপি ফাইল পড়া

fread() ফাংশন একটি ওপেন করা ফাইল পড়ে।

fread() সিনট্যাক্স
 fread(filename,  fileSize())
প্যারামিটার এর বর্ণনাঃ
  • filename- fread() ফাংশনের মাধ্যমে যে ফাইলটি ওপেন করা হবে তার নাম নির্দেশ করে।
  • fileSize()- এই ফাংশনটি যে ফাইলটি ওপেন করা আছে তার সাইজ রিটার্ন করে।
উদাহরণঃ fread() ফাংশন ব্যবহার করে abbreviation.txt ফাইল এর সম্পূর্ণ ডেটা পড়া
fread($file,filesize("abbreviation.txt"));

উপরের পিএইচপি কোড "abbreviation.txt" ফাইল এর একেবারে প্রথম থেকে শেষ পর্যন্ত পড়বেঃ


fclose() ফাংশন ব্যবহার করে ফাইল বন্ধ করা

একটি ওপেন করা ফাইল বন্ধ করার জন্য fclose() ফাংশন ব্যবহার করা হয়।

কোন ফাইল এর কাজ শেষ হলে সেটিকে বন্ধ করে দেওয়া উচিৎ। কারণ আপনি নিশ্চয়ই চাইবেন না যে একটি ওপেন ফাইল আপনার সার্ভারে ঘুরাঘুরি করে অযথা মেমোরি দখল করে রাখুক!

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

<?php
$file = fopen("abbreviation.txt", "r");
// অন্যান্য পিএইচপি কোডসমূহ....
fclose($file);
?>

পিএইচপি fgets() ফাংশন ব্যবহার করে সিঙ্গেল লাইন পড়া

একটি ফাইল থেকে শুধুমাত্র এক লাইন পড়ার জন্য fgets() ফাংশন ব্যবহার করা হয়।

উদাহরণঃ "abbreviation.txt" ফাইলের প্রথম লাইন আউটপুট হিসাবে দেখাবে
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি fgets() ফাংশন এর মাধ্যমে একক লাইন পাঠ করা</title>
</head>
<body>

<?php
$file = fopen("abbreviation.txt", "r") or die("ফাইলটি ওপেন করা সম্ভব হচ্ছে না!");
echo fgets($file);
fclose($file);
?>

</body>
</html>

ফলাফল
Wi-Fi = Wireless Fidelity 

বিঃদ্রঃ fgets() ফাংশনকে কল করার পর ফাইল পয়েন্টার পরবর্তী লাইনে অগ্রসর হয়।


পিএইচপি feof() ফাংশন ব্যবহার করে অজানা দৈর্ঘ্যের তথ্য পড়া

eof এর পূর্ণরূপঃ "end-of-file"।
পিএইচপি feof() ফাংশন ফাইল পয়েন্টার ফাইলের শেষে পৌছেছে কিনা চেক করে।

অজানা দৈর্ঘ্য বিশিষ্ট তথ্যকে Loop করার জন্য feof() ফাংশনটি বেশ উপকারী।

উদাহরণfeof() ফাংশনটি "abbreviation.txt" ফাইলের শেষে না যাওয়া পর্যন্ত ফাইলটিকে লাইন বাই লাইন পড়তে থাকবে।
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি feof() ফাংশন ব্যবহার করে লাইন বাই লাইন পড়া</title>
</head>
<body>

<?php
$file = fopen("abbreviation.txt", "r") or die("ফাইলটি ওপেন করা সম্ভব হচ্ছে না!");
// ফাইলের শেষ পর্যন্ত প্রত্যেক লাইন আউটপুট নিবে
while(!feof($file)) {
  echo fgets($file) . "<br>";
}
fclose($file);
?>

</body>
</html>

ফলাফল
Wi-Fi = Wireless Fidelity 

WiMax = Worldwide Interoperability for Microwave Access

GSM = Global System for Mobile communication

CDMA = Code Division Multiple Access

W-CDMA = Wideband Code Division Multiple Access

AMPS = Advance Mobile Phone System

UMTS = Universal Mobile Telecommunication System

IMT = International Mobile Telecommunication


পিএইচপি fgetc() ফাংশন ব্যবহার করে সিঙ্গেল ক্যারেক্টার পড়া

একটি ফাইলের একটি একক ক্যারক্টার বা অক্ষর পড়ার জন্য fgetc() ফাংশন ব্যবহার করা হয়।

নিচের উদাহরণে "abbreviation.txt" ফাইলটিকে ক্যারেক্টার বাই ক্যারেক্টার পড়বে, যতক্ষন না পর্যন্ত শেষ লাইনে পৌছায়ঃ

উদাহরণঃ fgetc() ফাংশনটি "abbreviation.txt" ফাইলের শেষ অক্ষরে না যাওয়া পর্যন্ত ফাইলটিকে ক্যারেক্টার বাই ক্যারেক্টার পড়তে থাকবে।
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি fgetc() ফাংশন ব্যবহার করে ক্যারেক্টার বাই  ক্যারক্টার  পড়া পড়া</title>
</head>
<body>

<?php
$file = fopen("abbreviation.txt", "r") or die("ফাইলটি ওপেন করা সম্ভব হচ্ছে না!");
// ফাইলের শেষ পর্যন্ত প্রত্যেক ক্যারেক্টার আউটপুট নিবে
while(!feof($file)) {
  echo fgetc($file);
}
fclose($file);
?>

</body>
</html>

ফলাফল
Wi-Fi = Wireless Fidelity 
WiMax = Worldwide Interoperability for Microwave Access
GSM = Global System for Mobile communication
CDMA = Code Division Multiple Access
W-CDMA = Wideband Code Division Multiple Access
AMPS = Advance Mobile Phone System
UMTS = Universal Mobile Telecommunication System
IMT = International Mobile Telecommunication

নোটঃ fgetc() ফাংশনকে কল করার পর ফাইল পয়েন্টার পরবর্তী ক্যারক্টারে অগ্রসর হয়।




পিএইচপি ফাইল তৈরি/লেখা



পিএইচপি fopen() ফাংশন ব্যবহার করে ফাইল তৈরি

পিএইচপি সার্ভারে ফাইল তৈরি করার জন্যও fopen() ফাংশনটি ব্যবহার করা হয়। কিছুটা হতভম্ব হচ্ছেন তাই না? কিন্তু পিএইচপিতে যেই ফাংশন দিয়ে ফাইল ওপেন করা হয় সেটি দিয়ে ফাইল তৈরিও করা যায়।

মনে করুন, আপনি একটি ফাইল ওপেন করার জন্য fopen() ফাংশন ব্যবহার করবেন, কিন্তু ফাইলটি পূর্ব থেকে তৈরি করা নাই। তাহলে এটি আপনার জন্য একটি নতুন ফাইল তৈরি করে দিবে। এটা নির্ভর করবে আপনি কোন মোডে fopen() ফাংশনটি ব্যবহার করছেন। অর্থাৎ আপনি ফাংশন এর mode প্যারামিটারে writting(w) অথবা appending(a) মোড ব্যবহার করছেন কিনা।

নিম্নের উদাহরণে "myFile.txt" নামে একটি ফাইল তৈরি করা হয়েছে। পিএইচপি কোড যে ডিরেক্টোরিতে রয়েছে ফাইলটিও একই ডিরেক্টোরিতে তৈরি হবেঃ

উদাহরণ
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি fopen() ফাংশন ব্যবহার করে নতুন ফাইল তৈরি</title>
</head>
<body>

<?php
 $file = fopen("myFile.txt", "w");
?>

</body>
</html>

পিএইচপি ফাইল এক্সেস পারমিশন

যদি এই কোডগুলো রান করাতে error এর সম্মুখিন হোন, তাহলে  সার্ভার হার্ড-ড্রাইভে আপনার পিএইচপি ফাইল এক্সেস অনুমতি আছে কিনা চেক করে নিন।


fwrite() ফাংশন ব্যবহার করে ফাইলে লেখা

ফাইলে লেখার জন্য fwrite() ফাংশন ব্যবহার করা হয়।

fwrite() সিনট্যাক্স
 fwrite(filename,  content)
প্যারামিটার এর বর্ণনাঃ
  • filename- fopen() ফাংশনের মাধ্যমে যে ফাইলটি ওপেন করা হবে সেটির নাম নির্দেশ করে।
  • content- ফাইলে যা কিছু লেখা হবে সেই স্ট্রিংকে নির্দেশ করে।

নিচের উদাহরণে "newFile.txt" নামে একটি নতুন ফাইলে কিছু নাম লেখা হয়েছেঃ

উদাহরণ
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি fwrite() ফাংশন ব্যবহার করে ফাইলে লেখা</title>
</head>
<body>

<?php
	$file = fopen("newFile.txt", "w") or die("ফাইলটি ওপেন করা সম্ভব হচ্ছে না!");
	$text = "আজিজুর রহমান\n";
	fwrite($file, $text);
	$text = "জিহাদুল ইসলাম\n";
	fwrite($file, $text);
	fclose($file);
?>

</body>
</html>

এখন আমরা যদি "newFile.txt" ফাইলটি ওপেন করি তাহলে এমনটি দেখাবেঃ

আজিজুর রহমান
জিহাদুল ইসলাম

উপরের প্রোগ্রামে লক্ষ্য করলে দেখবেন, আমরা "newFile.txt" ফাইলটিতে দুই বার লিখেছি। প্রত্যেকবারই আমরা ফাংশন এর মধ্য দিয়ে ফাইল নাম এবং স্ট্রিংযুক্ত $text ভ্যারিয়েবল প্রেরণ করেছি যা প্রথমবার "আজিজুর রহমান" এবং দ্বিতীয়বার "জিহাদুল ইসলাম" ধারন করছিল। লেখা শেষ হওয়ার পর আমরা fclose() ফাংশনের মাধ্যমে ফাইলটি ক্লোজ করে দিয়েছি।


পিএইচপি ফাইল ওভাররাইটিং

আমাদের "newFile.txt" ফাইলে কিছু তথ্য রয়েছে। এখন আমরা আপনাকে দেখাব, যদি পূর্বে থেকে বিদ্যমান কোন ফাইল লেখার জন্য ওপেন করা হয় তাহলে কি ঘটবে? পূর্বের বিদ্যমান সকল তথ্য মুছে যাবে এবং আমরা পূনরায় নতুন করে লেখা শুরু করবো।

নিচের উদাহরণে আমরা আমাদের বিদ্যমান "newFile.txt" ফাইলটি ওপেন করবো এবং এতে কিছু নতুন তথ্য লিখবোঃ

উদাহরণ
<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি fwrite()  ফাংশন ব্যবহার করে পুর্বের তথ্য মুছে নতুন তথ্য লেখা</title>
</head>
<body>

<?php
	$file = fopen("newFile.txt", "w") or die("ফাইলটি ওপেন করা সম্ভব হচ্ছে না!");
	$text = "তামজিদ হাসান\n";
	fwrite($file, $text);
	$text = "ছালেহ আহমদ\n";
	fwrite($file, $text);
	fclose($file);
?>

</body>
</html>

এখন পূনরায় আমরা যদি "newFile.txt" ফাইলটি ওপেন করি, তাহলে দেখতে পাবো যে "আজিজুর রহমান" এবং "জিহাদুল ইসলাম" উভই মুছে গেছে এবং এই মাত্র যে তথ্যগুলো লিখেছি সেগুলোই শুধুমাত্র দেখা যাবেঃ

তামজিদ হাসান
ছালেহ আহমদ