2010-09-10 5 views
2

Je veux 'forcer' le téléchargement d'un fichier texte en PHP.Fichiers texte en PHP fileread

J'ai le code suivant, que je pris sur la part web:

if (isset($_REQUEST["file"])) { 
    $file=$_REQUEST["file"]; 
    header("Content-type: application/force-download"); 
    header("Content-Transfer-Encoding: ansi"); 
    header("Content-length: ".filesize($file)); 
    header("Content-disposition: attachment; filename=".basename($file)); 
    echo @fileread("$file"); 
} 
else 
{ 
    echo "No file selected"; 
} 

Cela semble fonctionner correctement, mais lorsque le fichier est ouvert dans Windows avec bloc-notes, les fins de ligne ne sont pas conservés. Quelqu'un pourrait-il offrir une solution à cela (les fichiers texte doivent être créés avec le bloc-notes)?

Merci, Rich

+0

Windows '' notepad' est mauvais. Utilisez n'importe quoi d'autre comme "Wordpad". 'Notepad' a toujours eu ces problèmes. – hsz

+0

Est-ce que le fichier que vous produisez apparaît bien si vous l'affichez dans le bloc-notes sans le télécharger d'abord via le script PHP? –

+0

Désolé pour le code - il devrait lire binaire pas ansi, je faisais juste le tour et copié le code sans changer en arrière. Pareil avec l'erreur d'orthographe de readfile(). – Rich

Répondre

0

En autant que je sache le bloc-notes supprime les fins de ligne dans ce cas.

0

readfile(), non fileread. et oui 'ce n'est pas readfile, PHP ou même problème de serveur Web. c'est juste unix et Windows différence de format texte brut.

dans unix il est \n alors que dans les fenêtres, il est \r\n
vous devez créer ces fichiers en utilisant le format Windows

noter également que votre code est très précaire. et laisser un attaquant de lire tous les fichiers que vous avez, y compris les mots de passe, etc. au moins le rendre

$file=basename($_REQUEST["file"]); 
+0

Juste point mais nous ne savons pas si le fichier original a un formatage Unix ou Windows –

+0

Nous vous remercions de vos préoccupations. J'ai seulement posté un extrait; Je vais m'inquiéter de la sécurité lorsque le script fonctionnera comme j'en ai besoin. – Rich

0

Au meilleur de ma connaissance, ansi est pas un codage de transfert de contenu valide. Puisque vous voulez préserver le contenu du fichier tel quel (et ces contenus peuvent contenir des lignes longues et des fins de ligne CRLF), vous voulez probablement utiliser binary

+0

Désolé, je jouais avec le code! Il a été défini comme binaire. – Rich