`
hudeyong926
  • 浏览: 2032832 次
  • 来自: 武汉
社区版块
存档分类
最新评论

PHP文件下载类

阅读更多
<?php
/**
$filename = 'index.php';
$download = new Download('php,exe,html', false);
if (!$download->downloadfile($filename)) {
    echo $download->getErrorMsgs();
}
*/
class Download {
    private $debug = false;
    private $errorMsg = '';
    private $filter = array();
    private $fileName = '';
    private $mineType = '';
    private $xlq_filetype = array();
    private $limitTime = 60;

    /**
     * @param string $fileFilter
     * @param boolean $isDebug
     */
    function __construct($fileFilter = '', $isDebug = true) {
        $this->setFilter($fileFilter);
        $this->setDebug($isDebug);
        $this->setFileType();
    }

    function downloadfile($filename) {
        $this->fileName = $filename;
        if ($this->filecheck()) {
            $fn = basename($this->fileName);
            ob_end_clean();
            @set_time_limit($this->limitTime);
            header('Cache-control: max-age=31536000');
            header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 31536000) . ' GMT');
            header('Content-Encoding: none');
            header('Content-Length: ' . filesize($this->fileName));
            header('Content-Disposition: attachment; filename=' . $fn);
            header('Content-Type: ' . $this->mineType);
            readfile($this->fileName);
            return true;
        } else {
            return false;
        }
    }

    function filecheck() {
        $fileName = $this->fileName;
        if (file_exists($fileName)) {
            $fileType = strtolower(array_pop(explode(".", $fileName)));
            if (!in_array($fileType, $this->filter)) {
                $this->errorMsg .= sprintf("%s 不允许下载", $fileName);
                if ($this->debug) exit(sprintf("%s 不允许下载", $fileName));
                return false;
            } else {
                if (function_exists("mime_content_type")) {
                    $this->mineType = mime_content_type($fileName);
                }

                if (empty($this->mineType)) {
                    if (isset($this->xlq_filetype[$fileType])) {
                        $this->mineType = $this->xlq_filetype[$fileType];
                    }
                }

                if (!empty($this->mineType)) {
                    return true;
                } else {
                    $this->errorMsg .= "获取文件类型出错";
                    if ($this->debug) exit("获取文件类型出错");
                    return false;
                }
            }
        } else {
            $this->errorMsg .= sprintf("%s 不存在", $fileName);
            if ($this->debug) exit(sprintf("%s 不存在", $fileName));
            return false;
        }
    }

    function setFileType() {
        $this->xlq_filetype['chm'] = 'application/octet-stream';
        $this->xlq_filetype['ppt'] = 'application/vnd.ms-powerpoint';
        $this->xlq_filetype['xls'] = 'application/vnd.ms-excel';
        $this->xlq_filetype['doc'] = 'application/msword';
        $this->xlq_filetype['exe'] = 'application/octet-stream';
        $this->xlq_filetype['rar'] = 'application/octet-stream';
        $this->xlq_filetype['js'] = "javascript/js";
        $this->xlq_filetype['css'] = "text/css";
        $this->xlq_filetype['hqx'] = "application/mac-binhex40";
        $this->xlq_filetype['bin'] = "application/octet-stream";
        $this->xlq_filetype['oda'] = "application/oda";
        $this->xlq_filetype['pdf'] = "application/pdf";
        $this->xlq_filetype['ai'] = "application/postsrcipt";
        $this->xlq_filetype['eps'] = "application/postsrcipt";
        $this->xlq_filetype['es'] = "application/postsrcipt";
        $this->xlq_filetype['rtf'] = "application/rtf";
        $this->xlq_filetype['mif'] = "application/x-mif";
        $this->xlq_filetype['csh'] = "application/x-csh";
        $this->xlq_filetype['dvi'] = "application/x-dvi";
        $this->xlq_filetype['hdf'] = "application/x-hdf";
        $this->xlq_filetype['nc'] = "application/x-netcdf";
        $this->xlq_filetype['cdf'] = "application/x-netcdf";
        $this->xlq_filetype['latex'] = "application/x-latex";
        $this->xlq_filetype['ts'] = "application/x-troll-ts";
        $this->xlq_filetype['src'] = "application/x-wais-source";
        $this->xlq_filetype['zip'] = "application/zip";
        $this->xlq_filetype['bcpio'] = "application/x-bcpio";
        $this->xlq_filetype['cpio'] = "application/x-cpio";
        $this->xlq_filetype['gtar'] = "application/x-gtar";
        $this->xlq_filetype['shar'] = "application/x-shar";
        $this->xlq_filetype['sv4cpio'] = "application/x-sv4cpio";
        $this->xlq_filetype['sv4crc'] = "application/x-sv4crc";
        $this->xlq_filetype['tar'] = "application/x-tar";
        $this->xlq_filetype['ustar'] = "application/x-ustar";
        $this->xlq_filetype['man'] = "application/x-troff-man";
        $this->xlq_filetype['sh'] = "application/x-sh";
        $this->xlq_filetype['tcl'] = "application/x-tcl";
        $this->xlq_filetype['tex'] = "application/x-tex";
        $this->xlq_filetype['texi'] = "application/x-texinfo";
        $this->xlq_filetype['texinfo'] = "application/x-texinfo";
        $this->xlq_filetype['t'] = "application/x-troff";
        $this->xlq_filetype['tr'] = "application/x-troff";
        $this->xlq_filetype['roff'] = "application/x-troff";
        $this->xlq_filetype['shar'] = "application/x-shar";
        $this->xlq_filetype['me'] = "application/x-troll-me";
        $this->xlq_filetype['ts'] = "application/x-troll-ts";
        $this->xlq_filetype['gif'] = "image/gif";
        $this->xlq_filetype['jpeg'] = "image/pjpeg";
        $this->xlq_filetype['jpg'] = "image/pjpeg";
        $this->xlq_filetype['jpe'] = "image/pjpeg";
        $this->xlq_filetype['ras'] = "image/x-cmu-raster";
        $this->xlq_filetype['pbm'] = "image/x-portable-bitmap";
        $this->xlq_filetype['ppm'] = "image/x-portable-pixmap";
        $this->xlq_filetype['xbm'] = "image/x-xbitmap";
        $this->xlq_filetype['xwd'] = "image/x-xwindowdump";
        $this->xlq_filetype['ief'] = "image/ief";
        $this->xlq_filetype['tif'] = "image/tiff";
        $this->xlq_filetype['tiff'] = "image/tiff";
        $this->xlq_filetype['pnm'] = "image/x-portable-anymap";
        $this->xlq_filetype['pgm'] = "image/x-portable-graymap";
        $this->xlq_filetype['rgb'] = "image/x-rgb";
        $this->xlq_filetype['xpm'] = "image/x-xpixmap";
        $this->xlq_filetype['txt'] = "text/plain";
        $this->xlq_filetype['c'] = "text/plain";
        $this->xlq_filetype['cc'] = "text/plain";
        $this->xlq_filetype['h'] = "text/plain";
        $this->xlq_filetype['html'] = "text/html";
        $this->xlq_filetype['htm'] = "text/html";
        $this->xlq_filetype['htl'] = "text/html";
        $this->xlq_filetype['rtx'] = "text/richtext";
        $this->xlq_filetype['etx'] = "text/x-setext";
        $this->xlq_filetype['tsv'] = "text/tab-separated-values";
        $this->xlq_filetype['mpeg'] = "video/mpeg";
        $this->xlq_filetype['mpg'] = "video/mpeg";
        $this->xlq_filetype['mpe'] = "video/mpeg";
        $this->xlq_filetype['avi'] = "video/x-msvideo";
        $this->xlq_filetype['qt'] = "video/quicktime";
        $this->xlq_filetype['mov'] = "video/quicktime";
        $this->xlq_filetype['moov'] = "video/quicktime";
        $this->xlq_filetype['movie'] = "video/x-sgi-movie";
        $this->xlq_filetype['au'] = "audio/basic";
        $this->xlq_filetype['snd'] = "audio/basic";
        $this->xlq_filetype['wav'] = "audio/x-wav";
        $this->xlq_filetype['aif'] = "audio/x-aiff";
        $this->xlq_filetype['aiff'] = "audio/x-aiff";
        $this->xlq_filetype['aifc'] = "audio/x-aiff";
        $this->xlq_filetype['swf'] = "application/x-shockwave-flash";
    }

    function setFilter($fileFilter) {
        if (empty($fileFilter)) return;
        $this->filter = explode(",", strtolower($fileFilter));
    }

    function setDebug($debug) {
        $this->debug = $debug;
    }

    function setlimittime($limittime) {
        $this->limitTime = $limittime;
    }

    function getfilename($filename) {
        return $this->fileName;
    }

    function getErrorMsgs() {
        return $this->errorMsg;
    }

    function __destruct() {
        $this->errorMsg = '';
    }
}
?>
分享到:
评论
1 楼 kaka100 2013-09-22  
大侠你有java版的吗

相关推荐

    php文件下载类带实例

    本篇文章将深入探讨如何使用PHP实现一个文件下载类,并通过实例来演示其用法。 首先,我们来理解一下PHP文件下载的基本原理。当用户点击下载链接时,服务器会发送一个HTTP响应给客户端(通常是浏览器),这个响应...

    php文件下载类,有实例

    本文将详细介绍一个PHP文件下载类及其用法,帮助你理解如何在自己的项目中实现类似功能。 首先,`download_file.php` 文件可能包含了下载类的定义。此类通常包含以下几个核心方法: 1. `setFilePath()`:设置要...

    php 文件下载类

    为了方便和高效地处理文件下载,开发者通常会创建一个专门的文件下载类。这个类可以帮助我们管理文件路径、设定下载头、控制下载速度等。让我们深入探讨一下`download.class.php`可能包含的代码结构和关键知识点。 ...

    基于HTTP PHP文件下载类.rar(很好很实用哦)

    以上就是关于“基于HTTP PHP文件下载类”的一些基本概念和可能实现方式。在实际项目中,这样的类可以帮助开发者更方便地管理和控制文件下载过程,提高代码的可复用性和维护性。如果你正在寻找一种优雅的方式来处理...

    php 文件下载类 文件下载类

    // $download=new download('php,exe,html',false); // if(!$download-&gt;downloadfile($filename)) // { // echo $download-&gt;geterrormsg(); // }

    支持断点续传的PHP文件下载类

    在PHP开发中,有时我们需要提供一个能够处理...总的来说,支持断点续传的PHP文件下载类是Web开发中一个实用的工具,它使得大文件下载变得更加友好和高效。理解和掌握其工作原理及实现方式对于提升PHP开发技能至关重要。

    php文件下载类,支持限速,断点续传

    本知识点将深入探讨如何使用PHP实现一个文件下载类,该类支持限速、断点续传以及普通下载方式。我们将分析标题和描述中提到的特性,并提供相关的代码示例。 首先,"php文件下载类"是指一个用PHP编写的类,其主要...

    PHP文件上传类

    以下是对"PHP文件上传类"的详细解析: 1. **类的结构**: - 一个PHP文件上传类通常包含一系列的方法,如`upload()`用于执行实际的文件上传操作,`checkFileSize()`用于检查文件大小,`checkFileType()`用于验证...

    PHP文件下载

    在给定的“文件下载类”中,应该已经实现了上述的一些或全部功能。使用这样的类,只需实例化对象,传入文件路径和其他参数(如文件名、下载速率限制等),然后调用相应的下载方法即可完成文件的下载服务。这样既提高...

    PHP文件下载过滤类

    "PHP文件下载过滤类"是指一个专门设计用于控制和管理文件下载的安全类,它可以防止非法或者恶意的下载请求,确保只有合法的文件能被用户访问。这个类通常会包含一系列的验证和过滤机制,如检查文件路径的合法性、...

    php远程文件下载类.zip

    本教程将基于提供的"php远程文件下载类.zip"详细解释如何实现这一功能,并探讨相关知识点。 首先,让我们理解一下“类库下载-php远程文件下载类”的概念。类库是一种组织代码的方式,它封装了一系列相关功能,方便...

    C# web文件下载类

    在"C# Web文件下载类"中,可能还包含了一些额外的特性,比如进度报告、错误处理、超时控制、多线程下载等。这些特性对于用户体验和程序的健壮性至关重要。例如,通过事件驱动的方式提供下载进度更新,可以让用户知道...

    php文件操作类.zip

    "php文件操作类.zip"可能包含一个自定义的PHP类库,专为处理文件系统操作而设计。这个类库可以帮助开发者更方便、高效地进行读取、写入、创建、删除和移动文件等任务,而无需直接调用PHP的内置文件函数。下面,我们...

    实用的php文件操作类.zip

    "实用的PHP文件操作类"就是这样一个工具,它旨在简化常见的文件处理任务。下面我们将深入探讨PHP文件操作类的关键概念和功能。 1. **类库介绍** 这个类库很可能包含了若干个PHP类,每个类都专注于一个特定的文件或...

    php实现多进程下载文件类

    使用curl的批处理方法,开启多进程,实现批量下载文件。批量下载文件一般使用循环的方式,逐一执行下载。但在带宽与服务器性能允许的情况下,使用多进程进行...本类利用curl的多进程请求方法,实现多进程同时下载文件。

    VC FTP文件下载类(CFTPGET)

    【VC FTP文件下载类(CFTPGET)】 在Windows环境下,Visual C++(简称VC)是一种常用的编程工具,用于开发各种应用程序。FTP(File Transfer Protocol)是互联网上用于传输文件的标准协议,CFTPGET是一个在VC环境中...

    php中一个很好用的文件上传类.zip

    在这个"php中一个很好用的文件上传类.zip"压缩包中,包含了一个专为PHP设计的文件上传类,它提供了丰富的功能,帮助我们更方便、安全地处理文件上传操作。 首先,文件上传类通常会提供文件初始化功能。这意味着当...

    PHP远程文件下载解压压缩包.zip文件file文件操作类

    在PHP编程中,远程文件下载和解压是常见的任务,特别是在多站点管理和程序更新的场景中。本示例介绍了一种方法,通过PHP实现在线更新远程的ZIP文件,并将其解压到指定目录以替换或更新本地文件。这种方法有助于简化...

    HttpURLConnection文件下载\httpURLConnection文件下载

    在给定的代码片段中,展示了如何使用`HttpURLConnection`进行文件下载。 首先,我们看到代码引入了`java.io`、`java.net`和`java.util`这三个包。`java.io`包含了输入/输出流,用于处理数据的读写;`java.net`包含...

Global site tag (gtag.js) - Google Analytics