Reading from PHP File – PHP हमें किसी File के Contents को Read करने के लिए कई Functions Provide करता है। इन Functions के अन्तर्गत हमें ऐसे Functions मिलते हैं, जो File से एक समय में केवल एक Character Read करता है। तो हमें ऐसे Functions भी मिलते हैं जो एक Single Operation में पूरी File के सारे Contents को Read कर लेता है। इन विभिन्न Functions में से कुछ Functions निम्नानुसार हैं:
file() Function
ये Function किसी File के Contents को Read करता है और File के सारे Contents को एक Array के रूप में Return करता है। Array का हर Element File के Newline Character से Separate Contents से Filled होता है। यानी File की हर Line Array के एक Element के रूप में Store हो जाती है। साथ ही Line के साथ Associated Newline Character भी Array के हर Element के साथ Stored रहता है। इस Function का Syntax निम्नानुसार होता हैः
array file(string $filename, int flags=0, resource $context);
इस Function में पहले Parameter के रूप में हमें उस File के Path को Specify करना होता है, जिसके Content को हम Read करके Array के रूप में Return करना चाहते हैं।
दूसरे Parameter के रूप में हम एक या एक से ज्यादा Flags को Use कर सकते हैं। ये Flags निम्नानुसार हैं:
FILE_USE_INCLUDE_PATH
इस Flag को Specify करने पर PHP Specify की गई File को include_path पर भी Search करता है।
FILE_IGNORE_NEW_LINES
इस Flag को Specify करने पर File से Read होने वाली हर Line के अन्त में Placed Newline Character, Array के Elements में Content के साथ Store नहीं होता।
FILE_SKIP_EMPTY_LINES
इस Flag को Specify करने पर File से जब कोई ऐसी Line Read होती है, जिसमें Newline Character के अलावा और कोई Content नहीं होता, तो ऐसी Lines के लिए PHP Array में Element Create नहीं करता। यानी Blank Lines के Read होने पर ये Flag उन सभी Blank Lines को Array के Element के रूप में Store नहीं करता।
इस Function को समझने के लिए हम एक उदाहरण देखते हैं। इस उदाहरण में हम ये मान रहे हैं कि Subscribers नाम की एक Text File है, जिसकी हर Line में किसी Site पर Subscribed विभिन्न Users का Name, Email Address, Username व Password Stored है जबकि हर Line में केवल एक ही Subscriber की Information है।
हमने ये Text File अपने पिछले Program के आधार पर Create की है। यानी पिछले Program में हमने fwrite() Function को समझने के लिए जो Registration Page किया था, उसी Registration Page द्वारा ये File Create हो रही है। हम मान लेते हैं कि हमारी इस File में निम्न Contents हैं:
//Filename : subscribers.txt Kuldeep,kuldeep06march@gmail.com,kuldeep,pwd000 Kuldeep Mishra,kuldeep06march1982@gmail.com,kuldeepmishra,pwd111 Rajesh,rajesh@yahoo.com,rajesh,rajesh000 Mukesh,mukesh@yahoo.com,mukesh,mukesh111 Mahesh,mahesh@gmail.com,Mahesh,mahesh Manohar,manohar@gmail.com,manohar,manohar Govind,govind@gmail.com,govind,govind //Filename: listSubscribers.php <?php $title = "List all Subscribers"; include_once('header.php'); $users = file("subscribers.txt"); foreach ($users as $user) { list($name, $email, $username, $password) = explode(",", $user); $email = trim($email); ?> <table width="100%"> <tr> <td width="40%"><?php echo "<a href=\"mailto:$email\">$name</a>"; ?></td> <td width="30%"><?php echo $username; ?></td> <td width="30%"><?php echo $password; ?></td> </tr> </table> <?php } include_once('footer.php'); ?>
जब ये PHP Page Interpret होता है, तो सबसे पहले file() Function में Parameter के रूप में Specified subscribers.txt नाम की Text File Open होती है, जिसमें सभी Subscribers के Name, Email Address, Username व Password एक Comma Separated List के रूप में Stored है।
चूंकि file() Function subscribers.txt File से एक बार में एक Line को Read करता है और उसे एक Array Element की तरह Array में Store करके अन्त में सभी Lines के Data को एक पूर्ण Array के रूप में Return करता है, इसलिए सभी Subscribers की Information $users नाम के Array में Elements के रूप में Store हो जाती है।
फिर हमने एक foreach Looping Statement द्वारा इस $users Array के सभी Elements में Stored Data को $user नाम के Variable में One by One Store किया है और explode() Function का प्रयोग करके सभी Comma Separated Values को list() Function में Specified Variables में Store किया है।
यदि $email Address के साथ कोई Whitespace Character Associated हो, तो उसे Remove करने के लिए हमने trim() Function का प्रयोग किया है और $email को इस Function में Parameter के रूप में Pass किया है, ताकि सभी Emails के साथ Attached किसी भी तरह का Whitespace Character Remove हो जाए।
अन्त में एक Table Create किया है। ये Table वास्तव में foreach Looping Statement में ही Nested है, लेकिन चूंकि Table एक HTML Element है, इसलिए इसे Directly foreach Statement में Use नहीं किया जा सकता। इसलिए हमने इसे foreach Loop से अलग लिखा है।
लेकिन Table Element के Just बाद में हमने foreach Statement के Closing Curly Braces को Specify करके इस Table Element को foreach Statement के बीच Enclose यानी Nested कर दिया है।
इस प्रकार से $users नाम के Array में Stored सभी Elements की Comma Separated List को list() Function द्वारा अलग-अलग Variables में Store करके हमने subscribers.txt नाम की File के सभी Users की Information को Read किया है।
जब हम उपरोक्त PHP Page को Interpret करते हैं, तो हमें subscribers.txt File के सभी Data Output के रूप में निम्नानुसार प्राप्त हो जाते हैं:

