Foros del Web » Programando para Internet » PHP »

Descarga de archivos vía ftp

Estas en el tema de Descarga de archivos vía ftp en el foro de PHP en Foros del Web. Hola que tal compañeros, Actualmente estoy haciendo un código para bajar archivos de un servidor ftp, primero los listo, y los hago hipervinculos, pero lo ...
  #1 (permalink)  
Antiguo 07/01/2011, 18:18
 
Fecha de Ingreso: octubre-2009
Mensajes: 2
Antigüedad: 14 años, 5 meses
Puntos: 0
Descarga de archivos vía ftp

Hola que tal compañeros,

Actualmente estoy haciendo un código para bajar archivos de un servidor ftp, primero los listo, y los hago hipervinculos, pero lo que quiero es que aparezca la ventana de dialogo para que el usuario que está utilizando la aplicación pueda guardar el archivo donde el quiera, he tratado de usar el forzado de guardado, pero el archivo me sale vacío, aqui les pongo el código, espero puedan ayudarme a solucionar este problema.

Saludos y gracias de antemano.

funciones_descarga.php

Código PHP:
<?
# FUNCIONES FTP
# CONSTANTES 
define("SERVER","direccion"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","prueba"); //Nombre de Usuario
define("PASSWORD","pass"); //Contraseña de acceso
define("MODO",true); //Activa modo pasivo

# FUNCIONES

function ConectarFTP(){
//Permite conectarse al Servidor FTP
$id_ftp=ftp_connect(SERVER,PORT); //Obtiene un manejador del Servidor FTP
ftp_login($id_ftp,USER,PASSWORD); //Se loguea al Servidor FTP
ftp_pasv($id_ftp,MODO); //Establece el modo de conexión
return $id_ftp//Devuelve el manejador a la función
}

function 
SubirArchivo($archivo_local,$archivo_remoto){
//Sube archivo de la maquina Cliente al Servidor (Comando PUT)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP 
ftp_put($id_ftp,$archivo_remoto,$archivo_local,FTP_BINARY);
//Sube un archivo al Servidor FTP en modo Binario
ftp_quit($id_ftp); //Cierra la conexion FTP
}

function 
ObtenerRuta(){
//Obriene ruta del directorio del Servidor FTP (Comando PWD)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP 
$Directorio=ftp_pwd($id_ftp); //Devuelve ruta actual p.e. "/home/willy"
ftp_quit($id_ftp); //Cierra la conexion FTP
return $Directorio//Devuelve la ruta a la función
}

?>

descarga_con_funciones.php
Código PHP:
<?
    
include('funciones_descarga.php'); //Incluye el archivo de funciones}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>::..Funciones FTP..::</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
    <p align="center"><font size="5" face="Verdana, Tahoma, Arial"><strong><em>Funciones FTP</em></strong></font></p>
  
    <p><font face="Verdana, Tahoma, Arial"><strong><font color="#000000" size="3">Lista de Archivos</font></strong></font></p>
    
    <table width="69%" border="1" cellspacing="0" cellpadding="0">
        <tr>
            <td><div align="center">Nombre</div></td>
            <td><div align="center">Tama&ntilde;o</div></td>
            <td><div align="center">Fec. Modificaci&oacute;n</div></td>
        </tr>
        <?
        $id_ftp
=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP 
        
$ruta="/eyes/"//Obtiene la ruta actual en el Servidor FTP
        
echo "<b>El directorio actual es: </b> ".$ruta;
        
$lista=ftp_nlist($id_ftp,$ruta); //Devuelve un array con los nombres de ficheros
        
$lista=array_reverse($lista); //Invierte orden del array (ordena array)
        
        
while ($item=array_pop($lista)) //Se leen todos los ficheros y directorios del directorio
        
{
            
$tamano=number_format(((ftp_size($id_ftp,$item))/1024),2)." Kb"
            
//Obtiene tamaño de archivo y lo pasa a KB
            
if($tamano=="-0.00 Kb"// Si es -0.00 Kb se refiere a un directorio
            

                
$item="<i>".$item."</i>";  
                
$tamano="&nbsp;";
                
$fecha="&nbsp;";
            }
            else
            {
                
//Filemtime obtiene la fecha de modificacion del fichero; y date le da el formato de salida
                
$fecha=date("d/m/y h:i:s"ftp_mdtm($id_ftp,$item));
                
                
//Para quitarle la barra (/)
                
$item str_replace("/","",$item);
            }
?>
            
            <tr>
                <td><a href="Descarga.php?item=<?=$item?>&ruta=<?=$ruta?>"><?=$item?></a></td>
                <td><? echo $tamano ?></td>
                <td><? echo $fecha ?></td>
            </tr><?
        
?>
    </table>
</body>
</html>

descarga.php
Código PHP:
<?php
    
    
include('funciones_descarga.php'); //Incluye el archivo de funciones}
    
    
$item$_GET["item"];
    
$ruta$_GET["ruta"];
    
$enlace =  $ruta.$item;

echo 
$item;
    
ConectarFTP();
echo 
"Se conectó";

        
header('Content-Description: File Transfer');
        
header('Content-Type: application/octet-stream');
        
header('Content-Disposition: attachment; filename='.basename($item));
        
header('Content-Transfer-Encoding: binary');
        
header('Expires: 0');
        
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        
header('Pragma: public');
        
header('Content-Length: ' filesize($enlace));
        
ob_clean();
        
flush();
        
readfile($enlace);
        exit;
?>

Disculpen la suciedad del código, pero estoy desesperada, cuando funcione lo limpio, jojo.

Etiquetas: ftp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:42.