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 me trouve? (de préférence quelque chose de PHP plutôt que des hacks système intelligents)
Mettre à jour
Pour clarifier, le script s'exécute à partir de la ligne de commande.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
et\stripos(\PHP_OS, 'WIN')
sont inférieurs à 15%. Étant donné que les trois solutions ne prennent qu'environ 100 nanosecondes, ce serait de toute façon une micro-optimisation. Alors choisissez la solution que vous aimez. Enfin, vous pouvez dire que\strncasecmp(\PHP_OS, 'WIN', 3) === 0
c'est le plus lisible.Réponses:
Vérifiez la valeur de la
PHP_OS
constante Docs .Il vous donnera différentes valeurs sur Windows comme
WIN32
,WINNT
ouWindows
.Voir aussi: Valeurs possibles pour: PHP_OS et
php_uname
Docs :la source
stripos(PHP_OS, 'WIN') === 0
peut être utilisé à la place, sans doute plus lisible / simple.Vous pouvez vérifier si le séparateur de répertoire est
/
(pour unix / linux / mac) ou\
sous windows. Le nom de la constante estDIRECTORY_SEPARATOR
.la source
strpos(__FILE__,92)
exploite le même comportement;PATH_SEPARATOR>":"
renvoie true pour Windows également (PATH_SEPARATOR est ":" sur tous les autres systèmes d'exploitation).function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
semble un peu plus élégant que la réponse acceptée. La détection mentionnée ci-dessus avec DIRECTORY_SEPARATOR est cependant la plus rapide.
la source
strncasecmp
prend les n premiers caractères, pas n'importe quels n caractères. Si vous l'aviez essayé, vous auriez découvert que celastrncasecmp('DARWIN', 'WIN', 3) == 0
équivaut àfalse
.Notez que PHP_OS rapporte le système d' exploitation que PHP a été construit sur , ce qui est pas nécessairement le même système d' exploitation qu'il est en cours d' exécution sur.
Si vous êtes sur 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:
la source
La fonction php_uname peut être utilisée pour détecter cela.
la source
Selon les constantes prédéfinies: les solutions Volker et rdcapasso de Notes contribuées par l'utilisateur , vous pouvez simplement créer une classe d'assistance comme ceci:
Usage:
la source
Cela devrait fonctionner en PHP 4.3+:
la source
À partir de PHP 7.2.0, vous pouvez détecter le système d'exploitation en cours d'exécution en utilisant la constante
PHP_OS_FAMILY
:Consultez la documentation PHP officielle pour ses valeurs possibles.
la source
Constantes prédéfinies de base: http://us3.php.net/manual/en/reserved.constants.php qui a la
PHP_OS (string)
constante.Ou si vous souhaitez détecter l'OS du client:
Depuis http://us3.php.net/manual/en/function.get-browser.php
Selon votre modification, vous pouvez vous référer à ce nom de serveur PHP double à partir de la ligne de commande
Vous pouvez utiliser
Alors
Cela ferait l'affaire pour vous, voir ici http://php.net/manual/en/function.php-uname.php
la source
Pour détecter s'il s'agit de Windows, OS X ou Linux:
stripos
est un peu plus lent quesubstr
dans ce cas particulier, mais il est assez efficace pour une si petite tâche, et plus élégant.la source
Vous pouvez vérifier si une constante existe en PHP> 5.3.0 ( manuel )
Auparavant, cette méthode était utilisée dans Symfony. Maintenant, ils utilisent une méthode différente :
la source
Si vous voulez vérifier si vous utilisez Linux, testez simplement si
(PHP_OS === 'Linux')
. Pas besoin d'utiliser strtolower () et substr ().la source
la source
De http://www.php.net/manual/en/reserved.variables.server.php#102162 :
C'est tout le tableau $ _SERVER ... comme ArtWorkAD l'a noté, en utilisant la clé HTTP_USER_AGENT, vous pouvez extraire le système d'exploitation plus explicitement.
la source