如何使用php实现文件操作类与文件下载功能?

如何使用php实现文件操作类与文件下载功能?

本文实例讲述了PHP实现的文件操作类及文件下载功能。分享给大家供大家参考,具体如下:

文件操作类:

<?php
 // Copyright 2005, Lee Babin (lee@thecodeshoppe.com)
 // 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 we wish 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, we need to see if we 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){
      //We 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 we can read the file.
   return fgets ($filepointer);
  }
  //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 we 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 we 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
 $myfile = new cfile ("test.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!");
?>

文件下载:

<?php
$filename = 'file1.txt';
$file = fopen($filename, 'r');
Header("Expires: 0");
Header("Pragma: public");
Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
Header("Cache-Control: public");
Header("Content-Length: ". filesize($filename));
Header("Content-Type: application/octet-stream");
Header("Content-Disposition: attachment; filename=".$filename);
readfile($filename);
?>

希望本文所述对大家PHP程序设计有所帮助。