tiempo script inicia ejecutar ejecuta desde consola cierto cada php windows linux operating-system detect

inicia - Script PHP: ¿detecta si se ejecuta bajo Linux o Windows?



no se ejecuta php en apache (12)

Tengo un script PHP que puede colocarse en un sistema de Windows o en un sistema Linux. Necesito ejecutar comandos diferentes en cualquier caso.

¿Cómo puedo detectar en qué entorno estoy? (preferiblemente algo php en lugar de hacks del sistema inteligente)

¡¡lo siento lo siento!! la secuencia de comandos se ejecuta desde la línea de comandos !!!!


De acuerdo con las constantes predefinidas: Notas aportadas por el usuario Volker''s y la solución rcacaso, usted puede simplemente crear clases auxiliares como esta:

<?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; } } }

Uso:

if(System::getOS() == System::OS_WIN) { // do something only on Windows platform }


Desde 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>" ?>

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.


Esto debería funcionar en PHP 4.3+:

if (strtolower(PHP_SHLIB_SUFFIX) === ''dll'') { // Windows } else { // Linux/UNIX/OS X }


La función php_uname se puede usar para detectar esto.

echo php_uname();


Para detectar si es Windows, OS X o 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 es un poco más lento que substr en este caso particular, pero es lo suficientemente eficiente para una tarea tan pequeña y más elegante.


Puede verificar si el separador de directorio es / (para unix / linux / mac) o / en Windows. El nombre constante es DIRECTORY_SEPARATOR

if (DIRECTORY_SEPARATOR == ''/'') { // unix, linux, mac } if (DIRECTORY_SEPARATOR == ''//') { // windows }


Puede verificar si existe una constante en PHP> 5.3.0 ( manual )

if (defined(''PHP_WINDOWS_VERSION_BUILD'')) { // is Windows }

Anteriormente, este método se utilizó en Symfony. Ahora usan un método diferente :

if (''//' === DIRECTORY_SEPARATOR) { // is Windows }



Constantes básicas predefinidas: http://us3.php.net/manual/en/reserved.constants.php que tiene la PHP_OS (string) .

O si desea detectar el sistema operativo del cliente:

<?php echo $_SERVER[''HTTP_USER_AGENT''] . "/n/n"; $browser = get_browser(null, true); print_r($browser); ?>

Desde http://us3.php.net/manual/en/function.get-browser.php

Según su edición, puede hacer referencia a este nombre de servidor PHP duplicado desde la línea de comandos

Puedes usar

string php_uname ([ string $mode = "a" ] )

Asi que

php_uname("s")

''s'': nombre del sistema operativo. p.ej. FreeBSD.

Haría el truco para ti, mira aquí http://php.net/manual/en/function.php-uname.php


Compruebe el valor de los Docs constantes de PHP_OS .

Le dará varios valores en Windows como WIN32 , WINNT o Windows .

Ver también: Posibles valores para: PHP_OS y php_unameDocs :

if (strtoupper(substr(PHP_OS, 0, 3)) === ''WIN'') { echo ''This is a server using Windows!''; } else { echo ''This is a server not using Windows!''; }


function isWin(){ if (strtolower(substr(PHP_OS, 0, 3)) === ''win'' || PHP_SHLIB_SUFFIX == ''dll'' || PATH_SEPARATOR == '';'') { return true; } else { return false; } }


if (strncasecmp(PHP_OS, ''WIN'', 3) == 0) { echo ''This is a server using Windows!''; } else { echo ''This is a server not using Windows!''; }

parece un poco más elegante que la respuesta aceptada. La detección antes mencionada con DIRECTORY_SEPARATOR es la más rápida, sin embargo.