2013-02-22 2 views
-2

Ive получил функцию php, которая упаковывает все файлы типа в каталог в zip-файл и загружает его.Запуск функции php при нажатии <a> тег

Ive установил index.php, чтобы показать мне все файлы в каталоге, чтобы я мог загружать отдельные файлы по мере необходимости.

Что сделано ive, поместите zip-скрипт в функцию с именем «create_zip». То, что я хочу сделать, это вызвать «create_zip» при щелчке тега <a>.

Как я могу это сделать? Becuase если я include функцию она будет просто работать, как только я загрузить страницу ..

HTML, им с помощью для тега действительно просто, как этот

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

Для этого вам необходимо использовать AJAX. – AmazingDreams

+0

Непосредственно невозможно html запускает на вашем браузере браузер php работает на вашем сервере - вам нужно будет создать «страницу», которая будет генерировать zip. Вы можете использовать ajax для вызова этого за сценой, но так же хорошо вы можете использовать прямую ссылку с target = "_ blank" – drk

ответ

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

Вы должны назвать его как 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, как и предложил Стив, также является хорошей идеей, хотя я не уверен, как обрабатывать входящий почтовый файл.

+2

Вывести страницу в скрытый IFrame, я использую ее так, как это для загрузки файла: P – AmazingDreams

+0

@AmazingDreams Отличная идея! : D – dccarmo

+0

Просто разместил его здесь, очень легко сделать это в iframe. – AmazingDreams

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 

Это загрузит молнию без необходимости загружать новую страницу

0

лучшего способа вы можете использовать Ajax пост
Вы можете попробовать позвонить Аякс по щелчку на гиперссылке (дать ему идентичность как класс) ,

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

Смежные вопросы