2010-11-16 59 views
27

je le script de test suivant:Line break ne fonctionne pas lors de l'écriture dans un fichier texte en PHP

<?php 

$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = "Floppy Jalopy\n"; 
fwrite($fh, $stringData); 
$stringData = "Pointy Pinto\n"; 
fwrite($fh, $stringData); 
fclose($fh); 

?> 

lorsqu'il est exécuté, cependant, et ouvert usign Bloc-notes, les données sont renvoyées en une seule ligne sans interruption comme:

Floppy Jalopy (boîte fou) Pointy Pinto (box fou)

où je ne peux pas trouver le caractère approprié pour 'boîte fou', mais son un Boîte vraiment folle. CE QUI DONNE!

Répondre

33

Si vous voulez ouvrir le fichier dans le bloc-notes de Windows, vous devez utiliser les sauts de ligne Windows: \r\n

+2

si vous l'ouvrez dans Wordpad, il va gérer soit \ n' ou '\ r \ n', comme beaucoup d'autres éditeurs, mais Notepad est difficile. – Spudley

51

Il est préférable d'utiliser PHP_EOL. Ceci est multi-plateforme, donc il choisit automatiquement le (s) caractère (s) de retour à la ligne correct (s) pour la plate-forme que PHP exécute actuellement.

$stringData = "Floppy Jalopy" . PHP_EOL; 

PHP Constants

+7

Il est seulement "préférable" d'utiliser PHP_EOL si les fichiers doivent toujours être utilisés sur la même plate-forme que votre script. Dans mon expérience la plupart du temps, vous créez des fichiers à télécharger, envoyer par courrier électronique ou analyser plus tard - tous les cas où vous avez besoin de fichiers avec un caractère de nouvelle ligne * spécifique * et non celui de la plateforme sur laquelle le script s'exécute. – AndreKR

+0

@AndreKR: Vrai. –

+0

Cela semble être la meilleure réponse. –

1

Votre code fonctionne bien.

Utilisez Notepad2 ou Notepad++ si vous travaillez sous Windows. Le bloc-notes intégré est incapable de gérer les fins de ligne de type Unix.

0

. PHP_EOL; fonctionnera universellement

+0

Cela semble se répéter [cette réponse existante] (http://stackoverflow.com/a/4196123). – Pang