Tengo un script PHP que se puede colocar en un sistema Windows o Linux. Necesito ejecutar diferentes comandos en cualquier caso.
¿Cómo puedo detectar en qué entorno estoy? (preferiblemente algo PHP en lugar de hacks inteligentes del sistema)
Actualizar
Para aclarar, el script se ejecuta desde la línea de comandos.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
y\stripos(\PHP_OS, 'WIN')
están por debajo del 15%. Dado que las tres soluciones solo toman aproximadamente 100 nanosegundos, de todos modos esto sería una microoptimización. Así que elige la solución que quieras. Finalmente, puede argumentar que\strncasecmp(\PHP_OS, 'WIN', 3) === 0
es lo más legible.Respuestas:
Comprueba el valor de los documentos
PHP_OS
constantes .Le dará varios valores en Windows como
WIN32
,WINNT
oWindows
.Ver también: Valores posibles para: PHP_OS y
php_uname
Docs :fuente
stripos(PHP_OS, 'WIN') === 0
se puede usar en su lugar, posiblemente más legible / simple.Puede verificar si el separador de directorio es
/
(para unix / linux / mac) o\
en Windows. El nombre es constanteDIRECTORY_SEPARATOR
.fuente
strpos(__FILE__,92)
explota el mismo comportamiento;PATH_SEPARATOR>":"
devuelve verdadero también para Windows (PATH_SEPARATOR es ":" en todos los demás sistemas operativos).function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
Parece un poco más elegante que la respuesta aceptada. Sin embargo, la detección antes mencionada con DIRECTORY_SEPARATOR es la más rápida.
fuente
strncasecmp
toma los primeros n caracteres, no solo n caracteres. Si lo intentara, habría descubierto que sestrncasecmp('DARWIN', 'WIN', 3) == 0
evalúafalse
.Tenga en cuenta que PHP_OS informa el sistema operativo que PHP fue construido sobre , que no es necesariamente el mismo sistema operativo que se está ejecutando actualmente.
Si está en PHP> = 5.3 y solo necesita saber si está ejecutando en Windows o no Windows, entonces probar si una de las constantes específicas de Windows está definida puede ser una buena apuesta, por ejemplo:
fuente
La función php_uname se puede usar para detectar esto.
fuente
De acuerdo con las constantes predefinidas: las soluciones de Volker y rdcapasso de Contributed Notes contribuidas por el usuario , simplemente puede crear una clase auxiliar como esta:
Uso:
fuente
Esto debería funcionar en PHP 4.3+:
fuente
A partir de PHP 7.2.0, puede detectar el sistema operativo en ejecución utilizando la constante
PHP_OS_FAMILY
:Consulte la documentación oficial de PHP para conocer sus posibles valores.
fuente
Constantes predefinidas principales: http://us3.php.net/manual/en/reserved.constants.php que tiene la
PHP_OS (string)
constante.O si desea detectar el sistema operativo del cliente:
De http://us3.php.net/manual/en/function.get-browser.php
De acuerdo con su edición, puede consultar este nombre duplicado del servidor PHP desde la línea de comandos
Puedes usar
Entonces
Haría el truco por ti, mira aquí http://php.net/manual/en/function.php-uname.php
fuente
Para detectar si es Windows, OS X o Linux:
stripos
es un poco más lento quesubstr
en este caso en particular, pero es lo suficientemente eficiente para una tarea tan pequeña y más elegante.fuente
Puede verificar si existe una constante en PHP> 5.3.0 ( manual )
Anteriormente, este método se usaba en Symfony. Ahora usan un método diferente :
fuente
Si desea verificar si se ejecuta bajo Linux, solo pruebe si
(PHP_OS === 'Linux')
. No es necesario usar strtolower () y substr ().fuente
fuente
De http://www.php.net/manual/en/reserved.variables.server.php#102162 :
Esta es toda la matriz $ _SERVER ... como ha notado ArtWorkAD, al usar la clave HTTP_USER_AGENT, puede extraer el sistema operativo más explícitamente.
fuente