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