PHP - Llamar a funcion php desde un botón de html

 
Vista:
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Llamar a funcion php desde un botón de html

Publicado por jose (71 intervenciones) el 12/03/2021 09:40:11
Buenos días,

He creado una función para comprimir todos los archivos de una carpeta de fotos se descargue automáticamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//funcion para comprimir
function comprimir($dir) {
 
  // Get real path for our folder
$rootPath = realpath($dir);
 
// Initialize archive object
$zip = new ZipArchive();
$filename = "../../fotos/zip/Fotos.zip";
$zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
 
// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);
 
foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);
        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
 
    }
}
 
// Zip archive will be created only after closing object
$zip->close();
 
 
$fileName = basename($filename);
//$filePath = 'files/'.$fileName;
if(!empty($filename) && file_exists($filename)){
    // Define headers
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$fileName");
    header("Content-Type: application/zip");
    header("Content-Transfer-Encoding: binary");
 
    // Read the file
    readfile($filename);
    exit;
}else{
    echo 'The file does not exist.';
}
 
}

Mediante el botón llame a la función.

1
<a class="button" href="#" onclick="comprimir($dir);">Descargar fotos</a>

He leído que no se puede llamar a la función directamente, sino a través de javascript o ajax, pero no encuentro la forma de hacerlo.

Alguien podría echarme una mano para hacerlo funcionar.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de info
Val: 60
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

Llamar a funcion php desde un botón de html

Publicado por info (17 intervenciones) el 12/03/2021 10:34:40
Es exacamente como te han comentado... el codigo HTML se ejecuta en el navegador y el PHP en el servidor... necesitas JavaScript para comunicar HTML con PHP.

Aquí tienes un simple ejemplo con JavaScirpt para obtener la hora del servidor:
https://www.lawebdelprogramador.com/codigo/JavaScript/5607-Mostrar-la-hora-del-servidor-con-peticion-AJAX-con-JavaScript.html

el mismo ejemplo utilizando JQuery:
https://www.lawebdelprogramador.com/codigo/JQuery/5608-Mostrar-la-hora-del-servidor-con-peticion-AJAX-con-JQuery.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Llamar a funcion php desde un botón de html

Publicado por jose (71 intervenciones) el 12/03/2021 15:35:54
Finalmente he decidido por añadir el botón a un formulario .


1
2
3
<form name="formulario" method="POST" enctype="multipart/form-data">
<input class="button" type="submit" name="copy_all" value="Bajar fotos en ZIP" />
</form>

y que lo llame a traves de $_POST

1
2
if (isset($_POST['copy_all'])) {
en ese caso no es necesario la funcion, el código lo he metido dentro del if.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar