PHP скрипт - определить, работает ли Linux или Windows?
У меня есть сценарий PHP, который может быть размещен в системе Windows или Linux. Мне нужно выполнить разные команды в любом случае.
Как я могу определить, в какой среде я нахожусь? (желательно что-то PHP, а не умные системные хаки)
Обновить
Чтобы уточнить, скрипт запускается из командной строки.
Ответы
Ответ 1
Проверьте значение константы PHP_OS
Docs.
Это даст вам различные значения в Windows, такие как WIN32
, WINNT
или Windows
.
Смотрите также: Возможные значения для: PHP_OS и php_uname
Документы:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
Ответ 2
Вы можете проверить, является ли разделитель каталогов /
(для unix/linux/mac) или \
on windows. Имя константы DIRECTORY_SEPARATOR
if (DIRECTORY_SEPARATOR == '/') {
// unix, linux, mac
}
if (DIRECTORY_SEPARATOR == '\\') {
// windows
}
Ответ 3
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 является самым быстрым.
Ответ 4
Обратите внимание, что PHP_OS сообщает ОС, что PHP построен на, что не обязательно является той же ОС, что и в данный момент.
Если вы находитесь на PHP >= 5.3, и вам просто нужно знать, работаете ли вы в Windows или нет - Windows, а затем проверяете, является ли одна из зависящих от Windows констант может быть хорошей ставкой, например:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
Ответ 5
Чтобы обнаружить это, можно использовать функцию php_uname.
echo php_uname();
Ответ 6
Это должно работать в PHP 4.3 +:
if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
// Windows
}
else
{
// Linux/UNIX/OS X
}
Ответ 7
В соответствии с предопределенными константами: пользовательскими комментариями 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
}
Ответ 8
Основные предопределенные константы: 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
В соответствии с вашим редактированием вы можете обратиться к этому dublicate имени сервера PHP из командной строки
Вы можете использовать
string php_uname ([ string $mode = "a" ] )
Итак,
php_uname("s")
's': название операционной системы. например. FreeBSD.
Сделал бы трюк для вас, см. здесь http://php.net/manual/en/function.php-uname.php
Ответ 9
Чтобы определить, будут ли они 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
, но он достаточно эффективен для такой маленькой задачи и более изящный.
Ответ 10
Вы можете проверить, существует ли константа в PHP> 5.3.0 (вручную)
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
// is Windows
}
Ранее этот метод использовался в Symfony. Теперь они используют другой метод:
if ('\\' === DIRECTORY_SEPARATOR) {
// is Windows
}
Ответ 11
Если вы хотите проверить, работает ли под Linux, просто проверьте, если (PHP_OS === 'Linux')
. Нет необходимости использовать strtolower() и substr().
Ответ 12
Начиная с PHP 7.2.0 вы можете обнаружить работающий O.S. используя константу PHP_OS_FAMILY
:
if (PHP_OS_FAMILY === "Windows") {
echo "Running on Windows";
} elseif (PHP_OS_FAMILY === "Linux") {
echo "Running on Linux";
}
Смотрите официальную документацию PHP о возможных значениях.
Ответ 13
function isWin(){
if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') {
return true;
} else {
return false;
}
}
Ответ 14
Из 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 вы можете более явно извлечь ОС.