J'ai un script PHP qui peut être placé sur un système Windows ou un système Linux. J'ai besoin d'exécuter différentes commandes dans les deux cas.
comment puis-je détecter dans quel environnement je suis? (de préférence quelque chose php plutôt que des hacks système intelligents)
pardon pardon!! le script est en cours d'exécution à partir de la ligne de commande !!!!
Vérifier la valeur de la constante PHP_OS
Docs .
Il vous donnera diverses valeurs sous Windows, telles que WIN32
, WINNT
ou Windows
.
Voir aussi: Valeurs possibles pour: PHP_OS et php_uname
Docs :
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
Vous pouvez vérifier si le séparateur de répertoire est /
(pour unix/linux/mac) ou \
sous Windows. Le nom de la constante est DIRECTORY_SEPARATOR
if (DIRECTORY_SEPARATOR == '/') {
// unix, linux, mac
}
if (DIRECTORY_SEPARATOR == '\\') {
// windows
}
if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
semble un peu plus élégant que la réponse acceptée. La détection susmentionnée avec DIRECTORY_SEPARATOR est toutefois la plus rapide.
Notez que PHP_OS indique le système d'exploitation sur lequel PHP était construit sur , qui n'est pas nécessairement le même système d'exploitation que celui sur lequel il est actuellement exécuté.
Si vous êtes sur PHP> = 5.3 et que vous voulez juste savoir si vous utilisez Windows ou pas, testez si l'une des constantes définies par Windows est peut-être un bon choix par exemple:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
La fonction php_uname peut être utilisée pour le détecter.
echo php_uname();
Cela devrait fonctionner dans PHP 4.3+:
if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
// Windows
}
else
{
// Linux/UNIX/OS X
}
Constantes pré-définies de base:http://us3.php.net/manual/fr/reserved.constants.php qui a la constante PHP_OS (string)
.
Ou si vous souhaitez détecter le système d'exploitation du client:
<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";
$browser = get_browser(null, true);
print_r($browser);
?>
De http://us3.php.net/manual/en/function.get-browser.php
Selon votre modification, vous pouvez vous référer à cette liste de doublons PHP Nom du serveur depuis la ligne de commande
Vous pouvez utiliser
string php_uname ([ string $mode = "a" ] )
Alors
php_uname("s")
's': nom du système d'exploitation. par exemple. FreeBSD.
Feriez le tour pour vous, voir ici http://php.net/manual/en/function.php-uname.php
Selon Constantes pré-définies: Notes contribuées par l'utilisateur Volker et la solution rdcapasso, vous pouvez simplement créer une classe auxiliaire comme ceci:
<?php
class System {
const OS_UNKNOWN = 1;
const OS_WIN = 2;
const OS_LINUX = 3;
const OS_OSX = 4;
/**
* @return int
*/
static public function getOS() {
switch (true) {
case stristr(PHP_OS, 'DAR'): return self::OS_OSX;
case stristr(PHP_OS, 'WIN'): return self::OS_WIN;
case stristr(PHP_OS, 'LINUX'): return self::OS_LINUX;
default : return self::OS_UNKNOWN;
}
}
}
Utilisation:
if(System::getOS() == System::OS_WIN) {
// do something only on Windows platform
}
Pour détecter s'il s'agit de Windows, OS X ou Linux:
if (stripos(PHP_OS, 'win') === 0) {
// code for windows
} elseif (stripos(PHP_OS, 'darwin') === 0) {
// code for OS X
} elseif (stripos(PHP_OS, 'linux') === 0) {
// code for Linux
}
stripos
est un peu plus lent que substr
dans ce cas particulier, mais il est suffisamment efficace pour une tâche aussi petite et plus élégante.
Vous pouvez vérifier si une constante existe dans PHP> 5.3.0 ( manual )
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
// is Windows
}
Auparavant, cette méthode était utilisée dans Symfony. Maintenant, ils utilisent une méthode différente :
if ('\\' === DIRECTORY_SEPARATOR) {
// is Windows
}
Si vous voulez vérifier si vous utilisez Linux, testez simplement si (PHP_OS === 'Linux')
. Pas besoin d'utiliser strtolower () et substr ().