6 に答える
これは、ajaxを使用して行う必要があります。
最初にファイルを作成します。このファイルは、リンクをクリックすると呼び出すことができます。この例では、download.phpと呼びます。
次に、ファイルに関数の呼び出しを追加します。
<?
// execute function to get files
$zip_file = create_zip();
// get the full path to zip file
$full_zip_path = '/path/to/zip/file'.$zip_file;
// You may need to do more here depending on how far your create zip function goes
// if you want it to force the download you can then do this
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: octet/stream");
header("Content-Disposition: attachment; filename=".$zip_file.";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($full_zip_path));
readfile($full_zip_path);
exit();
?>
次に、タグにクラスを追加します。
<a href="<!--Run create_zip function-->" class="download-zip">Download all files</a>
次に、必要なのは、バックグラウンドでphpファイルをロードするように呼び出すjavascriptです。基本的に、これをフッター/ヘッダーのどこかに追加します(スクリプトの場所によって異なります)。
<script>
$(function() {
$("a.download-zip").click(function() {
window.location.href = "/path/to/php/file/download.php";
return false;
});
});
</script>
これにより、ファイルがバックグラウンドで読み込まれ、作成されたzipファイルが強制的にダウンロードされます。上記のいくつかは、create_zip関数がどこまで進んでいるかがわからないために少し外れている可能性がありますが、正しいパスに設定されているはずです。
それは非常に簡単です:
<a href="/path/to/myphpfile.php">Download all files</a>
次に、zip関数をmyphpfile.phpに追加します。
myphpfile.php
<?php create_zip(); ?>
あなたはそれをURLのように呼ぶ必要があります:
<a href="/download-all-files.php">Download all files</a>
そして、それはあなたのために仕事をします。問題:新しいページが開き、ユーザーは手動で前のページに戻る必要があります。実際のページにコードを含めて、パラメータを使用してリンクを呼び出すことをお勧めします。
<a href="actual-page.php?download-all">Download all files</a>
関数で、パラメーター(これに近いもの)を確認できます。
if ($['GET'] == "download-all") {
download all
}
スティーブが提案したように、AJAX呼び出しも良い考えですが、着信zipファイルの処理方法はわかりません。
私のスクリプトを見つけました
したがって、非表示のiframeを作成します
<iframe id="upload_target" name="upload_target" style="display: none;" src="#"></iframe>
次に、ボタンを使用してフォームを作成します
<form action="path/to/downloadzip.php" method="POST" enctype="multipart/form-data" target="upload_target"> //target will tell the browser to run it in the iFrame with name="upload_target"
次にdownloadzip.phpで:
<?php create_zip(); ?> //and output the file here
これにより、新しいページをロードせずにzipがダウンロードされます
これを行うには、リクエストをサーバーに送り返す必要があります。
たとえば、関数を実行して結果を提供するサーバー上のPHPページを指すリンクを使用します。
<a href="RunMyFunction.php">Download all files</a>
とAJAXリクエストを使用してバックグラウンドでこれを送信することもできますが、これはオプションの追加機能です。
ajax postを使用するためのより良い方法
ハイパーリンクをクリックしてajaxを呼び出すことができます(クラスのようなIDを与えます)。
$('.classHyper').click(function() {
//do ajax post
});