8722 sujets

Développement web côté serveur, CMS

Bonjour à tous
J'ai un tableau PHP obtenu par

$aaa = file(....);

J'y fais quelques changements et je veux le réécrire.
Si j'écris

$aaa = implode("\n", $aaa);
file_put_contents(..., $aaa);

Les lignes sont séparées par une ligne blanche (CR +LF)
Si au lieu de "\n" je mets "\r" j'obtiens le même résultat.
Quelle est la bonne façon de faire?

Edit: j'obtiens le bon résultat par

$aaa = implode("\n", $aaa);
$aaa = preg_replace("#[\n\r]+#", "\n", $aaa);
file_put_contents(...., $aaa);

mais je suppose qu'il doit y avoir quelque chose de plus simple??
Modifié par PapyJP (16 Sep 2021 - 15:36)
Non, je n'ai pas pensé que \r\n ferait autre chose que 3 lignes blanches entre les lignes, mais je vais essayer...
Bonsoir PapyJP,
La fonction file conserve les sauts de ligne, donc votre implode en ajoute un supplémentaire à chaque ligne.
Donc, soit vous faites un implode avec une chaîne vide en tant que glue, soit vous utilisez le flag FILE_IGNORE_NEW_LINES lors de votre appel à file(). La première solution me semble préférable puisqu'elle conserve le saut du ligne original (indépendamment de la plateforme).
Meilleure solution
Seven tears a écrit :
Bonsoir PapyJP,
La fonction file conserve les sauts de ligne, donc votre implode en ajoute un supplémentaire à chaque ligne.

Bonne remarque, je vais voir de ce côté là.
Modifié par PapyJP (17 Sep 2021 - 10:54)
vzytoi a écrit :
Tu as essayé avec PHP_EOL ?

$aaa = implode(PHP_EOL, $aaa);
file_put_contents(..., $aaa);

Oui, même résultat.
Je vais garder
$data = preg_replace("#[\n\r]+#", "\n", $data);

mais je n'aime pas ne pas comprendre...
C'est Seven tears qui a trouvé ce qui ne marchait pas.
Les infos que je retrouvais dans ce fichiers étaient faussée par la présence d'un LF à la fin de la ligne, c'était cette information fausse (avec un LF en plus) que je stockais dans ma base de données, puis récupérais pour le réécrire dans le fichier.

Merci beaucoup: derrière un problème apparent de cosmétique il y avait un vrai problème.