2017-01-13 5 views
1

ファイルを解凍して、そのファイルをダウンロードしていますが、動作していません。私のphp関数を実行すると、ファイルの内容がfirebugに出力され、firebugがオンになっていなければ何もしません。私が送信しようとしているファイルは2,9MBですが、1つのフレーズでtxtファイルのみを送信しようとしましたが動作しませんでした。私はすでにチェックして、ファイルが作成され、ファイルが正しく追加されました。PHP関数readfile()は、ファイルの内容をfirebugに出力するだけで、ダウンロードしません。

$zipname = path . "arquivos/" . $file . ".zip"; 

touch($zipname); 

$zip = new ZipArchive(); 
$result = $zip->open($zipname, ZipArchive::CREATE); 
if ($result === true) { 
    foreach ($Variable->Dados as $key => $value) { 
     $zip->addFile(path . "arquivos/articulador_avaliacao/" . $value->arquivo, $value->arquivo_nome); 
    } 
    $zip->close(); 


    header('Content-Type: application/zip'); 
    header('Content-Description: File Transfer'); 
    header('Content-Disposition: attachment; filename="' . basename($zipname) . '"'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must_revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($zipname)); 
    ob_clean(); 
    flush(); 
    readfile($zipname); 
} 
unlink($zipname); 

これは、特定のプロセスを介して実行する:ユーザーのJavaScript関数を実行するonclickの機能を持つHTMLタグをクリックし、このJavaScript関数は、PHPファイルに変数を送信するために、AJAXを使用して、このコードが実行されます。

+0

AJAXリクエスト内から直接ダウンロードを開始することはできません.AJAXはバックグラウンドでリクエストを意味します_ブラウザのUIはここでは関与しません。直接リンク(サーバーに必要なパラメーターを送信するのに十分な場合)またはフォーム(POSTデータを送信する必要がある場合)を使用するか、JavaScript内からダウンロード・ダイアログをトリガーする方法を調べてください。 (後者はかなりのオーバーヘッドを追加するので、前者は好ましいIMHOです) – CBroe

答えて

0

私はあなたのコードを実行し、それは:)ブラウザのヘッダーを解釈することに問題がありますか?別のブラウザで試してみて、ブラウザの設定を確認してください。

+0

私はすでに試しました...私はそれがApacheの設定や何らかの仕掛けにあるものと推定しています。あなたはそれについて何か知っていますか? –

+0

ブラウザにプラグインをインストールしてzipを開くことができます。おそらく、あなたは 'Content-Type:application/octet-stream'を試してみるべきです。 – nibsa

+0

これは既に試したもので、結果はありません。 –

0

私はjavascriptとAJAXを使用しているので、私はCBroeが私に語ったようにいくつかの調査を行いました。私のPHPスクリプトとreadfile関数ではこれらのヘッダは必要ありませんでした。

クライアントがボタンをクリックすると、javascript関数が実行され、AJAXを介してPHPスクリプトにデータが送信されます。このPHPスクリプトは、関数touchZipArchiveクラスを持つzipファイルを作成し、このファイルへのパスをajaxレスポンスとして送信します。 javascriptでは、ファイルをクライアントに送信するためにこれを使用しました:

window.open(ajaxObject.response, '_blank'); 

すべてが完璧に機能しました。

関連する問題