-2
4

6 回答 6

5

你需要通过使用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 函数走了多远,上面的一些内容可能会稍微有些偏差,但它应该让您走上正确的道路。

于 2013-02-22T15:36:37.027 回答
1

刚刚找到我的脚本

所以你创建了一个隐藏的 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 而无需加载新页面

于 2013-02-22T15:30:33.693 回答
1

这很简单:

<a href="/path/to/myphpfile.php">Download all files</a>

然后只需将 zip 函数添加到 myphpfile.php

我的php文件.php

<?php create_zip(); ?>
于 2013-02-22T15:24:40.040 回答
1

您需要像 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 文件。

于 2013-02-22T15:25:52.517 回答
0

您需要将请求发送回服务器才能执行此操作。

例如,您将使用指向服务器上的 PHP 页面的链接,该页面将运行该函数并为您提供结果:

<a href="RunMyFunction.php">Download all files</a>

您也可以使用 AJAX 请求在后台提交它,但这是一个可选的附加功能。

于 2013-02-22T15:23:50.653 回答
0

更好的方式你可以使用 ajax 帖子
你可以尝试在点击超链接时调用 ajax(给它像类一样的身份)。

$('.classHyper').click(function() {
//do ajax post
});

于 2013-02-22T15:34:36.487 回答