PHP-скрипт – определить, работает ли Linux или Windows?

У меня есть PHP-скрипт, который может быть помещен в систему Windows или Linux-систему. Мне нужно запускать разные команды в любом случае.

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


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

Проверьте значение постоянных документов PHP_OS .

Это даст вам различные значения в 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!'; } 

Вы можете проверить, является ли каталог seperator / (для unix / linux / mac) или \ на окнах. Постоянное имя 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 , что не обязательно является той же ОС, что и в настоящий момент.

Если вы находитесь на 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

Согласно предопределенным константам: User Contributed Notes 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 } 

Чтобы определить, является ли это 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 , но он достаточно эффективен для такой небольшой задачи и более изящный.

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

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

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

 if ('\\' === DIRECTORY_SEPARATOR) { // is Windows } 
 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 вы можете явно извлечь ОС.