PHP/File Directory/fgets
Содержание
- 1 Checking for an error from fopen(), fgets(), or fclose()
- 2 Counting paragraphs in a file
- 3 Counting records in a file
- 4 Creating and Using a File Class
- 5 fgets() function returns a string read from a file.
- 6 fgets.php
- 7 Processing a list of books
- 8 Processing each word in a file
- 9 Reading a compressed file
- 10 Reading a file a line at a time
Checking for an error from fopen(), fgets(), or fclose()
<source lang="html4strict">
<? $fh = fopen("data.txt","rb"); if (! $fh) {
print "Error opening people.txt: $php_errormsg";
} else {
for ($line = fgets($fh); ! feof($fh); $line = fgets($fh)) { if ($line === false) { print "Error reading line: $php_errormsg"; } else { $line = trim($line); $info = explode("|", $line);print "
} } if (! fclose($fh)) { print "Error closing people.txt: $php_errormsg"; }
} ?> //data.txt a@example.ru|Alice b@example.org|Bill c@example.ru|Charlie d@example.ru|Lewis
</source>
Counting paragraphs in a file
<source lang="html4strict">
<?php $paragraphs = 0; if ($fh = fopen("great-american-novel.txt","r")) {
while (! feof($fh)) { $s = fgets($fh); if (("\n" == $s) || ("\r\n" == $s)) { $paragraphs++; } }
} print $paragraphs; ?>
</source>
Counting records in a file
<source lang="html4strict">
<?php $records = 0; $record_separator = "--end--"; if ($fh = fopen("great-american-textfile-database.txt","r")) {
while (! feof($fh)) { $s = rtrim(fgets($fh)); if ($s == $record_separator) { $records++; } }
} print $records; ?>
</source>
Creating and Using a File Class
<source lang="html4strict">
<?php // Copyright 2005, Lee Babin (lee@thecodeshoppe.ru) // This code may be used and redistributed without charge // under the terms of the GNU General Public // License version 2.0 or later -- www.gnu.org // Subject to the retention of this copyright // and GPL Notice in all copies or derived works
class cfile {
//The path to the file you want to work with. protected $thepath; //Error messages in the form of constants for ease of use. const FOUNDERROR = "Sorry, the file in question does not exist."; const PERMERROR = "Sorry, you do not have the proper permissions on this file"; const OPENERROR = "Sorry, the file in question could not be opened."; const CLOSEERROR = "Sorry, the file could not be closed."; //The constructor function. public function __construct (){ $num_args = func_num_args(); if($num_args > 0){ $args = func_get_args(); $this->thepath = $args[0]; } }
//A function to open the file. private function openfile ($readorwrite){ //First, ensure the file exists. try { if (file_exists ($this->thepath)){ //Now, you need to see if you are reading or writing or both. $proceed = false; if ($readorwrite == "r"){ if (is_readable($this->thepath)){ $proceed = true; } } elseif ($readorwrite == "w"){ if (is_writable($this->thepath)){ $proceed = true; } } else { if (is_readable($this->thepath) && is_writable($this->thepath)){ $proceed = true; } } try { if ($proceed){ //You can now attempt to open the file. try { if ($filepointer = fopen ($this->thepath, $readorwrite)){ return $filepointer; } else { throw new exception (self::OPENERROR); return false; } } catch (exception $e) { echo $e->getmessage(); } } else { throw new exception (self::PERMERROR); } } catch (exception $e) { echo $e->getmessage(); } } else { throw new exception (self::FOUNDERROR); } } catch (exception $e) { echo $e->getmessage(); } } //A function to close a file. function closefile () { try { if (!fclose ($this->thepath)){ throw new exception (self::CLOSEERROR); } } catch (exception $e) { echo $e->getmessage(); } } //A function to read a file, then return the results of the read in a string. public function read () { //First, attempt to open the file. $filepointer = $this->openfile ("r"); //Now, return a string with the read data. if ($filepointer != false){ //Then you can read the file. return fread ($filepointer,filesize ($this->thepath)); } //Lastly, close the file. $this->closefile (); } //A function to write to a file. public function write ($towrite) { //First, attempt to open the file. $filepointer = $this->openfile ("w"); //Now, return a string with the read data. if ($filepointer != false){ //Then you can read the file. return fwrite ($filepointer, $towrite); } //Lastly, close the file. $this->closefile (); } //A function to append to a file. public function append ($toappend) { //First, attempt to open the file. $filepointer = $this->openfile ("a"); //Now, return a string with the read data. if ($filepointer != false){ //Then you can read the file. return fwrite ($filepointer, $toappend); } //Lastly, close the file. $this->closefile (); } //A function to set the path to a new file. public function setpath ($newpath) { $this->thepath = $newpath; }
} ?>
<?php //Include the class. require_once ("file.class.inc.php"); //Then create a new instance of the class. $myfile = new cfile ("data.txt"); //Now, let"s try reading it. echo $myfile->read();
//Then let"s try writing to the file. $myfile->write ("Hello World!");
//Then, let"s try appending. $myfile->append ("Hello Again!");
?>
</source>
fgets() function returns a string read from a file.
<source lang="html4strict">
Its syntax is: string fgets (int filepointer, int length) <? $fh = fopen("data.txt", "r"); while (! feof($fh)) :
$line = fgets($fh, 4096); print $line."
";
endwhile; fclose($fh); ?>
</source>
fgets.php
<source lang="html4strict">
<?php
$fh = fopen("/home/www/data/users.txt", "rt"); while (!feof($fh)) echo fgets($fh); fclose($fh);
?>
</source>
Processing a list of books
<source lang="html4strict">
<?php $fh = fopen("books.txt","r") or die("can"t open: $php_errormsg"); while (! feof($fh)) {
$s = rtrim(fgets($fh)); list($title,$author,$publication_year) = explode("|",$s);
} fclose($fh) or die("can"t close: $php_errormsg"); ?>
</source>
Processing each word in a file
<source lang="html4strict">
<?php $fh = fopen("novel.txt","r") or die($php_errormsg); while (! feof($fh)) {
if ($s = fgets($fh)) { $words = preg_split("/\s+/",$s,-1,PREG_SPLIT_NO_EMPTY); }
} fclose($fh) or die($php_errormsg); ?>
</source>
Reading a compressed file
<source lang="html4strict">
<?php $fh = fopen("compress.zlib://lots-of-data.gz","r") or die("can"t open: $php_errormsg"); while ($line = fgets($fh)) {
// $line is the next line of uncompressed data
} fclose($fh) or die("can"t close: $php_errormsg"); ?>
</source>
Reading a file a line at a time
<source lang="html4strict">
<? $fh = fopen("people.txt","rb"); for ($line = fgets($fh); ! feof($fh); $line = fgets($fh)) {
$line = trim($line); $info = explode("|", $line);print "
} fclose($fh); ?> //people.txt a@example.ru|Alice b@example.org|Bill c@example.ru|Charlie d@example.ru|Lewis
</source>