2009-04-08 6 views
8

Come posso visualizzare la finestra di dialogo "Salva con nome" usando PHP che chiederà all'utente di scaricare una stringa come file di testo? Fondamentalmente recupererò alcuni valori dal database e voglio quindi poter scaricare un file .txt che contiene questi dati.Come mostrare la finestra di dialogo "Salva come" usando PHP per i file di testo

+0

buttare questo qui perché ne avevo bisogno oltre alla risposta di emil .... per interruzioni di riga: echo "\ r \ n"; – CheeseConQueso

risposta

24

Questo dovrebbe funzionare:

header('Content-type: text/plain'); 
header('Content-disposition: attachment; filename="test.txt"'); 
6

Giusto per espandere sulla risposta @Emil H:

Utilizzando quelle chiamate intestazione funzionerà solo nel contesto di una nuova richiesta. Avrai bisogno di implementare qualcosa che permetta al tuo script di sapere quando effettivamente sta inviando il file a differenza di quando visualizza un modulo che dice all'utente di scaricare il file.

2

Per chiarire l'utilizzo di intestazione():

Official PHP Manual:

intestazione() viene utilizzato per inviare un'intestazione HTTP grezzo. Vedi la »specifica HTTP/1.1 per maggiori informazioni sulle intestazioni HTTP.

Ricordare che l'intestazione () deve essere chiamata prima che venga inviato qualsiasi output effettivo, tramite normali tag HTML, righe vuote in un file o da PHP. È un errore molto comune leggere il codice con include() o require(), funzioni o un'altra funzione di accesso ai file e avere spazi o righe vuote che vengono emesse prima dell'intestazione (). Lo stesso problema esiste quando si utilizza un singolo file PHP/HTML.

Quindi, in pratica, si sta modificando l'intera pagina quando si utilizza l'intestazione(). Assicurati che l'unico contenuto che fai eco sia la stringa.

3
<? 
header ("Content-Type: application/download"); 
header ("Content-Disposition: attachment; filename=$yourfile"); 
header("Content-Length: " . filesize("$yourfile")); 
$fp = fopen("$yourfile", "r"); 
fpassthru($fp); 
?>