我在服务器端(Apache环境)上放了一个安卓apk安装包的下载链接,使用readfile()读取apk文件输出下载后,手机安装apk显示解析包错误。但apk本身没问题,下载后文件的大小也是完整的。服务器mime也设置了。后来换用fread()后输出就好了。不明白是为什么。搜索了一下没遇到解释的很清楚的,有说是因为「对二进制友好」,有这么一说吗?

包括还有file_get_contents()fgets()等另外的几个文件读取函数和方法,一直都不能很好的分清什么时候该用哪个。除了手册之外,有没有一些有应用场景的好的介绍文章?

补上前后的代码:
readfile():

header("Content-type: application/vnd.android.package-archive");
header("Accept-Ranges: bytes");
header("Accept-Length:".$filesize );
header("Content-Disposition: attachment; filename=".$name);
readfile($file);

fread():

header("Content-type: application/vnd.android.package-archive");
header("Accept-Ranges: bytes");
header("Accept-Length:".$filesize );
header("Content-Disposition: attachment; filename=".$name); $handle = fopen($file,"r");
echo fread($handle,$filesize);
fclose($handle);

如果是直接写入或读取全部直接用 file_get_contents() file_put_contents() 更方便
fread 可以读取指定大小,读取指定行等等,还能锁定文件功能比较强

以下是readfile手册中的解释:
readfile() 函数输出一个文件。
该函数读入一个文件并写入到输出缓冲。
若成功,则返回从文件中读入的字节数若失败,则返回 false,这个函数会在文档最后输出字节数。

    1. fread() 和 readfile()
      fread() 最大一次性能读取 8k长度的字节数,所以不能一次性读取大文件去作下载。 优势在于,操作更加灵活,每次读取指定字节的内容,用于下载时方便控制服务器的流量。
      readfile() 优势是能够一次性读取大文件;不需要PHP预读到内存,下载速度更快,直接把文件的处理交由服务器。缺点就是不能控制负载。所以它是没有内存限制的,如果遇到报内存错误,先调用 ob_end_flush()之类的函数关闭缓冲区。
    2. file_get_contents 也是没 readfile()快, 因为也是走了php的内存。但是在读取小文本内容到字符串变量时,这个函数最适合使用,简单,更快。
    3. fgets() 是一次读取文件中的一行了,再需要逐行处理文件的时候,使用这个

最新文章

  1. POJ 2785 4 Values whose Sum is 0
  2. 回归到最初的编程——Linux下的C编程
  3. ecshop判断搜索引擎是否为蜘蛛
  4. Beauty of Array(模拟)
  5. 辽宁OI2016夏令营模拟T3-chess
  6. SQL复习五(索引)
  7. Ranking Relevance小结
  8. 既然函数也是对象,那么为什么this不指向普通函数?
  9. locate 命令详解
  10. Maven的下载、安装与环境配置
  11. js函数式编程术语总结 - 持续更新
  12. threading.local学习
  13. SVN——Couldn't perform atomic initialization
  14. RTP/RTCP 和 SRTP/SRTCP协议(转)
  15. VisualSVNServer 无法启动 could not log pid to file
  16. centos安装pip3
  17. VMware coding Challenge: Coin Toss Betting
  18. 转载:R语言Data Frame数据框常用操作
  19. 1.5 JAVA的高并发编程
  20. Maven详解(转)

热门文章

  1. A way to CQRS and DDD
  2. [LeetCode] Sum Root to Leaf Numbers dfs,深度搜索
  3. duilib入门简明教程 -- 第一个程序 Hello World(3) (转)
  4. python日期时间相关
  5. python名词解释(生成器,匿名函数)
  6. webapi 初识 net
  7. 联通积分兑换的Q币怎么兑换到QQ上
  8. 搭建https本地服务器:如何得到被所有客户端认可的ssl证书
  9. 牛客网 牛客小白月赛1 H.写真がとどいています
  10. python--网络爬虫一