PHP script-определить, работает ли под linux или Windows?

У меня есть php-скрипт, который может быть размещен в системе windows или linux. В любом случае мне нужно выполнить разные команды.

Как я могу определить, в какой среде я нахожусь? (желательно что-то php, а не умные системные хаки)


извините!! скрипт запускается из командной строки!!!!

13 ответов


проверьте значение PHP_OS постоянныйDocs.

это даст вам различные значения в Windows, как WIN32, WINNT или Windows.

Смотрите также: возможные значения для: PHP_OS и 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!';
}

вы можете проверить, является ли разделитель каталогов / (для unix/linux/mac) или \ на windows. Постоянное имя 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!';
}

кажется немного более элегантным, чем принятый ответ. Однако вышеупомянутое обнаружение с DIRECTORY_SEPARATOR является самым быстрым.


отметим, что PHP_OS сообщает ОС, что PHP был построен on, который не обязательно является той же ОС, что и в настоящее время работает на.

Если вы находитесь на PHP >= 5.3 и просто нужно знать, работаете ли вы на Windows или нет-Windows, то тестирование ли один из специфические для Windows константы определяется может быть хорошей ставкой, например:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');

на php_uname функция может использоваться для обнаружения этого.

echo php_uname();

Это должно работать в PHP 4.3+:

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

Основные Предопределенные Константы: http://us3.php.net/manual/en/reserved.constants.php который имеет PHP_OS (string) константы.

или если вы хотите обнаружить ОС клиента:

<?php
    echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

    $browser = get_browser(null, true);
    print_r($browser);
?>

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


согласно вашему редактированию вы можете обратиться к этому дубликату имя сервера PHP из командной строки

вы можете использовать

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

так

php_uname("s")

's': имя операционной системы. например. операционная система FreeBSD.

сделал бы трюк для вас, смотрите здесь http://php.net/manual/en/function.php-uname.php


чтобы определить, является ли это Windows, OS X или 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 немного медленнее, чем substr в этом конкретном случае, но он достаточно эффективен для такой небольшой задачи и более элегантен.


по данным Предопределенные Константы: Пользовательские Заметки Volker и rdcapasso решение, вы можете просто создать вспомогательный класс, как это:

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

}

использование:

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

вы можете проверить, существует ли константа в PHP >5.3.0 (руководство)

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

ранее этот метод использовался в Symfony. Теперь они используют другой метод:

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

Если вы хотите проверить, работает ли под Linux, просто проверьте, если (PHP_OS === 'Linux'). Нет необходимости использовать strtolower() и substr().


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

от 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>"
?>

Это весь массив _SERVER для$... как отметил ArtWorkAD, используя ключ HTTP_USER_AGENT, вы можете извлечь ОС более явно.