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
}
Tenga en cuenta que PHP_OS informa el sistema operativo en el que se creó PHP , que no es necesariamente el mismo sistema operativo en el que se está ejecutando actualmente.
Si está en PHP> = 5.3 y solo necesita saber si se está ejecutando en Windows o en Windows, entonces probar si se define una de las constantes específicas de Windows puede ser una buena opción, por ejemplo:
$windows = defined(''PHP_WINDOWS_VERSION_MAJOR'');
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.