关于php支持分块与断点续传文件下载功能代码
2015-01-24信息快讯网
一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看
本文章要介绍了这篇文章是一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看。代码如下$dowmFile = dirname ( __FILE__ ) . ‘/Nokia C Always Here.mp3′; //要下载的文件,绝对或相对 $dowmName = ‘Nokia C Always Here.mp3′; ob_start (); getlocalfile ( $dowmFile, $dowmName ); flush (); ob_flush (); function getlocalfile($fname, $filename = ”) { $fsize = filesize ( $fname ); header ( ‘Cache-Control: public' ); header ( ‘Pragma: public' ); header ( ‘Accept-Ranges: bytes' ); header ( ‘Connection: close' ); header ( ‘Content-Type: ‘ . MIMEType ( $fname ) ); //header(‘Content-Type: application/octet-stream'); if (isset ( $filename {0} )) { header ( ‘Content-Disposition: attachment;filename=' . $filename ); } if ($fp = @fopen ( $fname, ‘rb' )) { $start = 0; $end = $fsize; $isRange = isset ( $_SERVER ['HTTP_RANGE'] ) && ($_SERVER ['HTTP_RANGE'] != ”); if ($isRange) { preg_match ( ‘/^bytes=([0-9]*)-([0-9]*)$/i', $_SERVER ['HTTP_RANGE'], $match ); $start = $match [1]; $end = $match [2]; $isset_start = isset ( $start {0} ); $isset_end = isset ( $end {0} ); if ($isset_start && $isset_end) { //分块下载 if ($start >= $fsize || $start < 0 || $start > $end) { $start = 0; $end = $fsize; } else if ($end >= $fsize) { $end = $fsize C $start; } else { $end -= $start C 1; } } else if ($isset_start && ! $isset_end) { //指定位置到结束 if ($start >= $fsize || $start < 0) { $start = 0; $end = $fsize; } else { $end = $fsize C $start; } } else if (! $isset_start && $isset_end) { //最后n个字节 $end = $end > $fsize ? $fsize : $end; $start = $fsize C $end; } else { $start = 0; $end = $fsize; } } if ($isRange) { fseek ( $fp, $start ); header ( ‘HTTP/1.1 206 Partial Content' ); header ( ‘Content-Length: ‘ . $end ); header ( ‘Content-Ranges: bytes ‘ . $start . ‘-' . ($end + $start C 1) . ‘/' . $fsize ); } else { header ( ‘Content-Length: ‘ . $fsize ); } if (function_exists ( ‘fpassthru' ) && ($end + $start) == $fsize) { fpassthru ( $fp ); } else { echo fread ( $fp, $end ); } } else { header ( ‘Content-Length: ‘ . $fsize ); readfile ( $fname ); } //@header(“Content-Type: “.mime_content_type($fname)); } function MIMEType($fname) { $fileSuffix = strtolower ( substr ( $fname, strrpos ( $fname, ‘.' ) + 1 ) ); switch ($fileSuffix) { case ‘avi' : return ‘video/msvideo'; case ‘wmv' : return ‘video/x-ms-wmv'; case ‘txt' : return ‘text/plain'; case ‘htm' : case ‘html' : case ‘php' : return ‘text/html'; case ‘css' : return ‘text/css'; case ‘js' : return ‘application/javascript'; case ‘json' : case ‘xml' : case ‘zip' : case ‘pdf' : case ‘rtf' : case ‘tar' : return ‘application/' . $fileSuffix; case ‘swf' : return ‘application/x-shockwave-flash'; case ‘flv' : return ‘video/x-flv'; case ‘jpe' : case ‘jpg' : return ‘image/jpeg'; case ‘jpeg' : case ‘png' : case ‘gif' : case ‘bmp' : case ‘tiff' : return ‘image/' . $fileSuffix; case ‘ico' : return ‘image/vnd.microsoft.icon'; case ‘tif' : return ‘image/tiff'; case ‘svg' : case ‘svgz' : return ‘image/svg+xml'; case ‘rar' : return ‘application/x-rar-compressed'; case ‘exe' : case ‘msi' : return ‘application/x-msdownload'; case ‘cab' : return ‘application/vnd.ms-cab-compressed'; case ‘aif' : return ‘audio/aiff'; case ‘mpg' : case ‘mpe' : case ‘mp3′ : return ‘audio/mpeg'; case ‘mpeg' : case ‘wav' : case ‘aiff' : return ‘audio/' . $fileSuffix; case ‘qt' : case ‘mov' : return ‘video/quicktime'; case ‘psd' : return ‘image/vnd.adobe.photoshop'; case ‘ai' : case ‘eps' : case ‘ps' : return ‘application/postscript'; case ‘doc' : case ‘docx' : return ‘application/msword'; case ‘xls' : case ‘xlt' : case ‘xlm' : case ‘xld' : case ‘xla' : case ‘xlc' : case ‘xlw' : case ‘xll' : return ‘application/vnd.ms-excel'; case ‘ppt' : case ‘pps' : return ‘application/vnd.ms-powerpoint'; case ‘odt' : return ‘application/vnd.oasis.opendocument.text'; case ‘ods' : return ‘application/vnd.oasis.opendocument.spreadsheet'; default : if (function_exists ( ‘mime_content_type' )) { $fileSuffix = mime_content_type ( $filename ); } else { $fileSuffix = ‘application/octet-stream'; } return $fileSuffix; break; } }
php实现扫描二维码根据浏览器类型访问不同下载地址
ThinkPHP基于PHPExcel导入Excel文件的方法
ThinkPHP分页实例
PHP中使用Session配合Javascript实现文件上传进度条功能
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
PHP实现文件下载断点续传详解
PHP fastcgi模式上传大文件(大约有300多K)报错
PHP常用技术文之文件操作和目录操作总结
php实现的支持断点续传的文件下载类
PHP实现自动登入google play下载app report的方法
php实现文件下载代码分享
win7计划任务定时执行PHP脚本设置图解
PHP程序员基本要求和必备技能
Windows中使用计划任务自动执行PHP程序实例
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
php强制文件下载而非在浏览器打开的自定义函数分享
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
PHP批量检测并去除文件BOM头代码实例
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
php 解压rar文件及zip文件的方法
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
利用php下载xls文件(自己动手写的)
php实现批量下载百度云盘文件例子分享