Home  >  Article  >  php教程  >  PHP文件下载的小实例

PHP文件下载的小实例

WBOY
WBOYOriginal
2016-05-25 16:52:371440browse

这个文件下载实例做得非常的详细他是结合header函数与while fread函数把文件分断读出来然后再发送到客户端了,算得上一个标准的文件下载实例。

一个PHP文件下载的小实例

/*======================================================
$FileName 为文件名称,必传
$FilePath 为文件路径.选填,可以为相对路径或者绝对路径
  路径只能由英文跟数据组成,不能带有中文
如有问题 欢迎联系博主指出
======================================================*/
<?php
header("Content-type: text/html;charset=utf-8");
if (strlen($FileName) <= 3) {
    echo "下载失败:你所以下载的文件信息有误";
    return;
}
$FileName = iconv("utf-8", "gb2312", $FileName); //进行文件名格式转换,以防中文乱码
//开始判断路径
if (!is_null($FilePath) && strlen($FilePath) > 1) {
    if (substr($FilePath, 0, 1) == &#39;/&#39;) { //判断是否为绝对路径
        $FilePath = $_SERVER[&#39;DOCUMENT_ROOT&#39;] . $FilePath;
    }
    if (substr($FilePath, -1) != "/") { //检查最后是否为 / 结尾
        $FilePath = $FilePath . &#39;/&#39;;
    }
    if (is_numeric(strpos($FilePath, ":"))) { //检查是否为绝对路径
        $FilePath = str_replace("/", "", $FilePath);
    }
} elseif (strlen($FilePath) == 1 && $FilePath != "/") {
    $FilePath = $FilePath . "/";
} else {
    $FilePath = "";
}
if (!file_exists($FilePath . $FileName)) {
    echo "下载失败:所要下载的文件未找到";
    return;
}
/*================================================
   发送下载相关的头部信息
  =================================================*/
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes"); //按照字节大小返回
header("Accept-Length: $FileSize"); //返回文件大小
header("Content-Disposition: attachment; filename=" . $FileName); //这里客户端的弹出对话框,对应的文件名
/*================================================
   开始下载相关
  =================================================*/
$FileSize = filesize($FilePath . $FileName);
$File = fopen($FilePath . $FileName, "r"); //打开文件
$FileBuff = 512;
while ($FileSize >= 0) {
    $FileSize-= $FileBuff;
    echo fread($File, $FileBuff);
}
fclose($File);
?>

总结

本下载实例并且支持中文文名了,在文件开头就进行了uft8编码转换了。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn