我有一个php函数,它将目录中某个类型的所有文件打包成一个zip文件并下载它。
我设置了index.php来显示目录中的所有文件,这样我就可以根据需要下载单个文件。
我所做的是将zip脚本放入一个名为'create_zip'的函数中。我希望能够做的是点击<a>
标记时调用'create_zip'。
我该怎么做?如果我include
,只要我加载页面,它就会运行它。
用于标记的html im非常简单,就像这样
<a href="<!--Run create_zip function-->">Download all files</a>
答案 0 :(得分: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 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功能走了多远,上面的一些可能会略微失效,但它应该让你走上正确的道路。
答案 1 :(得分:1)
这非常简单:
<a href="/path/to/myphpfile.php">Download all files</a>
然后只需将zip函数添加到myphpfile.php
myphpfile.php
<?php create_zip(); ?>
答案 2 :(得分:1)
您需要将其称为网址:
<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文件。
答案 3 :(得分: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而无需加载新页面
答案 4 :(得分:0)
您需要将请求发送回服务器才能执行此操作。
例如,您将使用指向服务器上的PHP页面的链接来运行该函数并为您提供结果:
<a href="RunMyFunction.php">Download all files</a>
你也可以在后台使用和AJAX请求提交,但这是一个可选的附加功能。
答案 5 :(得分:0)
更好的方法你可以使用ajax帖子
你可以尝试点击超链接调用ajax(给它类似的类)
$('.classHyper').click(function() {
//do ajax post
});