我在服務器端(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");echofread($handle,$filesize);fclose($handle);
PHP中輸出文件,怎么區別什么時候該用readfile() , fread(), file_get_contents(), fgets()?
慕工程0101907
2019-04-13 08:45:50