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

发布时间 - 2026-01-10 22:04:37    点击率:

本文实例讲述了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  # 文件  # 操作类  # 文件下载  # php下载远程大文件(获取远程文件大小)的实例  # 浅谈php fopen下载远程文件的函数  # 从性能方面考虑PHP下载远程文件的3种方法  # PHP下载远程文件到本地存储的方法  # php带密码功能并下载远程文件保存本地指定目录 修改加强版  # php下载远程文件类(支持断点续传)  # php实现的支持断点续传的文件下载类  # PHP文件下载类  # 解决PHP超大文件下载  # 断点续传下载的方法详解  # PHP实现的下载远程文件类定义与用法示例  # 程序设计  # 操作技巧  # 相关内容  # 感兴趣  # 给大家  # 更多关于  # 所述  # 面向对象  # 运算符  # 编程技巧  # 讲述了  # messages  # form  # thepath  # Error  # const  # FOUNDERROR  # constants  # ease  # works 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在IIS中新建站点并配置端口与IP地址?  如何用PHP工具快速搭建高效网站?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  网站制作壁纸教程视频,电脑壁纸网站?  如何在香港免费服务器上快速搭建网站?  如何破解联通资金短缺导致的基站建设难题?  微信小程序 scroll-view组件实现列表页实例代码  微信小程序 HTTPS报错整理常见问题及解决方案  如何快速生成专业多端适配建站电话?  Laravel怎么使用Intervention Image库处理图片上传和缩放  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  高防服务器:AI智能防御DDoS攻击与数据安全保障  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  浅谈redis在项目中的应用  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  教你用AI将一段旋律扩展成一首完整的曲子  重庆市网站制作公司,重庆招聘网站哪个好?  智能起名网站制作软件有哪些,制作logo的软件?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Python进程池调度策略_任务分发说明【指导】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  如何用PHP快速搭建高效网站?分步指南  如何为不同团队 ID 动态生成多个独立按钮  C++时间戳转换成日期时间的步骤和示例代码  如何在万网自助建站中设置域名及备案?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何用已有域名快速搭建网站?  如何快速上传建站程序避免常见错误?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  移动端脚本框架Hammer.js  公司门户网站制作流程,华为官网怎么做?  如何快速启动建站代理加盟业务?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  如何在不使用负向后查找的情况下匹配特定条件前的换行符  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何在IIS管理器中快速创建并配置网站?  如何快速搭建支持数据库操作的智能建站平台?  如何在云虚拟主机上快速搭建个人网站?  android nfc常用标签读取总结  实例解析angularjs的filter过滤器  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  C语言设计一个闪闪的圣诞树  如何打造高效商业网站?建站目的决定转化率  Laravel如何构建RESTful API_Laravel标准化API接口开发指南