使用 PHP 从服务器下载 apk 时出现垃圾输出

Garbage output while downloading apk from server using PHP

我正在使用 PHP 根据用户提供的输入在 apache 服务器上编译应用程序,然后使用 readfile() 方法将应用程序提供给他们。
我面临的问题是,.apk 文件不是实际下载应用程序,而是作为文本文件打开。

我在 PHP 代码中添加了 android 应用 mime 类型。
我的 php 代码是:

<?php
echo "Please wait while the app is being generated, it can take around 10 minutes for the build to finish.The completed app will be mailed to you ";

if(isset($_POST['timestamp']))
{
$uid = $_POST['timestamp'];
exec("sudo python /var/www/html/appgenserver.py $uid");

header("Content-Description: File Transfer");
header("Content-Type: application/vnd.android.package-archive");
header("Content-Transfer-Encoding: Binary");        //Adding or removing this hass no effect
header('Content-Disposition: attachment; filename="Foo.apk"');
ob_clean();
flush();
readfile("/var/www/html/".$uid."/releaseapk.apk");
exit();
}
?>

如有任何帮助,我们将不胜感激。

我想你可以通过去除回声来解决它。在 headers 发送之前不要输出到页面。

缓冲区不干净造成的乱码输出,在页眉前搜索输出或尝试使用ob_end_clean()代替ob_clean()并将其放在您的header()之前

所以我所做的是,我 return 将其 URL 编辑到 AJAX 调用,而不是 return 来自 PHP 脚本的应用程序。

从那里我导航到 URL 并自动启动下载。

PHP 代码:

<?php
{
    echo "http://server_ip/release/".$uid."/releaseapk.apk";
}
?>

Ajax 校准:

$.ajax({
        type: "POST",
    url: "/test.php",
    data: { timestamp : timestamp },
        success: function(response){
          console.log("Success",response);
          window.location = response;
    }
      });