2009-04-10 11 views
11

Quiero escribir un archivo de texto en el servidor a través de Php, y hacer que el cliente descargue ese archivo.envíe un archivo al cliente

¿Cómo haré eso?

Esencialmente, el cliente debería poder descargar el archivo del servidor.

Respuesta

4

PHP tiene una serie de funciones simplistas similares a C para escribir en archivos. He aquí un ejemplo sencillo:

<?php 
// first parameter is the filename 
//second parameter is the modifier: r=read, w=write, a=append 
$handle = fopen("logs/thisFile.txt", "w"); 

$myContent = "This is my awesome string!"; 

// actually write the file contents 
fwrite($handle, $myContent); 

// close the file pointer 
fclose($handle); 
?> 

Es un ejemplo muy básico, pero se pueden encontrar más referencias a este tipo de operación aquí:

PHP fopen

2

Sólo enviar un enlace en el sitio para http://example.com/textfile.php

Y en ese archivo PHP que poner el siguiente código:

<?php 
header('Content-Type: text/plain'); 
print "The output text"; 
?> 

De esta forma puede crear la dinámica de contenido (desde una base de datos) ... Intente buscar en Google "Content-Type" si este no es el que está buscando.

+0

El enlace está roto. ¿Podrías arreglarlo? –

+5

Es un enlace de ejemplo. – Zeusoflightning125

14

Además de los datos ya publicados, hay un encabezado que puede intentar.

a sólo un sugerencia a la forma en que va a ser manejado, y el agente de usuario puede optar por ignorarlo, y simplemente mostrar el archivo en la ventana si se sabe:

<?php 

header('Content-Type: text/plain');   # its a text file 
header('Content-Disposition: attachment'); # hit to trigger external mechanisms instead of inbuilt 

Ver Rfc2183 para más información sobre el encabezado Content-Disposition.

+2

No sabía acerca de "Content-Disposition". Gracias por la info. +1 – Calvin

1

Si configura el tipo de contenido como application/octet-stream, el navegador SIEMPRE ofrecerá el archivo como descarga y nunca intentará mostrarlo internamente, independientemente del tipo de archivo que sea.

<?php 
    filename="download.txt"; 
    header("Content-type: application/octet-stream"); 
    header("Content-disposition: attachment;filename=$filename"); 

    // output file content here 
?> 
+0

PD: aunque podría funcionar con el pequeño d en algunos UA, es * no * la especificación de RFC, por lo que es mejor utilizar la versión en mayúscula. –

+0

el otro problema con depender de octet-stream, es forzar al usuario a guardarlo, porque no puede usar MIME para determinar qué aplicación para abrirlo externamente, y eso es un problema. –

+0

@Kent Fredric: Según RFC, los nombres de los encabezados no distinguen entre mayúsculas y minúsculas. – tylerl

11

Esta es la mejor manera de hacerlo, suponiendo que no desea que el usuario vea la URL real del archivo.

<?php 
    $filename="download.txt"; 
    header("Content-disposition: attachment;filename=$filename"); 
    readfile($filename); 
?> 

Además, puede proteger sus archivos con mod_access.

Cuestiones relacionadas