热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

php断点续传

$file_dirdemo;$filenametext.txt;$sourceFile$file_dir.$filename;$fpfopen($sourceFile,rb);检测文件是否存在if(!is_file($sourceFile)){die(b404Filenotfound!b);}$filenamebasename($sourceFile);获取文件

$file_dir = '/demo/'; $filename = 'text.txt'; $sourceFile = $file_dir.$filename; $fp = fopen($sourceFile, "rb"); //检测文件是否存在 if (!is_file($sourceFile)) { die("b404 File not found!/b"); } $filename = basename($sourceFile); //获取文件

   $file_dir = '/demo/';
$filename = 'text.txt';
$sourceFile = $file_dir.$filename;
$fp = fopen($sourceFile, "rb");
//检测文件是否存在
if (!is_file($sourceFile)) {
die("404 File not found!");
}
$filename = basename($sourceFile); //获取文件名字
$file_size = filesize($sourceFile);
$size2 = $file_size -1; //文件总字节数

$ctype = "application/vnd.android.package-archive";
header("Cache-Control:");
header("Cache-Control: public");

//设置输出浏览器格式
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=" . $filename);
header("Accept-Ranges: bytes");

if (isset($_SERVER ['HTTP_RANGE'] )) {
if (preg_match ( '/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER ['HTTP_RANGE'], $matches )) {
// 读取文件,起始节点
$begin = intval ( $matches [1] );
// 读取文件,结束节点
if (! empty ( $matches [2] )) {
$end = intval ( $matches [2] );
}
}
$new_length = $file_size - $begin; //获取下次下载的长度
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length"); //输入总长
header("Content-Range: bytes $begin-$size2/$file_size" );
}else{
header("Content-Range: bytes 0-$size2/$file_size"); //Content-Range: bytes 0-4988927/4988928
header("Content-Length: " . $file_size); //输出总长
}

$buffer=1024;
fseek($fp, $begin);
$file_count=0;
while(!feof($fp) && ($file_size-$file_count>0)){
$file_data=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_data;
}
fclose($fp);
exit ();

文件直接下载可以安装,断点那一块,文件下载完之后总是不能够安装,什么愿意,代码哪里错了?大神求解答。调试一天也没调出来,试了很多种方法。

推荐阅读
  • APP数据包捕获挑战
    本文探讨了在使用Burp Suite捕获移动应用数据包时遇到的两大难题,尤其是SSL Pinning安全机制的影响,并提供了一种解决方案。 ... [详细]
  • 本文详细介绍了如何在Windows系统中安装并使用JEB逆向工具,包括必要的环境配置和基本操作指南。 ... [详细]
  • 本章节深入探讨了多种实用的辅助类,这些类将在未来的项目中发挥关键作用。此外,单元测试被强调为游戏开发初期的重要步骤。文章最后通过Breakout游戏的实例,展示了如何有效地利用前文所述的技术。 ... [详细]
  • 本文深入探讨了JavaScript中原型(prototype)、构造函数以及对象实例之间的关系,并通过实例分析了它们如何相互作用以实现代码复用和继承。 ... [详细]
  • 在安装Ubuntu 12.04后,用户可能会遇到系统菜单中缺少休眠(Hibernate)选项的问题。这通常是由于某些程序的错误导致系统默认禁用了此功能。本文将详细介绍如何恢复和使用休眠选项。 ... [详细]
  • 解决ArcEngine中IEngineEditor编辑ArcSDE数据时遇到的0x8004021F错误
    本文探讨了一款自定义GIS插件系统从Personal GeoDatabase迁移到ArcSDE数据源过程中遇到的编辑错误,详细分析了错误原因及解决策略。 ... [详细]
  • 本文介绍了如何从给定的JSON响应中正确地提取产品标题等信息。 ... [详细]
  • 在软件开发领域,测试是确保产品质量的关键环节。本文旨在深入探讨两种特定的测试方法——冒烟测试与随机测试,解析它们的特点、实施方式及应用场景。 ... [详细]
  • Python linecache模块:高效读取文件特定行
    linecache模块提供了一种简便的方法来快速访问文件中的特定行,无需通过复杂的文件操作流程。用户只需导入该模块并调用相关方法即可轻松获取所需信息。 ... [详细]
  • 使用LINQ优化WinForms中CheckedListBox的操作
    本文介绍如何利用LINQ扩展方法解决WinForms中CheckedListBox控件的常见操作问题,包括获取选中项的文本并用分隔符连接,以及根据字符串初始化选中状态。 ... [详细]
  • 本文介绍如何使用ShlObj单元中的ShAddToRecentDoc函数,将指定路径的文档添加到Windows系统的最近使用列表中,具体实现包括调用方法和参数设置。 ... [详细]
  • 深入探讨LINQ分组查询
    本文通过具体示例详细解析了LINQ中的分组查询功能,包括如何使用`group by`语句对数据进行分组,并讨论了不同分组查询方式的结果差异。 ... [详细]
  • 深入解析C语言中的sizeof操作符陷阱
    本文通过一个具体的例子探讨了C语言中sizeof操作符的使用陷阱,并详细分析了导致程序行为异常的原因。 ... [详细]
  • 作为一名新手,最近接到的任务是将动网论坛迁移到公司内部网站,并将数据库支持从Access调整为Oracle。虽然之前没有接触过Oracle,但在实际操作过程中遇到了一些技术挑战,如Oracle中自增ID的实现方式等。 ... [详细]
  • NetCat,因其强大的多功能性和灵活性,被网络安全领域的专业人士誉为‘瑞士军刀’。本文将详细介绍NetCat的功能、应用场景及其在不同平台上的使用方法。 ... [详细]
author-avatar
无与伦比的美丽MJ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有