PHP实现的文件操作类及文件下载功能示例

5年以前  |  阅读数:672 次  |  编程语言: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相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例