PHP தமிழில் பகுதி 14: கோப்பு முறைமையும், கோப்புகள் உள்ளீடும் / வெளியீடும் (File systems and File I/O)

PHP server side scripting ஆக இருப்பதில் என்ன பலனென்றால், web developer சேவையகத்தினுடைய (server) கோப்பு முறைமையை எளிமையாக அணுகுவதற்கான வசதிகளை ஏற்படுத்தித் தருகிறது. கோப்புகளை உருவாக்குவது, திறப்பது, நீக்குவது மற்றும் கோப்புகளில் எழுவது போன்ற வசதிகளை நமக்கு PHP உருவாக்கித் தருகிறது. மேலும், அடைவுகளுக்குள் பயணிப்பது, அடைவுகளை பட்டியலிடுவது, புதிய அடைவுகளை உருவாக்குவது போன்ற வேலைகளையும் செய்ய முடியும்.

கோப்புகளை திறத்தலும் உருவாக்குதலும் (Opening and Creating Files)

ஏற்கனவே இருக்கக்கூடிய ஒரு கோப்பை திறப்பதற்கும், புதிதாக ஒரு கோப்பை உருவாக்குவதற்கும் fopen() function பயன்படுகிறது. Fopen() function கோப்புகளை கையாள்வதற்கு இரண்டு உள்ளீடுகளைப் பெற்றுக்கொள்கிறது. முதலாவது உள்ளீட்டில் திறக்க வேண்டிய கோப்பின் பெயரை கொடுக்க வேண்டும். கோப்பின் முழு பாதையையும் உள்ளீடாக கொடுக்க வேண்டும். கோப்பின் பாதையானது சேவையகத்தின் கோப்பு முறைமையோடு தொடர்புடையது. இணைய வழங்கியின்(web server) root -டோடு தொடர்புடையதல்ல. இரண்டாவது உள்ளீட்டில் எந்த பண்புடன்(create, read only, write only etc) கோப்பைத் திறக்க வேண்டும் என்பதை கொடுக்க வேண்டும்.

கீழே உள்ள அட்டவணையில் கோப்பினுடைய பண்புகள் முழு விபரங்களுடன் கொடுக்கப்பட்டுள்ளது.

Mode (முறைமை) Description(விளக்கம்)
R Read only access. கோப்பினுடைய தொடக்கத்தில் சுட்டி இருக்கும்.
R+ Read and Write access. கோப்பினுடைய தொடக்கத்தில் சுட்டி இருக்கும்.
W Write only access. கோப்பினுடைய தொடக்கத்தில் சுட்டி இருக்கும். கோப்பு ஏற்கனவே உருவாக்கப்படவில்லையென்றால் , புதிதாக உருவாக்கப்படும்.
W+ Read and Write access. கோப்பினுடைய தொடக்கத்தில் சுட்டி இருக்கும். கோப்பு ஏற்கனவே உருவாக்கப்படவில்லையென்றால் , புதிதாக உருவாக்கப்படும்.
A Write only access. கோப்பினுடைய இறுதியில்சுட்டி இருக்கும். கோப்பு ஏற்கனவே உருவாக்கப்படவில்லையென்றால் , புதிதாக உருவாக்கப்படும்.
A+ Read and write access. கோப்பினுடைய இறுதியில்சுட்டி இருக்கும். கோப்பு ஏற்கனவே உருவாக்கப்படவில்லையென்றால் , புதிதாக உருவாக்கப்படும்.
X Create and open for write only. கோப்பினுடைய தொடக்கத்தில் சுட்டி இருக்கும். கோப்பு ஏற்கனவே இல்லையென்றால் false எனும் மதிப்பை திரும்பத் தரும்.
X+ Create and open for read and write. கோப்பினுடைய தொடக்கத்தில் சுட்டி இருக்கும். கோப்பு ஏற்கனவே இல்லையென்றால் false எனும் மதிப்பை திரும்பத் தரும்.

கோப்புகளை மூடுதல் (Closing Files)

கோப்பு ஒருமுறை திறக்கப்பட்டுவிட்டால் அந்த கோப்பை fclose() function -ஐ பயன்படுத்தி மூட முடியும். fclose() function ஒரே ஒரு உள்ளீடை மட்டும் பெற்றுக்கொள்கிறது.

மேலே நாம் பார்த்த தகவல்களைக் கொண்டு ஒரு நிரலை உதாரணமாகப் பார்ப்போம்.

<?php

$fileHandle = fopen(‘/tmp/phpintamil.txt’, ‘w+’) or die(“Can’t open the file”);

fclose($fileHandle);

?>

வெளியீடு

image3344

 

 

 

