这个文件下载实例做得非常的详细他是结合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) == '/') { //判断是否为绝对路径 $FilePath = $_SERVER['DOCUMENT_ROOT'] . $FilePath; } if (substr($FilePath, -1) != "/") { //检查最后是否为 / 结尾 $FilePath = $FilePath . '/'; } 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编码转换了。