PHP a-t-il une fonction permettant de détecter le système d'exploitation sur lequel il tourne?

StackOverflow https://stackoverflow.com/questions/623776

  •  05-07-2019
  •  | 
  •  

Question

Je ne saurais pas sous quel mot clé chercher dans la base de données PHP, je vous le demande donc ici.

La raison que je veux savoir tient à la façon dont différents systèmes d'exploitation gèrent les nouvelles lignes dans les documents texte.

J'utilise un fichier CSV dans Windows, mais chaque fois que je pense ajouter une nouvelle ligne, ce qui se produit réellement est que la nouvelle ligne est collée à l'arrière de la dernière ligne.

La raison est, dans Windows, une nouvelle ligne est la suivante: \r\n Et le fichier CSVHandler.class.php que j’utilise n’ajoute que \n

Cependant, sous MAC OS X, il s’agit de la nouvelle ligne, différente de Windows.

Je cherche donc ceci afin de pouvoir implémenter une simple if() déclaration et résoudre ce problème. Actuellement, j'ai codé en dur le <=>, mais cela devrait être plus simple, non?

Était-ce utile?

La solution

PHP a inclus la constante PHP_EOL pour résoudre le problème auquel vous êtes confronté , disponible depuis php 4.3.10 et PHP 5.0.2 - il contient une séquence de fin de ligne adaptée au serveur sur lequel PHP est exécuté.

Si vous souhaitez utiliser une séquence de fin de ligne différente, adaptée à un client particulier, vous devrez la coder vous-même. Un moyen de déterminer le système d'exploitation client consiste à utiliser get_browser , en supposant que votre serveur dispose d'un browscap.ini

à jour

Autres conseils

  

* & "BTW, nix OS utilise \ n comme nouvelle ligne. Mac   usees \ r, Windows - \ r \ n "

ARRRGH! VEUILLEZ CESSER DE PERPETUER CE MYTHE!

Mac OS 9 l’utilisait il ya 10 ans, mais plus personne n’utilise OS9. MACS UTILISE LES FINS DE LIGNE UNIX. \ n. & "Mac &" utilisé aujourd'hui devrait faire référence aux ordinateurs contemporains, tout comme & "Windows &"; fait référence à XP ou à Vista, sauf indication contraire.

Dire que les utilisateurs de Mac utilisent \ r est à peu près aussi correct que de dire que & "Windows s’exécute sur MS-DOS, ne prend en charge que le système de fichiers FAT16 et n’a pas de prise en charge 64 bits. &";

Personne ne devrait jamais utiliser \ r pour quoi que ce soit en aucune circonstance. À moins qu’ils ne ciblent des macros démodés.

Vous pouvez utiliser la constante prédéfinie PHP_OS .

j'utilise

  

if (PHP_OS === 'WINNT') {...}

Les informations sur le système d'exploitation du serveur peuvent être obtenues avec la php_uname() fonction:

echo 'I have been run on '.php_uname('s');

Il permet également de récupérer les informations complètes sur la version.

Vérifiez la variable $ _SERVER.

echo "<pre>";
print_r($_SERVER);

Vous pouvez ensuite utiliser strstr (ou n’importe quelle fonction de comparaison de chaînes) pour vérifier si vous utilisez Windows. Dans cet exemple, j'ai vérifié SERVER_SIGNATURE, mais vous pouvez utiliser la clé de votre choix.

$isWindows = strstr($_SERVER[SERVER_SIGNATURE], "Win32") !== FALSE;

Vous pouvez également effectuer un appel php info pour consulter de nombreux paramètres de configuration de votre configuration PHP. Le code est simple:

phpinfo();

Autant que je sache, si PHP est exécuté sur Windows, il y aura une variable d’environnement appelée WINDIR. Je pense que vous pourriez faire ceci:

$isWindows = isset($_SERVER['WINDIR']);

Beaucoup de réponses déjà, mais voici mes 2 centimes:

function windows_server()
#   Purpose:    Check if server is Windows
{
    return in_array(strtolower(PHP_OS), array("win32", "windows", "winnt"));
}

## --------------------------------------------------------

function linux_server()
#   Purpose:    Check if server is Linux
{
    return in_array(strtolower(PHP_OS), array("linux", "superior operating system"));
}

Je recommanderais php_uname . Il suffit de lire l'explication de la documentation:

  

php_uname & # 8212; Renvoie des informations sur le système d'exploitation PHP.   en cours d'exécution sur

J'ai bien aimé la suggestion de PHP_OS ci-dessus, mais soyez prudent, comme l'indique cette note de la documentation:

  

Songez à utiliser la constante PHP_OS, mais gardez à l'esprit cette constante   contiendra le système d’exploitation de PHP sur lequel a été construit .

Lors de la lecture, la solution la plus sûre consiste probablement à déterminer le ou les caractères de fin de ligne à partir du fichier lui-même ou à accepter indifféremment toutes les fins de ligne. Cela vous protège des dommages si vous copiez le fichier csv d'un ordinateur à un autre avec un système d'exploitation différent. Si vous lisez avant d’écrire, vous pouvez faire en sorte que les fins de ligne de votre sortie correspondent à celles que vous avez identifiées lors de la lecture.

Pour les fichiers CSV, php a quelques fonctions de bibliothèque. Essayez de chercher php.net pour fgetcsv et fputcsv. Il y a auto_detect_line_endings qui peut être défini dans le fichier php.ini, mais je ne connais pas les détails de son fonctionnement.

J'utilise toujours le " \ n " par lui-même sur Linux et Windows. J'utilise le Bloc-notes pour les éditer dans Windows et cela ne casse pas les fins. Pour ma propre utilisation de CSV, je trouve qu'il est trop compliqué de prendre en charge différentes terminaisons, mais si les utilisateurs doivent interagir avec eux, vous souhaitez être en sécurité plutôt que commode.

$svr_os=strtolower(reset(explode(' ',php_uname('s'))));

$isLinux=$svr_os==='linux';

$isWindows=$svr_os==='windows';
<?php
$OSList = array
(
        // Match user agent string with operating systems
        'Windows 3.11' => 'Win16',
        'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
        'Windows 98' => '(Windows 98)|(Win98)',
        'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
        'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
        'Windows Server 2003' => '(Windows NT 5.2)',
        'Windows Vista' => '(Windows NT 6.0)',
        'Windows 7' => '(Windows NT 7.0)',
        'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
        'Windows ME' => 'Windows ME',
        'Open BSD' => 'OpenBSD',
        'Sun OS' => 'SunOS',
        'Linux' => '(Linux)|(X11)',
        'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
        'QNX' => 'QNX',
        'BeOS' => 'BeOS',
        'OS/2' => 'OS/2',
        'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
);

// Loop through the array of user agents and matching operating systems
foreach($OSList as $CurrOS=>$Match)
{
        // Find a match
        if (eregi($Match, $_SERVER['HTTP_USER_AGENT']))
        {
                // We found the correct match
                break;
        }
}
// You are using Windows Vista
echo "You are using ".$CurrOS;
?>

Essayez également cette fonction:

$b = get_browser(null, true);

et dans $ b ['platform'] seront OS.

BTW, * nix OS utilise \ n comme nouvelle ligne. Utilisateurs Mac, Windows - \ r \ n

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top