மேலே உள்ள நிரல் /tmp/ அடைவிற்குள் phpintamil.txt எனும் கோப்பை உருவாக்குகிறது. இங்கு நாம் w+ எனும் பண்பைப் பயன்படுத்தியிருக்கிறோம். w+ பண்பு கோப்பு ஏற்கனவே உருவாக்கப்படவில்லையென்றால், புதிதாக ஒரு கோப்பை உருவாக்குகிறது. படித்தல் மற்றும் எழுதுதல் அனுமதியையும் அளிக்கிறது. Fclose() function கோப்பை மூடுகிறது.

கோப்பில் எழுதுதல் (Writiong to aFile)

கோப்பு உருவாக்கப்பட்டு, திறக்கப்பட்டவுடன் அடுத்த வேலை என்னவென்றால் அந்த கோப்பில் தகவல்களை எழுதுவது. Fwrite() மற்றும் fputs() funtions இந்த வேலையைச் செய்ய உதவுகிறது. Fwrite() இரண்டு உள்ளீடுகளைப் பெற்று கொள்கிறது. முதலாவதாக Fopen() function க்கான variable – ஐயும், இரண்டாவதாக கோப்பில் எழுதுவதற்குண்டான தகவல் சரத்தையும் எடுத்துக் கொள்கிறது.

<?php

$myFile = fopen(‘/tmp/phpintamil.txt’ , ‘w+’) or die(“Can’t Open the file.”);

$myFileWrite = fwrite ( $myFile, “Free Open Source Software” );

if ( $myFileWrite ) {

echo “Data Written Successfully.<br>”;

}

else {

echo “Data Write Failed.<br>”;

}

fclose($myFile);

?>

வெளியீடு

image3355

image3366

கோப்பிலிருந்து தகவல்களைப் படித்தல் (Reading From a File)

fread() functionஐ பயன்படுத்தி கோப்பிலிருந்து தகவல்களை படிக்க முடியும். fread() function இரண்டு உள்ளீடுகளை பெற்றுக் கொள்கிறது. முதலாவதாக கோப்பைத் திறப்பதற்கான variable – ஐயும், இரண்டாவதாக எத்தனை byte – களை கோப்பிலிருந்து படிக்க வேண்டும் என்பதையும் பெற்றுக் கொள்கிறது.

<?php

$fileOpen = fopen(‘/tmp/phpintamil.txt’ , ‘w+’) or die (“Can’t Open the File”);

fwrite ($fileOpen, “Linux will rule the world.”);

fclose($fileOpen);

$fileOpen = fopen(‘/tmp/phpintamil.txt’ , ‘r’) or die (“Can’t open the file.”);

$fileRead = fread ($fileOpen, 1024);

echo “<b>Data from phpintamil.txt file</b><br>” . $fileRead;

?>

வெளியீடு

image3377

இங்கு die() function எதற்கு பயன்படுத்தப்படுகிறதென்றால், ஒருவேளை கோப்பு திறக்கப்பட முடியவில்லையென்றால் அதில் கொடுக்கப்பட்டுள்ள செய்தியை வெளியிடும். இது மற்ற function – கள் கோப்பைத் திறப்பதற்கு முற்படுவதைத் தடுக்கிறது.

கோப்பு இருக்கிறதா என சோதித்தல் (Checking Wheter a File Exists)

கோப்பு முறைமையில் கோப்பு இருக்கிறதா இல்லையா என்பதை சோதிப்பதற்கு file_exists() function பயன்படுகிறது. கோப்பினுடைய path – ஐ மட்டும் file_exists() function பெற்றுக்கொள்கிறது. கோப்பு இல்லையென்றால் false என்பதையும் , கோப்பு இருந்தால் true என்பதையும் வெளியீடாக தருகிறது.

<?php

if ( file_exists(‘/tmp/phpintamil.txt’) ) {

echo “File Exist.”;

}

else {

echo “File Doen’t Exist.”;

}

?>

வெளியீடு

image3388

கோப்புகளை பிரதியெடுத்தல், நகர்த்துதல் மற்றும் அழித்தல்(Moving, Copying and Deleting Files)

copy() funtion கோப்புகளை பிரதியெடுக்கவும், rename() function பெயரை மாற்றவும், unlink() function கோப்பை நீக்கவும் பயன்படுகிறது.

Copy

<?php

if ( copy(‘/tmp/practice.old’ , ‘/tmp/practice’) ) {

echo “Copy Successfully<br>”;

}

?>

Rename

<?php

if ( rename( ‘/tmp/practice.txt’ , ‘/tmp/practice.old’) ) {

echo “Renamed Successfully<br>”;

}

?>

Delete

<?php

if ( unlink(‘/tmp/practice.txt’) ) {

echo “Delete Successfully<br>”;

}

?>

கோப்புகளின் பண்புகளை அணுகுதல்(Accessing File Attributes)

கோப்பு எப்பொழுது உருவாக்கப்பட்டது, கோப்பின் அளவு, கோப்பு படிக்கக்கூடியதாக இருக்கிறதா   அல்லது இல்லையா என்பவைகளைப் போன்று கோப்பின் பல்வேறு பண்புகளைப் அணுகுவதற்கு PHP வழிவகை செய்கிறது.

