2016-06-19 32 views
0

PHPを使用して、ユーザーが入力した情報に基づいてApacheサーバー上のアプリケーションをコンパイルし、readfile()メソッドを使用してアプリケーションを提供しています。
私が直面している問題は、実際にアプリケーションをダウンロードする代わりに、.apkファイルがテキストファイルとして開かれていることです。
enter image description here
PHPを使用してサーバーからAPKをダウンロード中のガベージ出力

PHPコードにアンドロイドアプリの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(); 
} 
?> 

任意の助けをいただければ幸いです。

答えて

1

前にそれを入れて、きれいではありませんPHPスクリプトからアプリを、私はAJAXの呼び出しにURLを返しました。

そこから私はそのURLに移動し、自動的にダウンロードが開始されました。

PHPコード:

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

AjaxのCAL:

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

私はあなたがエコーを削除することで解決できると思います。ヘッダーが送信される前にページに出力しないでください。

+0

はあまりにもecho文をコメントアウトしています。しかし、同じエラーです。 –

+1

http://php.net/manual/en/function.readfile.phpのこのページの例の1つから始め、それを動作させてから、一度に1つずつ追加します。 –

+0

ありがとう、 しかし別の方法で修正して質問に答えました –

1

バッファに起因する文字化けの出力ではなく、リターンよりも、だったので、私がやったヘッダの前にページの出力を検索するか、代わりにob_clean()ob_end_clean()を使用して試してみて、あなたのheader()

+0

ちょっと、 これを行うとガーベジコードの出力が停止しましたが、ダウンロードが開始されていません。 –

関連する問題