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 标签中,因此...
<a href="<!--Run create_zip function-->" class="download-zip">Download all files</a>
然后你想要的是一些javascript来调用在后台加载php文件,基本上将它添加到你的页脚/页眉中的某个地方(取决于你的脚本在哪里)。
<script>
$(function() {
$("a.download-zip").click(function() {
window.location.href = "/path/to/php/file/download.php";
return false;
});
});
</script>
然后,这将在后台加载文件,进而强制下载创建的 zip 文件。由于没有看到您的 create_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 而无需加载新页面
这很简单:
<a href="/path/to/myphpfile.php">Download all files</a>
然后只需将 zip 函数添加到 myphpfile.php
我的php文件.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 文件。
您需要将请求发送回服务器才能执行此操作。
例如,您将使用指向服务器上的 PHP 页面的链接,该页面将运行该函数并为您提供结果:
<a href="RunMyFunction.php">Download all files</a>
您也可以使用 AJAX 请求在后台提交它,但这是一个可选的附加功能。
更好的方式你可以使用 ajax 帖子
你可以尝试在点击超链接时调用 ajax(给它像类一样的身份)。
$('.classHyper').click(function() {
//do ajax post
});