Bajar archivo a PC local

Tengo esta forma que envío los datos a un archivo txt pero me lo guarda en el servidor; necesito que el usuario pueda guardar ese archivo al pc que tiene asignado, este es el código.
<?php
include "conexion.php";
if(isset($_REQUEST['btnConsulta']))
{
mssql_select_db ("db", $conexion);
$consul = mssql_query("Select * from Consulta",$conexion);
if(mssql_num_rows($consul)>0)
{
$arch = fopen("ConsultaExterna.txt","w");
$sep = ",";
while($reg = mssql_fetch_array($consul))
{
$linea = $reg['Factura'] . $sep . $reg['Medico'] . $sep . $reg['CodPresServ'] . $sep . $reg['CodConsulta'] . "\r\n";
fwrite($arch,$linea);
}
fclose($arch);
echo "<script>";
echo "alert('Archivo Generado con éxito');";
echo "</script>";
}
else
{
echo "<script>";
echo "alert('No se encontro ningun Registro para Generar el Archivo');";
echo "</script>";
}
}
mssql_close($conexion);
?>
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="post" action="">
<table width="90%" border="1" align="center">
<tr>
<td><table width="90%" align="center">
<tr>
<td><div align="center"><font color="#336600" size="3" face="Verdana, Arial, Helvetica, sans-serif">Presione
en el Botón para generar Archivo plano de Consulta Externa</font>
</div></td>
</tr>
<tr>
<td><div align="center">
<input name="btnConsulta" type="submit" id="btnConsulta" value="Generar Archivo">
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>
</body>
</html>

1 respuesta

Respuesta
1
Se me ocurre que podrías poner un enlace al nuevo archivo creado para que el usuario al pulsarle se lo descargase. El archivo lo generas en la misma ruta donde está el script, por lo que basta con poner una etiqueta <A> con el nombre del archivo. Te pongo el código modificado:
<?php
include "conexion.php";
if(isset($_REQUEST['btnConsulta']))
{
mssql_select_db ("db", $conexion);
$consul = mssql_query("Select * from Consulta",$conexion);
if(mssql_num_rows($consul)>0)
{
$arch = fopen("ConsultaExterna.txt","w");
$sep = ",";
while($reg = mssql_fetch_array($consul))
{
$linea = $reg['Factura'] . $sep . $reg['Medico'] . $sep . $reg['CodPresServ'] . $sep . $reg['CodConsulta'] . "\r\n";
fwrite($arch,$linea);
}
fclose($arch);
echo "<script>";
echo "alert('Archivo Generado con éxito');";
echo "</script>";
}
else
{
echo "<script>";
echo "alert('No se encontro ningun Registro para Generar el Archivo');";
echo "</script>";
}
}
mssql_close($conexion);
?>
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="post" action="">
<table width="90%" border="1" align="center">
<tr>
<td><table width="90%" align="center">
<tr>
<td><div align="center"><font color="#336600" size="3" face="Verdana, Arial, Helvetica, sans-serif">Presione
en el Botón para generar Archivo plano de Consulta Externa</font>
</div></td>
</tr>
<tr>
<td><div align="center">
<input name="btnConsulta" type="submit" id="btnConsulta" value="Generar Archivo">
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>
<?php
if(isset($_REQUEST['btnConsulta']))
{
echo "<br> Archivo generado correctamente. Lo puedes descargar pulsando sobre el enlace: <br> ";
echo "<a href='ConsultaExterna.txt'> Descargar fichero ConsultaExterna.txt </a>";
}
?>
</body>
</html>
Cordial Saludo.
¿No hay forma que aparezca el mensaje de si quiere abrir o guardar el archivo?
Con el código que me facilitaste me aparece en una página html, tengo que dar archivo->guardar y lo guardo como txt; cuando lo abro me muestra el código html y al final los registros.
Agradezco la ayuda que me estas brindando.
Puedes completar la parte de abajo de tu código poniendo dos enlaces, uno para abrir el archivo (el que ya tienes) y otro para descargarlo. El código sería el siguiente:
echo "<a href='ConsultaExterna.txt'> Abrir fichero ConsultaExterna.txt </a>";
}
?>
<a href='descarga.php'> Descargar fichero </a>
</body>
</html>
El código del fichero descarga.php sería el siguiente:
<?php
$user_agent = strtolower ($_SERVER["HTTP_USER_AGENT"]);
header("Content-Description: File Transfer");
if ((is_integer (strpos($user_agent, "msie"))) && (is_integer (strpos($user_agent, "win")))) {
header( "Content-Disposition: filename=ConsultaExterna.txt");
} else {
header( "Content-Disposition: attachment; filename=ConsultaExterna.txt");
}
header("Content-Length: ConsultaExterna.txt");
header("Content-Type: application/force-download");
@readfile("ConsultaExterna.txt");
?>
No he probado el código, pero tengo otro similar y funciona correctamente, en vez de abrir el archivo, abre la ventana para descargarlo al disco.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas