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ño</div></td>
<td><div align="center">Fec. Modificació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=" ";
$fecha=" ";
}
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.