单击<a> tag</a>运行php函数

时间:2013-02-22 15:18:35

标签: php function

我有一个php函数,它将目录中某个类型的所有文件打包成一个zip文件并下载它。

我设置了index.php来显示目录中的所有文件,这样我就可以根据需要下载单个文件。

我所做的是将zip脚本放入一个名为'create_zip'的函数中。我希望能够做的是点击<a>标记时调用'create_zip'。

我该怎么做?如果我include,只要我加载页面,它就会运行它。

用于标记的html im非常简单,就像这样

<a href="<!--Run create_zip function-->">Download all files</a>

6 个答案:

答案 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
});