PHP script-détecter si vous utilisez linux ou Windows?
j'ai un script PHP qui peut être placé sur un système windows ou linux. Je dois exécuter des commandes différentes dans les deux cas.
comment puis-je détecter environnement qui je suis? (de préférence quelque chose de php plutôt que des hacks de système intelligents)
désolé!! le script s'exécute à partir de la ligne de commande!!!!
13 réponses
vérifier la valeur de la PHP_OS
constante Docs .
il vous donnera diverses valeurs sur Windows comme 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 répertoire seperator 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 mentionnée ci-dessus avec DIRECTORY_SEPARATOR est la plus rapide, cependant.
notez que PHP_OS rapporte L'OS que PHP était construit sur , qui n'est pas nécessairement le même OS qu'il utilise actuellement.
si vous êtes en PHP >= 5.3 et que vous avez juste besoin de savoir si vous utilisez Windows ou non-Windows, alors tester si l'une des constantes spécifiques à Windows est définie peut être un bon pari, 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 en 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/en/reserved.constants.php qui a la constante PHP_OS (string)
.
ou si vous voulez détecter L'OS 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 édition, vous pouvez vous référer à ce document nom du serveur PHP de la ligne de commande
vous pouvez utiliser
string php_uname ([ string $mode = "a" ] )
Donc
php_uname("s")
's': Nom du système D'exploitation. par exemple. FreeBSD.
ferait l'affaire pour vous, voir ici http://php.net/manual/en/function.php-uname.php
pour détecter si C'est 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 assez efficace pour une si petite tâche, et plus élégant.
selon constantes prédéfinies: L'Utilisateur a contribué Notes Volker's et rdcapasso solution, vous pouvez simplement créer la classe helper 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
}
vous pouvez vérifier si une constante existe en PHP >5.3.0 ( manuel )
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
// is Windows
}
auparavant, cette méthode était utilisée en Symfony. Maintenant ils utilisent une méthode différente :
if ('\' === DIRECTORY_SEPARATOR) {
// is Windows
}
si vous voulez vérifier si vous utilisez Linux, vous n'avez qu'à tester (PHP_OS === 'Linux')
. Pas besoin d'utiliser strtolower() et substr().
function isWin(){
if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') {
return true;
} else {
return false;
}
}
de http://www.php.net/manual/en/reserved.variables.server.php#102162 :
<?php
echo '<table border="1">';
foreach ($_SERVER as $k => $v){
echo "<tr><td>" . $k ."</td><td>" . $v . "</td></tr>";
}
echo "</table>"
?>
C'est la totalité du tableau $_SERVER... comme ArtWorkAD l'a noté, en utilisant la touche HTTP_USER_AGENT, vous pouvez extraire L'OS de manière plus explicite.