es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descarga de archivos FTP con PHP

Estoy tratando de crear un botón de descarga en mi página web, utilizando FTP. Pero cuando intento hacer esto, el archivo descargado se guarda en la máquina que alberga mi sitio web y no en la PC de los usuarios, lo cual es lo que quiero. ¿No es posible hacerlo para que el archivo se pueda descargar normalmente desde el FTP como se muestra en la imagen de abajo?

enter image description here

Esta es la función de descarga de FTP que tengo actualmente, la cual descarga el archivo en la carpeta de proyecto de mi sitio web.


function FTP_download($id) { ob_end_flush(); $remote_file = $id.'.log'; $local_file = $id.'.log'; $conn_id = ftp_connect($this->ftp_server); $login_result = ftp_login($conn_id, $this->ftp_user_name, $this->ftp_user_pass); // Tratar de descargar $server_file y guardar en $local_file if (ftp_get($conn_id, $local_file, $remote_file, FTP_BINARY)) { echo "Escrito correctamente en $local_file\n"; } else { echo "Hubo un problema\n"; } // Cerrar la conexión ftp_close($conn_id); }
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para permitir que el usuario descargue el archivo desde FTP directamente a su máquina, puedes modificar la función FTP_download para utilizar la función de encabezado de PHP y forzar una ventana de descarga en el navegador del usuario. Aquí tienes un ejemplo:

    function FTP_download($id) {
        ob_end_flush();
        $remote_file = $id.'.log';
        $local_file = $id.'.log';
    
        $conn_id = ftp_connect($this->ftp_server);
        $login_result = ftp_login($conn_id, $this->ftp_user_name, $this->ftp_user_pass);
    
        // especificar el tipo de contenido como datos binarios
        header('Content-type: application/octet-stream');
    
        // especificar el nombre de archivo para solicitar al usuario
        header('Content-Disposition: attachment; filename="' . basename($remote_file) . '"');
    
        // intentar descargar $remote_file y mostrarlo al usuario
        if (ftp_fget($conn_id, 'php://output', $remote_file, FTP_BINARY)) {
            // éxito
        } else {
            // error
        }
    
        // cerrar la conexión
        ftp_close($conn_id);
    }
    

    Esta función actualizada utiliza la función de encabezado de PHP para establecer el tipo de contenido como datos binarios y especificar un nombre de archivo para la ventana de descarga. Luego utiliza la función ftp_fget para recuperar el archivo de FTP y enviarlo directamente al navegador del usuario utilizando el flujo ‘php://output’. Esto provocará que el usuario descargue el archivo en su máquina en lugar de guardarlo en el servidor web.

Comments are closed.