2013-02-22 157 views
-2

運行php函數我有一個PHP函數,將目錄中的某個類型的所有文件打包到一個zip文件中並下載它。點擊<a>標籤<a>標籤

我設置了index.php來顯示目錄中的所有文件,以便我可以根據需要下載單個文件。

我做的是把zip腳本放到一個名爲'create_zip'的函數中。我想要做的就是在點擊<a>標籤時調用'create_zip'。

我該怎麼做?監守如果我include它只是當我加載頁面運行功能..

使用該標籤的HTML IM是這樣

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

你必須爲此使用AJAX。 – AmazingDreams 2013-02-22 15:20:05

+0

直接不可能的HTML運行在您的客戶端瀏覽器php運行在您的服務器上 - 您將需要創建將生成zip的「頁面」。你可以使用ajax在場景後面調用,但你也可以直接使用target =「_ blank」 – drk 2013-02-22 15:25:45

回答

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函數到底有多遠,上面的一些可能會稍微有點出乎意料,但它應該設置你正確的路徑。

0

您需要發送請求回真不簡單服務器爲了做到這一點。

例如,您可以使用指向您的服務器上的PHP網頁,將執行此功能,給你結果的鏈接:

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

你可以在後臺使用和AJAX還提交此請求,但這是一個可選的額外。

1

這是非常簡單的:

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

然後只需添加你壓縮功能myphpfile.php

myphpfile.php

<?php create_zip(); ?> 
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文件。

+2

輸出頁面到一個隱藏的IFrame,我用它來上傳文件:P – AmazingDreams 2013-02-22 15:27:30

+0

@AmazingDreams好主意! :D – dccarmo 2013-02-22 15:29:52

+0

只是把它放在這裏,真的很容易做到這一點在iframe中。 – AmazingDreams 2013-02-22 15:34:55

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而無需加載一個新的頁面

0

您可以使用Ajax後
您可以嘗試點擊超鏈接調用AJAX更好的辦法(給它像階級認同) 。

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