在php中下载Android二进制文件(apk),在安装apk文件时解析错误包

在php中下载Android二进制文件(apk),在安装apk文件时解析错误包,php,parsing,download,installation,apk,Php,Parsing,Download,Installation,Apk,我试图下载一个由php页面输出的Android APK文件。 下载成功,但在尝试安装apk文件时出现解析包问题。 实际上,直接访问文件路径(/var/www/xxx/HelloWorldTest.apk),此方法已完全安装。(没问题。) 但是我想使用通过php源代码生成的方法 我的服务器上有Android应用程序,还有php代码,如: <?php $path = "/var/www/xxx/"; $filename="HelloWorldTest.apk"; header("Pragma:

我试图下载一个由php页面输出的Android APK文件。 下载成功,但在尝试安装apk文件时出现解析包问题。 实际上,直接访问文件路径(/var/www/xxx/HelloWorldTest.apk),此方法已完全安装。(没问题。) 但是我想使用通过php源代码生成的方法

我的服务器上有Android应用程序,还有php代码,如:

<?php
$path = "/var/www/xxx/";
$filename="HelloWorldTest.apk";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/vnd.android.package-archive");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($path . $filename));
readfile($path . $filename);
?>
通过php(安装失败)


问题似乎在于初始部分[0A 0A]是以二进制代码添加的。

0A是换行符的十六进制代码。因此,在文件的实际内容之前添加了两个换行符。在阅读上的文档时,建议使用以下内容围绕readfile调用:

ob_clean();
flush();
readfile($path . $filename);
exit;
试试看你是否还有两个0A字符

50 4B 03 04 14 00 08 08  08 00 F5 91 76 42 00 00 
00 00 00 00 00 00 00 00  00 00 1C 00 04 00 72 65 
73 2F 6C 61 79 6F 75 74  2F 61 63 74 69 76 69 74 
79 5F 6D 61 69 6E 2E 78  6D 6C FE CA 00 00 6D 91
...
0A 0A 50 4B 03 04 14 00  08 08 08 00 F5 91 76 42 
00 00 00 00 00 00 00 00  00 00 00 00 1C 00 04 00 
72 65 73 2F 6C 61 79 6F  75 74 2F 61 63 74 69 76 
69 74 79 5F 6D 61 69 6E  2E 78 6D 6C FE CA 00 00
.....
ob_clean();
flush();
readfile($path . $filename);
exit;