Les constantes PHP PHP_OS et PHP_EOL

Ces deux constantes du langage PHP sont méconnues et on se demande parfois à quoi elles peuvent servir.

PHP_OS renvoie le nom du système d'exploitation sur lequel l'exécutable PHP a été compilé. On a donc généralement WINNT sur une plateforme Windows, Linux ou FreeBSD sur des systèmes Unix par exemple. C'est donc utile pour modifier le comportement d'un programme en fonction du système d'exploitation où il fonctionne. PHP est très portable, donc le cas se présente rarement, mais ça peut être utile parfois (voir l'exemple ci-dessous).

PHP_EOL renvoie une chaine correspondant au saut de ligne sur la plateforme (LF, \n ou #10 sur Unix, CRLF, \n\r ou #13#10 sur Windows).

Dans l'exemple ci-dessous, on suppose qu'on est dans un script CLI (qui s'exécute sur la ligne de commande), et on veut afficher dans la console DOS ou le terminal UNIX un tableau de lignes contenant du texte encodé en UTF-8.

<?php
// PHP_OS nous permet de détecter le jeu de caractère du terminal
if (PHP_OS == 'WINNT') {
    
// L'encodage CP850 est utilisé pour les fenêtres DOS
    
$outEncoding 'CP850';
} else {
    
// Sous Unix, on peut avoir plusieurs jeux de caractère différents
    
$locale setlocale(LC_CTYPE0);
    
$outEncoding substr($locale6);
    if (empty(
$outEncoding)) {
        
$outEncoding 'ISO-8859-1';
    } else {
        switch(
$outEncoding) {
            case 
'euro':
                
$outEncoding 'ISO-8859-15';
                break;
        }
    }
}
// Demande à iconv d'ignorer les caractères non supportés 
// par le jeu de caractère de sortie
$outEncoding .= '//IGNORE';

// L'utilisation de PHP_EOL garantit que le retour à la ligne sera correct
foreach ($lines as $line) {
    if (
$outEncoding != 'UTF-8') {
        
$line iconv('UTF-8'$outEncoding$line);
    }
    echo 
$line PHP_EOL;
}
?>

Attention, c'est un exemple. Sur les plateformes Unix, l'encodage peut être spécifié de bien des manières, il faut donc adapter ce script à votre machine.

Etiquettes:

Commentaires

Je pense que le paragraphe "PHP_EOL renvoie une chaine correspondant au saut de ligne sur la plateforme (LF, \n ou #10 sur Unix, CRLF, \n\r ou #13#10 sur Windows)." contient une erreur, le paragraphe devrait être comme suit: "PHP_EOL renvoie une chaine correspondant au saut de ligne sur la plateforme (LF, \n ou #10 sur Unix, CRLF, \r\n ou #13#10 sur Windows).": permutation de CR-LF.

Ajouter un commentaire