fgetcsv() Function
इस Function का प्रयोग करके हम किसी Comma Separated Values File के Contents को Read कर सकते हैं। इस Function का Syntax निम्नानुसार होता हैः
array fgetcsv(resource $handle, int $length=0, string $delimiter=’,’, string $enclosure='”‘, string $escape=’\\’)
ये Function कुल पांच Arguments Accept कर सकता है लेकिन पहले Argument के अलावा अन्य चारों Arguments Optional हैं। ये Function पहले Argument के रूप में किसी Comma Separated Values (CSV) File का Handle Accept करता है। ये वह File होती है, जिसके Comma Separated Values यानी Comma Separated Contents को Read करना है।
लेकिन ऐसा जरूरी नहीं है हम केवल Comma Separated Contents को ही इस Function द्वारा Read कर सकते हैं। बल्कि हम इस Function के तीसरे Parameter में जिस Character को Delimiter की तरह Specify कर देते हैं, ये Function उसी Delimiter के आधार पर File से Content को Read करता है।
इस Function के दूसरे Parameter के रूप में हमें इस Function द्वारा File के हर Line के अधिकतम Read किए जा सकने वाले Characters की संख्या को Specify करना होता है। यदि हम इस Parameter को Specify नहीं करते हैं, तो ये Function थोडा Slow काम करता है।
तीसरे Parameter के रूप में हमें उस Character को Specify करना होता है, जिसे हम File के Contents को Read करते समय Delimiter या Separator की तरह Use करना चाहते हैं। By default रूप ये इस Parameter में एक Comma Specified रहता है, इसलिए ये Function Default रूप से पहले Argument में Specified File से Contents को Read करते समय विभिन्न Values के बीच Comma को Separator की तरह Use करता है और File के Contents को Comma के आधार पर अलग-अलग विभाजित करके Return करता है। लेकिन हम यहां पर किसी भी Single Character को Separator की तरह Specify कर सकते हैं।
चौथे व पांचवे Parameters को सामान्यतः हमें Change या Modify करने की जरूरत नहीं होती है।
यदि ये Function Successfully Run होता है, तो पहले Argument में Specified File के Contents के विभिन्न Files का एक Indexed Array Create करके Return करता है। जबकि यदि पहले Parameter के रूप में Specify किया गया Handle गलत हो, तो ये Function NULL Return करता है। जबकि Error की स्थिति में ये Function False Return करता है।
अब यदि हम इस Function को Use करके अपने पिछले Program को Modify करना चाहें, तो हम ऐसा कर सकते हैं क्योंकि हमारी subscribers.txt नाम की File में सभी Values Commas से Separated हैं।
<?php $title = "List all Subscribers"; include_once('header.php'); if(($users = fopen("subscribers.txt", "r")) !== FALSE) { while (list($name, $email, $username, $password) = fgetcsv($users, 1024, ",")) { $email = trim($email); ?> <table width="100%"> <tr> <td width="40%"><?php echo "<a href=\"mailto:$email\">$name</a>"; ?></td> <td width="30%"><?php echo $username; ?></td> <td width="30%"><?php echo $password; ?></td> </tr> </table> <?php } } include_once('footer.php'); ?>
इस PHP Page का भी Output Exactly वही है, जो पिछले PHP Page का था। अन्तर केवल इतना है, कि उसमें Files Extraction का काम हमने explode() Function का प्रयोग करके किया था, जबकि यहां यही काम हमने fgetcsv() Function का प्रयोग करके किया है।
इस PHP Page में हमने सबसे पहले एक if Statement में subscribers.txt नाम की File को Reading Mode में Open किया है। यदि if Statement Successful होता है, तो इसका मतलब है कि subscribers.txt नाम की File Normal तरीके से Open हो गई है। परिणामस्वरूप PHP Control if Statement Block में Enter करता है।
इस Block में एक while Loop Statement को Use किया गया है और इस Loop के अन्दर ही निम्न Expression लिखा गया हैः
list($name, $email, $username, $password) = fgetcsv($users, 1024, “,”)
चूंकि Assignment Operator के Right Side का Code पहले Execute होता है, इसलिए सबसे पहले fgetcsv() Function Run होता है। इस Function में पहले Parameter के रूप में हमने उस File के Handle को Specify किया है, जिसके Contents को Comma Separated Values के रूप में Read करना है।
जबकि दूसरे Parameter के रूप में हमने 1024 मान Specify किया है, जो इस बात को Indicate करता है कि यदि File के Content में Delimiter न आए तो इस File से एक बार में अधिकतम 1024 Characters एक Line के रूप में Read किए जा सकते हैं, जबकि Content के बीच में जहां भी Delimiter आ जाएगा, वहीं तक का Field Array Element की तरह Return हो जाएगा।
तीसरे Parameter के रूप में हमने Comma Specify किया है। जबकि fgetcsv() Function में Default रूप से तीसरे Parameter के रूप में Comma ही होता है। इसलिए यदि हम इसे Specify न करें, तो भी इस PHP Page के PHP Code पर किसी तरह का कोई प्रभाव नहीं पडेगा और हमें समान Result ही प्राप्त होगा।
fgets() Function
इस Function का प्रयोग करके हम किसी File से File Pointer की Position से Specified Number of Characters को Read कर सकते हैं। इस Function का Syntax निम्नानुसार होता हैः
string fgets(resource $handle, int $length);
इस Function के पहले Argument के रूप में हमें उस File का Handle Specify करना होता है, जिसके Contents को हम Read करना चाहते हैं। जबकि दूसरे Parameter के रूप में हमें Number of Characters की संख्या Specify करनी होती है।
File की Reading File के Contents में जहां पर Newline Character आता है वहां तक अथवा दूसरे Parameter में Specify किए गए Number यानी Length-1 तक Read होता है क्योंकि उसके बाद EOF आ जाता है।
यदि हम दूसरे Parameter को Specify न करें, तो Default रूप से दूसरे Parameter का मान 1024 Character होता है। इस स्थिति में ये Function File के Contents की Reading, File Pointer की Current Position से अगले Newline Character तक या EOF तक करता है।
जबकि यदि ये दोनों ही न मिलें यानी Newline Character भी न मिले और File अपनी EOF Position पर भी न पहुंचे, तो ये Function File से Default रूप से 1024 Characters की String Return करता है।
ये Function File Pointer की Position से दूसरे Parameter में Specified Length-1 Bytes तक के Characters को पहले Parameter में Specified Handle से Associated File से Read करता है और Read किए गए Contents को String के रूप में Return करता है। यदि File Pointer में Read करने के लिए और Data न हो, तो ये Function False Return करता है, जबकि Error की स्थिति में False Return करता है।
चूंकि ये Function भी File से Read किए गए Data को टुकडों में Return करता है, इसलिए इस Function को भी हमें किसी न किसी Looping Statement के साथ ही Use करना होता है।
इस Function का प्रयोग करते हुए यदि हम हमारे subscribers.txt File के Contents को Read करना चाहें, तो हम निम्नानुसार एक PHP Page Create कर सकते हैं:
<?php $title = "List all Subscribers"; include_once('header.php'); if(($fh = fopen("subscribers.txt", "r")) !== FALSE) { while (!feof($fh)) echo fgets($fh)."<br>"; } else{ echo "Error"; } include_once('footer.php'); ?>
इस PHP Page में सबसे पहले subscribers.txt नाम की File को एक if Statement में Open किया गया है। जब File Normal तरीके से Open हो जाती है, तो PHP Control इस if Statement Blok में Enter करता है, जहां निम्नानुसार एक while Loop Statement हैः
while (!feof($fh)) echo fgets($fh)."<br>";
इस While Loop में Condition के रूप में ये Specify किया गया है कि “PHP Control जब तक $fh File Handle के EOF पर न पहुंच जाए, तब तक Loop चलना चाहिए और इसके बाद लिखे गए echo statement को Execute करना चाहिए।”
यानी ये Loop तब तक चलेगा जब तक कि PHP Control subscribers.txt File के EOF Character तक न पहुंच जाए।
echo Statement में हमने fgets() Function को Use किया है और इसमें केवल एक ही Parameter को Pass किया है। परिणामस्वरूप ये Function हर बार Execute होने पर subscribers.txt File से तब तक Reading करता है जब तक कि Newline Character नहीं मिल जाता या File का अन्त नहीं हो जाता।
चूंकि subscribers.txt File में हर User की Information एक Newline में Store होती है, इसलिए ये Function एक बार में एक User की Information Return करता है, जिसे echo Statement द्वारा Echo कर दिया जाता है। परिणामस्वरूप हमें उपरोक्त PHP Page का Output निम्नानुसार प्राप्त होता हैः

fgetss() Function
ये Function Exactly fgets() Function की तरह ही काम करता है। अन्तर केवल इतना है कि यदि हम किसी HTML या PHP File को gets() Function द्वारा Read करें, तो हमें उन Files के Contents में लिखे गए Elements व Tags भी ज्यों के त्यों प्राप्त हो जाते हैं, जिन्हे हमें Content की तरह प्राप्त नहीं करना होता।
हालांकि HTML Codes को तो Web Browser Render कर देता है, लेकिन PHP के Codes ज्यों के त्यों String या Content के रूप में दिखाई देने लगते हैं। इसलिए जब हम किसी HTML या PHP Type की File के Content को Read करना चाहते हैं, तब हम fgets() Function के स्थान पर fgetss() Function को Use करके Read होने वाली File से HTML व PHP Codes को Strip कर सकते हैं। इस Function का Syntax निम्नानुसार होता हैः
string fgetss(resource $handle, int $length, string $allowable_tags)
ये Function HTML या PHP Type की File में लिखे गए Tags व NUL Bytes को Automatically Strip कर देता है और हमें केवल Content Return करता है।
हालांकि ये Function Exactly fgets() Function की तरह काम करता है, लेकिन ये Function Parameter के रूप में एक तीसरा Argument भी Accept करता है, जिसमें हमें उन Allowed HTML Tags को Specify करना होता है।
इस Function में हम तीसरे Parameter में किसी Tag को Specify नहीं करते हैं, तो ये Read की जाने वाली File के सभी Tags Strip हो जाते हैं जबकि यदि हम चाहते हैं कि कुछ Tags Strip न हों, तो हम उन Strip न होने वाले Tags को तीसरे Parameter में एक String के रूप में Specify कर सकते हैं।
<?php $title = "List all Subscribers"; include_once('header.php'); if(($fh = fopen("addInput.php", "r")) !== FALSE) { while (!feof($fh)) echo fgets($fh)."<br>"; } else{ echo "Error"; } include_once('footer.php'); ?>
जब हम इस उदाहरण Program वाले PHP Page को Web Browser में Load करते हैं, तो हमें हमारा Output निम्नानुसार दिखाई देता हैः

हमें ये Output इसलिए प्राप्त होता है, क्योंकि हमने addInput.php नाम की एक PHP File fgets() Function द्वारा Read किया है और ये Function HTML, PHP Codes या NUL Bytes को Strip नहीं करता। अब यदि हम उपरोक्त Code में ही fgets() के स्थान पर fgetss() Function को Use करें, तो हमारा PHP Code निम्नानुसार बनेगाः
<?php $title = "List all Subscribers"; include_once('header.php'); if(($fh = fopen("addInput.php", "r")) !== FALSE) { while (!feof($fh)) echo fgetss($fh)."<br>"; } else{ echo "Error"; } include_once('footer.php'); ?>
और हमें दिखाई देने वाला Output निम्नानुसार होगाः

जैसाकि इस चित्र में हम देख सकते हैं कि अब addInput.php File से न तो कोई HTML Code ही Return हो रहा है न ही कोई PHP Code, बल्कि इस File में लिखा गया Content ही Return हो रहा है, क्योंकि इस PHP Page में हमने fgets() Function के स्थान पर fgetss() Function को Use किया है।
चूंकि हमारे इस Code में हमने addInput.php File के सभी HTML व PHP Codes को Strip कर दिया है। लेकिन यदि हम चाहते हैं कि इस File में लिखे गए <form> व <input> Tags Strip न हों, तो हम हमारे पिछले PHP Code को निम्नानुसार Modify कर सकते हैः
<?php $title = "List all Subscribers"; include_once('header.php'); if(($fh = fopen("addInput.php", "r")) !== FALSE) { while (!feof($fh)) echo fgetss($fh, 1024,"<form><input>")."<br>"; } else{ echo "Error"; } include_once('footer.php'); ?>
और हमें दिखाई देने वाला Output निम्नानुसार होगाः

उपरोक्त Program में <form> व <input> Tags Strip न हों, इसके लिए हमने fgetss() Function के तीसरे Parameter को निम्नानुसार Modify किया हैः
echo fgetss($fh, 1024,“<form><input>”).”<br>”;
चूंकि हम fgetss() Function के तीसरे Parameter को Modify कर रहे हैं, इसलिए हमें दूसरे Parameter को भी Set करना जरूरी हो जाता है, नहीं तो हम तीसरे Parameter को Set नहीं कर सकते। इसीलिए हमने दूसरे Parameter में 1024 मान Store कर दिया है, जो कि इस Parameter का Default मान भी होता है।
Reading Single Character – fgetc() Function
fgetc() Function का प्रयोग करके हम किसी File Handle से File Pointer की Current Position के Single Character को Read कर सकते हैं।
ये Function File Handle के रूप में केवल एक Single Character Accept करता है और Return Value के रूप में File Pointer की Current Position के Character को Read करके Return करता है तथा अगले Character पर Move हो जाता है।
जब File Pointer EOF पर पहुंचता है, तब False Return करता है। इस Function को हम निम्नानुसार Use कर सकते हैं:
<?php $title = "List all Subscribers"; include_once('header.php'); $fp = fopen('subscribers.txt', 'r'); if (!$fp) { echo 'Could not open file somefile.txt'; } while (false !== ($char = fgetc($fp))) { echo "$char"; } include_once('footer.php'); ?>
चूंकि fgetc() Function File Pointer की Current Position से एक बार में केवल एक Character को ही Read करता है, इसलिए File के सभी Characters को Read करने के लिए हमें इसे एक Loop में Use करना होता है। इसीलिए हमने इसे उपरोक्त Code में एक while Loop में Use किया है।
ये Loop तब तक चलता है, जब तक कि fgetc() Function EOF पर नहीं पहुंच जाता। जैसे ही ये Function EOF पर पहुंचता है, False Return करता है। परिणामस्वरूप while Loop की Condition False हो जाती है और PHP Control Loop से Exit हो जाता है।
सामान्यतः इस Function का प्रयोग Binary Files को Read करने के लिए किया जाता है। इस PHP Code वाले Page का Output हमें निम्नानुसार प्राप्त होता हैः

fread() Function
ये Function Argument के रूप में दो Parameters Accept करता है। इस Function का Syntax निम्नानुसार होता हैः
string fread(resource $handle, int $length)
इस Function के पहले Parameter के रूप में हमें उस File के Handle को Specify करना होता है, जिसके Contents को हम Read करना चाहते हैं, जबकि दूसरे Parameter के रूप में हम Bytes के रूप में Number of Characters Specify करते हैं।
दूसरे Parameter में हम जो संख्या Specify करते हैं, Current File Pointer की Position से उतने ही Characters इस Function द्वारा एक बार में String के रूप में Return होते हैं। File से Reading की Process तब रूकती है, जब निम्न में से कोई एक परिस्थिति Match होती हैः
- यदि दूसरे Parameter में Specified Length जितने Characters Red हो जाते हैं।
- यदि File Pointer EOF पर पहुंच जाता है।
यदि Socket Timeout हो जाता है या Packet Available हो जाता हैं।
यदि ये Function Normal तरीके से Run होता है, तो Read किए गए Bytes को String के रूप में Return करता है। जबकि Fail हो जाने की स्थिति में ये Function False Return करता है।
इस Function के दूसरे Parameter के रूप में यदि हम File की Total Size को Specify कर दें, तो हम इस Function का प्रयोग करके एक ही बार में पूरी File के Data को Read कर सकते हैं। जैसेः
<?php $title = "List all Subscribers"; include_once('header.php'); // get contents of a file into a string $filename = "C:\wamp\www\phpInHindi\Practical Examples/subscribers.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); echo $contents; fclose($handle); include_once('footer.php'); ?>
इस PHP Code में हमने fread() Function के दूसरे Parameter के रूप में filesize() Function का प्रयोग करके $filename Variable में Stored File की Size को Pass किया है। परिणामस्वरूप ये Function पूरी File के Contents को एक ही बार में Read कर लेता है।

ये Function Newline से Break नहीं होता बल्कि दूसरे Parameter में Specify किए गए Length के बराबर Contents को Read करता है और केवल उसी स्थिति में Exit होता है, जब EOF मिल जाता है। यानी ये Function Newline Character को Ignore करता है।
चूंकि ये Function भी कुछ अन्य PHP Functions की तरह File Pointer की Current Position से ही Data की Reading करता है, इसलिए fseek(), ftell, व rewind() Functions का प्रयोग करके हम File Pointer को File में जहां चाहें वहां पहुंचा सकते हैं और इस Function का प्रयोग करके File Pointer की Current Position से जो चाहें वो Data Return करवा सकते हैं।
readfile() Function
ये Function किसी File के पूरे Contents को एक ही बार में Read कर लेता है और Output Buffer में Return कर देता है। जिसे सीधे ही Web Page में Render किया जा सकता है। इस Function का Syntax निम्नानुसार होता हैः
int readfile(string $filename, bool $use_include_path = false, resource $context)
पहले Parameter के रूप में ये Function किसी File के नाम को String के रूप में Accept करता है जबकि दूसरे Parameter में हम true Specify करके पहले Argument के Specify की गई File को PHP के include_path पर भी Search करने के लिए Instruct कर सकते हैं।
Return Value के रूप में यदि यह Function Successfully Run हो जाए, तो File से कुल Read की गई Bytes की संख्या Return करता है, जबकि Fail होने की स्थिति में ये Function False Return करता है और यदि इस Function को @readfile() Statement की तरह Call न किया जाए, तो एक Error Message भी Print करता है।
<?php $title = "List all Subscribers"; include_once('header.php'); $file = 'subscribers.txt'; if (file_exists($file)) { readfile($file); } include_once('footer.php'); ?>
चूंकि ये Function Result को सीधे ही Output Buffer में भेजता है, इसलिए इस Function को Use करने पर हमें किसी Output Statement को Use करने की जरूरत नहीं होती। हमारा Result सीधे ही हमारे Web Browser में निम्नानुसार Display हो जाता हैः

ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
PHP in Hindi | Page: 647 | Format: PDF