Quand est-ce que c'est une bonne idée d'utiliser PHP_EOL
?
Je vois parfois cela dans les échantillons de code de PHP. Est-ce que cela permet de gérer les problèmes de fin de ligne DOS/Mac/Unix ?
Quand est-ce que c'est une bonne idée d'utiliser PHP_EOL
?
Je vois parfois cela dans les échantillons de code de PHP. Est-ce que cela permet de gérer les problèmes de fin de ligne DOS/Mac/Unix ?
Oui, PHP_EOL
est ostensiblement utilisé pour trouver le caractère de nouvelle ligne d'une manière compatible avec toutes les plates-formes, donc il gère les problèmes DOS/Unix.
Notez que PHP_EOL représente le caractère de fin de ligne pour l'élément actuel système. Par exemple, il ne trouvera pas de ligne de fin de Windows s'il est exécuté sur un système de type Unix.
Doit-on l'utiliser comme caractère de fin de ligne lors de l'écriture d'un script en ligne de commande ?
André : Qu'en est-il des personnes qui écrivent des applications destinées à être installées, utilisées et déployées par d'autres ? Suggérez-vous que toutes ces personnes devraient limiter leurs "plateformes supportées" à *nix ?
De main/php.h
de la version 7.1.1 de PHP et de la version 5.6.30 :
#ifdef PHP_WIN32
# include "tsrm_win32.h"
# include "win95nt.h"
# ifdef PHP_EXPORTS
# define PHPAPI __declspec(dllexport)
# else
# define PHPAPI __declspec(dllimport)
# endif
# define PHP_DIR_SEPARATOR '\\'
# define PHP_EOL "\r\n"
#else
# if defined(__GNUC__) && __GNUC__ >= 4
# define PHPAPI __attribute__ ((visibility("default")))
# else
# define PHPAPI
# endif
# define THREAD_LS
# define PHP_DIR_SEPARATOR '/'
# define PHP_EOL "\n"
#endif
Comme vous pouvez le constater PHP_EOL
peut être "\r\n"
(sur les serveurs Windows) ou "\n"
(sur tout autre chose). Sur les versions de PHP avant 5.4.0RC8, il y avait une troisième valeur possible pour le paramètre PHP_EOL
: "\r"
(sur les serveurs MacOSX). Il était erroné et a été corrigé le 2012-03-01 avec bogue 61193 .
Comme d'autres vous l'ont déjà dit, vous pouvez utiliser PHP_EOL
dans tout type de sortie (où tout de ces valeurs sont valides - comme : HTML, XML, logs...) où vous voulez des valeurs unifiées nouvelles lignes . N'oubliez pas que c'est le serveur qui détermine la valeur, et non le client. Vos visiteurs Windows obtiendront la valeur de votre serveur Unix, ce qui est parfois gênant pour eux.
Je voulais juste montrer les valeurs possibles de PHP_EOL
soutenu par les sources du PHP puisqu'il n'a pas encore été montré ici...
Wow. Les développeurs PHP ont tout faux sur ce point. Comme le lien Wikipedia que vous donnez le mentionne, Mac OS 9 et avant utilisaient " \r ", mais pas OS X, qui utilise " \n ". Quelqu'un devrait déposer un rapport de bogue...
@imgx64 Il a été corrigé 33 jours après votre message :) J'ai mis à jour ma réponse pour refléter les sources actuelles.
Vous utilisez PHP_EOL
quand vous voulez une nouvelle ligne, et vous voulez être multiplateforme.
Cela peut être le cas lorsque vous écrivez des fichiers sur le système de fichiers (journaux, exportations, autres).
Vous pouvez l'utiliser si vous voulez que le HTML généré soit lisible. Ainsi, vous pourriez suivre votre <br />
avec un PHP_EOL
.
Vous l'utiliseriez si vous exécutez php en tant que script depuis cron et que vous avez besoin de sortir quelque chose et de le faire formater pour un écran.
Vous pouvez l'utiliser si vous préparez un courriel à envoyer qui nécessite une certaine mise en forme.
Il n'est pas nécessaire d'utiliser des sauts de ligne indépendants de la plate-forme pour générer du HTML.
@Rob, Si les anciennes versions d'IE me donnaient un meilleur visualiseur de page-source que le bloc-notes de Windows, j'aurais pu être d'accord avec vous.
@Zoredache - le HTML sera généré avec les nouvelles lignes appropriées à la plate-forme sur laquelle PHP est exécuté, mais pas nécessairement à la plate-forme à partir de laquelle vous accédez aux pages.
PHP_EOL (chaîne) Le symbole "End Of Line" correct pour cette plateforme. Disponible depuis PHP 4.3.10 et PHP 5.0.2.
Vous pouvez utiliser cette constante lorsque vous lisez ou écrivez des fichiers texte sur le système de fichiers du serveur.
Les fins de ligne n'ont pas d'importance dans la plupart des cas, car la plupart des logiciels sont capables de traiter les fichiers texte quelle que soit leur origine. Vous devez être cohérent avec votre code.
Si les fins de ligne ont de l'importance, spécifiez explicitement les fins de ligne au lieu d'utiliser la constante. Par exemple :
\r\n
\r\n
comme séparateur de ligneJ'ai trouvé PHP_EOL très utile pour la gestion des fichiers, spécialement si vous écrivez plusieurs lignes de contenu dans un fichier.
Par exemple, vous avez une longue chaîne de caractères que vous voulez séparer en plusieurs lignes lors de l'écriture dans un fichier ordinaire. Utilisation de \r\n pourrait ne pas fonctionner, alors mettez simplement PHP_EOL dans votre script et le résultat est génial.
Regardez cet exemple simple ci-dessous :
<?php
$output = 'This is line 1' . PHP_EOL .
'This is line 2' . PHP_EOL .
'This is line 3';
$file = "filename.txt";
if (is_writable($file)) {
// In our example we're opening $file in append mode.
// The file pointer is at the bottom of the file hence
// that's where $output will go when we fwrite() it.
if (!$handle = fopen($file, 'a')) {
echo "Cannot open file ($file)";
exit;
}
// Write $output to our opened file.
if (fwrite($handle, $output) === FALSE) {
echo "Cannot write to file ($file)";
exit;
}
echo "Success, content ($output) wrote to file ($file)";
fclose($handle);
} else {
echo "The file $file is not writable";
}
?>
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Je pense qu'il y a beaucoup de conseils trompeurs dans les réponses votées sur cette page. Si vous exécutez un script sur deux plates-formes différentes, puis que vous comparez la sortie ou les données générées (fichiers journaux, page html, enregistrements de la base de données, etc. Dans la plupart des cas, ce n'est pas ce que vous voulez.