ecrire dans un fichier texte

Eléphant du PHP | 119 Messages

20 juin 2006, 11:20

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

ViPHP
ViPHP | 1380 Messages

20 juin 2006, 11:24

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
ripat

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juin 2006, 11:48

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 juin 2006, 11:51

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 :?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 2144 Messages

20 juin 2006, 11:55

Si je me souviens bien, Notepad ne les gère pas, mais wordpad si

ViPHP
ViPHP | 1380 Messages

20 juin 2006, 13:38

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
ripat