கோப்புகளைப் பற்றிய முழு விபரங்களையும் PHP யினுடைய stat() மற்றும் fstat() செய்லகூறுகள்(functions) நமக்கு அளிக்கின்றன. கோப்புகளைப் பற்றிய நிறைய விபரங்களை அளிப்பதால், அந்த தகவல்கள் ஒரு associative array -யில் சேமிக்கப்படுகிறது. அந்த array யிலிருந்து நாம் நமக்கு தேவையான தகவல்களை மட்டும் பெற்றுக்கொள்ளலாம்.

stat() மற்றும் fstat() ஆகிய இரண்டு function களும் ஒற்றை உள்ளீட்டையே பெற்றுக்கொள்கின்றன. Stat() function -க்கு கோப்பினுடைய முழு பாதையையும்(full path of file), fstat() function -க்கு fopen() மூலம் ஒரு மாறியில் மதிப்பை கொடுத்துவிட்டு அதன்பின் அந்த மாறியின் மதிப்பை உள்ளீடாக கொடுக்க வேண்டும்.

Key Description
Dev Device Number
Ino Inode number
Mode Inode protection mode
Nlink Number of links
Uid User ID of owner
Gid Group ID of owner
Rdev Inode device type
Size Size in bytes
Atime Last access (Unix timestamp)
Mtime Last modified (Unix timestamp)
Ctime Last inode change (Unix timestamp)
Blksize Blocksize of filesystem IO (platform dependent)
Blocks Number of blocks allocated

கீழ்காணும் நிரலைப் பாருங்கள்

<?php

$results = stat (“/tmp/phpintamil.txt”);

$fileNew = fopen(“/tmp/phpintamil.txt”, ‘r’);

$fileDetails = fstat($fileNew);

echo “<b>Using stat() function</b><br>”;

echo “File Size is : $results[size] bytes<br>”;

echo “File last modified on $results[mtime]<br>”;

echo “File Occupies $results[blocks] filesystem blocks<br>”;

echo “<b>Using fstat() function</b><br>”;

echo “File Size is : $fileDetails[size] bytes<br>”;

echo “File last modified on $fileDetails[mtime]<br>”;

echo “File Occupies $fileDetails[blocks] filesystem blocks<br>”;

fclose($fileDetails);

?>

நிரலின் வெளியீடு

image3399

மேலும், கோப்புகளின் அணுகுதல் அனுமதிகளையும் (access rights ) நாம் தெரிந்து தெரிந்து கொள்ள முடியும். is_readable() மற்றும் is_writable() ஆகிய இரண்டு function களும் இதற்கு பயன்படுகின்றன. கோப்பினுடைய பாதையை உள்ளீடாகப் பெற்றுக்கொண்டு true or false ஆகிய மதிப்புகளில் ஏதேனும் ஒன்றை வெளியீடாக தருகிறது.

வெளியீட்டு வைப்பகம் (Output Buffering)

தகவல்தளத்திலிருந்து தகவல்களைப் பெறுவதற்கு தாமதமாகும் நேரங்களில் பயனருக்கு தகவலை தெரிவிக்கவும் நேரடியாக உள்ளடக்கங்களை output stream -க்கு அனுப்பவும் output buffering mechanism பயன்படுகிறது.

Output Buffering ஐத் தொடங்க ob_start() function பயன்படுத்தப்படுகிறது. ob_start() function -க்கு எந்தவொரு உள்ளீட்டை அளிக்காமலும் நாம் பயன்படுத்தலாம். ஆனாலும் மூன்று optional உள்ளீடுகளைப் கொடுக்கலாம்.

1.callback funtion

2.bytes

3.delete buffer

Buffer-னுடைய தகவல்கள் ob_flush() function -ஐப் பயன்படுத்தி வெளித்தள்ளப்படுகிறது. இதற்கு ob_end_flush() function ஐயும் இதற்கு பயன்படுத்திக் கொள்ளலாம்.

ob_clean() function ஐப் பயன்படுத்தி buffer இன் தகவல்களை நம்மால் அழிக்க முடியும். ob_get_contents() function -ஐப் பயன்படுத்தி buffer -இல் இருக்கும் தகவல்களை பெற்றுக்கொள்ளலாம்.

கீழே இருக்கும் நிரலைப் பாருங்கள்

<?php

echo “<b>Before Using ob_start() function</b><br>”;

ob_start(); //start buffering

echo “This content will be buffered<br>”; //write some content to the buffer

echo “<b>Display buffered content using ob_get_contents() function</b></br?”;

echo “<br>” . ob_get_contents();

echo “<br>”;

ob_end_flush(); //flush the output from the buffer

echo “<b>After Using ob_end_flush() function</b><br>”;

echo ob_get_contents();

?>

இதன் வெளியீடு

image3410

%d bloggers like this: