Page 1 sur 1

ecrire dans un fichier texte

Posté : 20 juin 2006, 11:20
par azerty53
bonjour,

je cherche a faire un truc simple mais je comprend pas pourquoi il ne veut pas

j'ai une page erreur.php qui doit ecrire dans un fichier texte de log

mais quand je veux mettre un retour a la ligne il me met un petit carré a la place et il ecrit tout a la suite sans faire de saut de ligne :cry: :cry: :cry:
$monfichier = fopen("Log/erreur.txt","a+");

$referer = $_SERVER['HTTP_REFERER'];
$parcours = $_SERVER['REQUEST_URI'];
$date = time();
$ip = $_SERVER['REMOTE_ADDR'];
$host = $_SERVER['HTTP_HOST'];
$navigateur = $_SERVER['HTTP_USER_AGENT'];

fputs($monfichier, "$referer - ");
fputs($monfichier, "$parcours - ");
fputs($monfichier, "$date - ");
fputs($monfichier, "$ip - ");
fputs($monfichier, "$host - ");
fputs($monfichier, "$naviguateur - ");
fputs($monfichier, "\n");

fclose($monfichier);

mais je ne pense pas que mon code sois si faux que ca ;(

merci de votre precieuse aide ;)

Posté : 20 juin 2006, 11:24
par Ripat
Quelque chose me dit que tu affiches le log sous Windows non?

Il faut savoir que windows a besoin de deux caractères pour faire un retour ligne. C'est curieux mais c'est comme ça!

*nix --> \n
windows--> \r\n

Posté : 20 juin 2006, 11:48
par Ryle
C'est pas vraiment curieux (c'est surtout ch*** en fait ;)), c'est que windows différencie la "nouvelle ligne" (\n) et le "retour en début de ligne" (\r), et qu'unix ignore ce dernier :)

Au pire, tu peux toujours y mettre des <br> et consulter ton fichier de log directement en html ;)

Posté : 20 juin 2006, 11:51
par zeus
Comme le dise mes collègues, les retours à la ligne sont présent mais les éditeurs de textes basiques comme notpad n'affiche que les retours Windows.

Pour afficher ton texte correctement, il faut que tu utilises un autre éditeur de texte ... ou que tu passes au saut de ligne Win32 :?

Posté : 20 juin 2006, 11:55
par iclo
Si je me souviens bien, Notepad ne les gère pas, mais wordpad si

Posté : 20 juin 2006, 13:38
par Ripat
C'est pas vraiment curieux (c'est surtout ch*** en fait ;)), c'est que windows différencie la "nouvelle ligne" (\n) et le "retour en début de ligne" (\r), et qu'unix ignore ce dernier :)
Allez hop, un peu d'histoire de l'informatique.

A l'époque glorieuse de l'informatique, les premières sorties sur console s'inspiraient des sorties imprimantes mécaniques (on n'avait pas encore inventé les device drivers). Or, sur ces imprimantes préhistoriques, il était indispensable d'effectuer un, voir plusieurs, retour de chariot (ou tête d'impression) avant de passer à la ligne suivante.

Le premier OS de PC, CP/M de Digital Equipement Corporation et, ensuite QDOS ont simplement repris cette habitude sans trop se poser de question sur le pourquoi du comment.

Pour la petite histoire, DEC aurait volontairement introduit ce non-sens informatique pour ne pas être accusé d'avoir copié UNIX dont CP/M s'inspirait très largement.

Microsoft acheta QDOS et le rebaptisa MS-DOS. La suite, vous la connaissez!

La domination de MS a "impacté" les RFC des protocoles internet comme HTTP, FTP etc.... où la fin d'une ligne est matérialisée par un CRLF. Mais les organes normatifs demandent aux applications d'être capable de parser les lignes marquées d'un seul LF .
The line terminator for message-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR.
http://tools.ietf.org/html/2616#section-19.3
Voilà un beau sujet pour une thèse de doctorat :wink:

Source:
http://en.wikipedia.org/wiki/CRLF