Pour construire un script spécifique à unix/dos, j'ai besoin de savoir quel type de système d'exploitation je suis.
Comment puis-je obtenir cette information?phpinfo();
me dit beaucoup plus et pas très clair si je suis sous Unix ou pas.
PHP contient de nombreuses constantes prédéfinies qui sont souvent utiles.
Ici, PHP_OS
est celui que vous recherchez.
Par exemple, sur mon ordinateur actuel, ce code:
var_dump(PHP_OS);
Donne:
string 'Linux' (length=5)
Vous avez des exemples et des comparaisons avec ce que la fonction php_uname
peut vous obtenir sur la page de manuel de php_uname
; par exemple (citant):
<?php
echo php_uname();
echo PHP_OS;
/* Some possible outputs:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux
FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD
Windows NT XN1 5.1 build 2600
WINNT
*/
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
Cette page dit aussi:
Pour le nom de seulement le fonctionnement système, envisagez d’utiliser le
PHP_OS
constant, mais gardez à l’esprit ce la constante contiendra le fonctionnement le système PHP était construit sur.
N'oubliez pas que PHP_OS
contient en fait la plate-forme sur laquelle PHP a été construit. Ce n'est peut-être pas la même plate-forme que celle sur laquelle elle est déployée. Par conséquent, php_uname('s')
est plus fiable.
A partir de PHP 7.2.0 nous avons une nouvelle constante prédéfinie pour obtenir la famille du système d'exploitation, à savoir PHP_OS_FAMILY . Elle renvoie un string. Windows ',' BSD ',' OSX ',' Solaris ',' Linux 'ou' Inconnu '.
PHP_OS est défini avec le nom de l'hôte: http://us2.php.net/manual/en/reserved.constants.php
Il y a 2 façons différentes de vérifier la plate-forme que votre PHP exécute sur celle-ci.
PHP_OS
qui est un const et pointera sur le 'nom du système En cours d’exploitation' dans lequel votre PHP a été construit.php_uname()
qui vous en dira plus sur la plate-forme (Nom du système d'exploitation, Nom de l'hôte, Informations sur la version , Nom de la version, Type de machine) sur laquelle votre script est exécuté .PHP Ne fournit aucune fonction pour obtenir le nom de la distribution, php_uname
est similaire à la commande Linux uname
, ne fournit aucune information sur la distribution elle-même.
php_uname
ni PHP_OS
ne donnent pas suffisamment d'informations. concernant la distribution mais le type de système d’exploitation (par exemple, Linux/Windows).
Je pense que le meilleur moyen de savoir quel est le système d’exploitation/la distribution en cours d’exécution est de lire /etc/os-release
. Ce qui est bien, c’est que ce fichier a une autorisation de lecture pour tous les utilisateurs du système et que le problème est que cela ne fonctionnera peut-être pas sur un hébergement partagé.
Ici, j’ai écrit une fonction très simple PHP qui lit et convertit os-release
en tableau:
function getOSInformation()
{
if (false == function_exists("Shell_exec") || false == is_readable("/etc/os-release")) {
return null;
}
$os = Shell_exec('cat /etc/os-release');
$listIds = preg_match_all('/.*=/', $os, $matchListIds);
$listIds = $matchListIds[0];
$listVal = preg_match_all('/=.*/', $os, $matchListVal);
$listVal = $matchListVal[0];
array_walk($listIds, function(&$v, $k){
$v = strtolower(str_replace('=', '', $v));
});
array_walk($listVal, function(&$v, $k){
$v = preg_replace('/=|"/', '', $v);
});
return array_combine($listIds, $listVal);
}
Cette fonction imprime quelque chose comme ceci:
Array
(
[name] => Ubuntu
[version] => 16.04.2 LTS (Xenial Xerus)
[id] => ubuntu
[id_like] => debian
[pretty_name] => Ubuntu 16.04.2 LTS
[version_id] => 16.04
[home_url] => http://www.ubuntu.com/
[support_url] => http://help.ubuntu.com/
[bug_report_url] => http://bugs.launchpad.net/ubuntu/
[version_codename] => xenial
[ubuntu_codename] => xenial
)
Held og lykke [1] ;-)
[1] L'expression danoise signifie bonne chance.
Sur php 7.2.0, vous pouvez utiliser la constante PHP_OS_FAMILY
:
Dans une autre version PHP, vous pouvez utiliser:
/**
* return DOS OR UNIX
*/
function familyOS() {
return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}
#!/usr/bin/env php
<?php
$platform = DIRECTORY_SEPARATOR === '\\'
? 'Windows'
: 'Unix/Linux';
Je suis conscient que ce n'est pas très granulaire, mais cela peut suffire pour une simple reconnaissance entre les systèmes Win et * nix. YMMV