2009-04-10 7 views
11

Je veux écrire un fichier texte dans le serveur via Php, et avoir le client pour télécharger ce fichier.envoyer un fichier au client

Comment est-ce que je ferais cela? Essentiellement, le client devrait être en mesure de télécharger le fichier à partir du serveur

Répondre

4

PHP a un certain nombre de fonctions C très simplistes pour écrire dans des fichiers. Voici un exemple simple:

<?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); 
?> 

Il est un exemple très basique, mais vous pouvez trouver des références à ce genre d'opération ici:

PHP fopen

2

juste après un lien sur le site pour http://example.com/textfile.php

Et dans ce fichier PHP que vous placez le code suivant:

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

De cette façon, vous pouvez créer la dynamique du contenu (à partir d'une base de données) ... Essayez de Google à oter "Content-Type" si celui-ci n'est pas celui que vous recherchez.

+0

Le lien est rompu. Pourriez-vous le réparer? –

+5

C'est un exemple de lien. – Zeusoflightning125

14

En plus des données déjà publiées, il y a un en-tête que vous voudrez peut-être essayer.

Sa seule une suggestion à la façon dont sa destinée à traiter, et l'agent utilisateur peut choisir de l'ignorer, et afficher simplement le fichier dans la fenêtre si elle sait:

<?php 

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

Voir Rfc2183 pour plus d'informations sur l'en-tête Content-Disposition.

+2

Je ne savais pas sur "Content-Disposition". Merci pour l'info. +1 – Calvin

1

Si vous définissez le type de contenu sur application/octet-stream, le navigateur proposera TOUJOURS le fichier en téléchargement et ne tentera jamais de l'afficher en interne, quel que soit le type de fichier.

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

    // output file content here 
?> 
+0

PS: bien que cela puisse fonctionner avec certains UA, ce n'est pas la spécification RFC, donc il vaut mieux utiliser la version majuscule. –

+0

l'autre problème avec le fait de s'appuyer sur octet-stream, est que vous forcez l'utilisateur à l'enregistrer, car il ne peut pas utiliser MIME pour déterminer avec quelle application l'ouvrir en externe, et c'est un problème. –

+0

@Kent Fredric: Selon RFC, les noms d'en-tête sont insensibles à la casse. – tylerl

11

C'est la meilleure façon de le faire, en supposant que vous ne voulez pas l'utilisateur de voir l'URL réelle du fichier.

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

En outre, vous pouvez protéger vos fichiers avec mod_access.