2016-04-01 17 views
0

こんにちは、ありがとうございます。PHP force download .pngファイル

開発したUnityアプリケーションから作成された.pngイメージを強制的にダウンロードするために、次のコードを使用しています。

<?php 
    //get the input information 
    $stringName = $_POST["stringName"];//name 
    $imageString = $_POST["imageString"];//image in string form 

    $dataX = base64_decode($imageString);//make the string into the image 
    file_put_contents($stringName, $dataX);//save the image on the server 
//everything thing above this line works within Unity 

    $fileSize = filesize($stringName);//get the file size 

    //bunch of headers, comments next to the ones I have an idea about 
    header("Pragma: public"); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private",false); 
    header("Content-Type: imagepng");//gives content type 
    header("Content-Length: ".$fileSize);//file size 
    header("Content-Disposition: attachment; filename=".$stringName);//download file path 
    header("Content-Transfer-Encoding: binary"); 
    ob_clean(); 
    flush(); 
    readfile($stringName); 
?> 

私はこれを持っていますが、ダウンロードの確認ボックスが表示されない、または提供された画像で何もしません。

私のプログラムをブラウザで実行すると、上記のスクリプトを呼び出すときに2つのエラーのうち1つが発生します。 Dropboxからアプリケーションをホストしているので、「httpsからhttpに送信できません」というメッセージが表示され、httpsにPHPファイルのアドレスを変更するとタイムアウトします。

最初に、httpsを取得する方法がありますか、そしてhttpを使って通信を許可する方法がありますか?私は、同じ方法でいくつかのプロジェクトを設定しているので、私のユニティプロジェクトをftpサーバーにホストする必要はありません。第二に、PHPスクリプトが正しく動作するかどうか、もしそうなら、私は切り捨てることができるものがありますか?

+0

をあなたは、HTTP/HTTPSの問題に関する追加情報を提供することはできますか? –

+0

混在コンテンツ: 'https:// URL'のページがHTTPS経由で読み込まれましたが、安全でないXMLHttpRequestエンドポイント 'http:// URL'が要求されました。このリクエストはブロックされました。 HTTPS経由でコンテンツを配信する必要があります。 コンソールからエラーが表示されます。 – WilliamLeonSmith

答えて

0

次のコードが正常に「example.png」ファイルのダウンロードを強制します:

<?php 

// requested file's name 
$file_name = "example.png"; 

// make sure it's a file before doing anything 
if(is_file($file_name)) 
{ 
    // required for IE 
    if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } 

    // get the file mime type using the file extension 
    switch(strtolower(substr(strrchr($file_name,'.'),1))) 
    { 
     case 'pdf': $mime = 'application/pdf'; break; 
     case 'zip': $mime = 'application/zip'; break; 
     case 'jpeg': 
     case 'jpg': $mime = 'image/jpg'; break; 
     case 'png': $mime = 'image/png'; break; 
     default: $mime = 'application/force-download'; 
    } 
    header('Pragma: public'); // required 
    header('Expires: 0');  // no cache 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Cache-Control: private',false); 
    header('Content-Type: '.$mime); 
    header('Content-Disposition: attachment; filename="'.basename($file_name).'"'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Content-Length: '.filesize($file_name)); // provide file size 
    readfile($file_name);  // push it out 
} 

?> 
関連する問題