PHP скрипт-определить, работает ли под 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_SEPARATORif (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, вы можете извлечь ОС более явно.
Comments