Определение операционки
Вопрос такой: как определить операционную систему сервера? Заметил, что в разных операционках в $_ENV создаются разные переменные. Например в Windows это OS, а вот под RedHat я нашел единственную переменную с названием TERM, которая бы содержала слово linux. В принципе, в SERVER_SOFTWARE есть слово RedHat, но нет слова linux. Вопрос такой: есть ли универсальный способ определения операционки в PHP?
не знаю точно ли это , но попробуй через массив $_SERVER , $HTTP_SERVER_VARS
ну или какнить вытащить оттуда ...
а еще попробуй чтонить вроде :
ну или какнить вытащить оттуда ...
Это самый правильный способ
Т.е., как я понял, вы предлагаете включить буферизацию вывода, вывалить туда phpinfo, а из него уже дернуть регекспом стрку таблицы, в которой содержится инфа об операционке?
Единственный косяк только в том, что, как я понял, не написать универсального метода выдергивания версии операционки из этого поля. Или я не прав?
Ну system он че-то не принимает, а юзает predefined константы. Может я, конечно, отстал от мира :)
Т.е., как я понял, вы предлагаете включить буферизацию вывода, вывалить туда phpinfo, а из него уже дернуть регекспом стрку таблицы, в которой содержится инфа об операционке?
Единственный косяк только в том, что, как я понял, не написать универсального метода выдергивания версии операционки из этого поля. Или я не прав?
вообще я сам непробовал но догадываюсь это можно какнить вытощить из этой функции ..
ведь не зря у этой функции есть необезательный параметр "what" ! т.е. :
вообще я сам непробовал но догадываюсь это можно какнить вытощить из этой функции ..
ведь не зря у этой функции есть необезательный параметр "what" ! т.е. :
а хотя нет нельзя так !
а хотя нет нельзя так !
есть ещё один выриант создаешь фаил с содержимым :
phpinfo(1) ;
?>
потом от туда вытаскиваешь другим файлом крамсая код HTML того файла ....
Ну system он че-то не принимает, а юзает predefined константы. Может я, конечно, отстал от мира :)
Т.е., как я понял, вы предлагаете включить буферизацию вывода, вывалить туда phpinfo, а из него уже дернуть регекспом стрку таблицы, в которой содержится инфа об операционке?
Единственный косяк только в том, что, как я понял, не написать универсального метода выдергивания версии операционки из этого поля. Или я не прав?
Делаешь буфер потом RegEx типа этого:
eregi("\<td[^\>]*\>Operation system:[[:blank:]]*([[:alnum:][:blank:]]+)\</td\>", $phpinfo_text, $serveros)
и в $serveros[1] у тебя будет имя ОС
Только измени то что жирным на нормальное название поля
Ты имел ввиду, что вместо Operating system я должен написать название или я тебя не понял? Я пытаюсь найти универсальный метод определения ОС и ее версии, последнее, похоже не получится. Получается, что я опять должен перечислять все операционки. Тогда уж что-то вроде этого /<td> *System *</td><td>(.*?)</td>/
\ не ставил чтобы читать удобнее было
а в else неану и далее...:D
$_ENV['OS'], но только перечислять все известные операционки в скрипте это не серъезный подход. Их на вскидку штук 10 можно припомнить и что, ставить их все и смотреть какие они переменные окружения создают?
Подход всегда должен быть универсален. Пока только один (видимо и единственный нашли). Может быть кто-то еще что-то предложит?
Вот еще наковырял константу: PHP_OS, но она не совсем то показывает, что мне нужно :(
В виндовозе все просто и понятно:
$_ENV['OS'], но только перечислять все известные операционки в скрипте это не серъезный подход. Их на вскидку штук 10 можно припомнить и что, ставить их все и смотреть какие они переменные окружения создают?
Подход всегда должен быть универсален. Пока только один (видимо и единственный нашли). Может быть кто-то еще что-то предложит?
Вот еще наковырял константу: PHP_OS, но она не совсем то показывает, что мне нужно
Это похоже на разные кодировки(KOI-R, ISO, Windows и т.д) - у каждого свои
Похоже только if .... else юзать надо или RegEx как я выше показал
З.Ы: разумеется там есть ошибки так исправь их ))
Это похоже на разные кодировки(KOI-R, ISO, Windows и т.д) - у каждого свои
Да, точно подметил :)
Похоже только if .... else юзать надо или RegEx как я выше показал
RegEx IMHO предпочтительнее, т.к. if/else не предполагает универсальности. А юзая RegExp можно что-то на нее больше менее похоже зделать. Только пока косяк в том, чтобы выделить версию операционки, но, похоже, тут идеального решения не сущетсвует.
Да, точно подметил :)
RegEx IMHO предпочтительнее, т.к. if/else не предполагает универсальности. А юзая RegExp можно что-то на нее больше менее похоже зделать. Только пока косяк в том, чтобы выделить версию операционки, но, похоже, тут идеального решения не сущетсвует
Похоже
Можно попробовать, как было сказано выше, юзать phpinfo(), т.е буферизировать вывод юзать eregi и определять ОС
Тут главное как опредилит PHP ))
Только если PHP стоит как CGI то врят ли это сработает
Обоснование - отсутствие единого стандарта, будем брать брутфорсом. Имхо вещь в хозяйстве полезная.
Кстати, а насколько адекватно себя ведет php_uname()?
$_SERVER['OS'];
А?
Парни, а что этот способ тоже не работает???
$_SERVER['OS'];
А?
У меня нет !
А Какой у Вас PHP ? У меня стоит 4.3
Вообщем правда сервер сейчас не устновлен и я увереным быть не могу. Но через командную строку у меня возвращает ОС.
У меня тоже 4.3 , а через командную страку нечего невыводит !
Вопрос такой: как определить операционную систему сервера? Заметил, что в разных операционках в $_ENV создаются разные переменные. Например в Windows это OS, а вот под RedHat я нашел единственную переменную с названием TERM, которая бы содержала слово linux. В принципе, в SERVER_SOFTWARE есть слово RedHat, но нет слова linux. Вопрос такой: есть ли универсальный способ определения операционки в PHP?
Все операционки можно поделить на 2 группы: виндовозы и юниксподобные (полуось не в счет).
Так вот, если в (любой) винде сделать системный вызов типа
$a = array ();
exec ('ver', $a);
, то $a будет содержать примерно следующее:
Microsoft Windows 2000 [Версия 5.00.2195].
Я почти уверен, что такого же типа команда есть и в никсах.
Результат работы этого кода вроде как легче обрабатывать, чем вывод phpinfo().
Все операционки можно поделить на 2 группы: виндовозы и юниксподобные (полуось не в счет).
Так вот, если в (любой) винде сделать системный вызов типа
$a = array ();
exec ('ver', $a);
, то $a будет содержать примерно следующее:
Microsoft Windows 2000 [Версия 5.00.2195].
Я почти уверен, что такого же типа команда есть и в никсах.
Результат работы этого кода вроде как легче обрабатывать, чем вывод phpinfo().
exec не на каждом хостинге дадут поюзать. В этом отношении php_uname() гораздо более правильный выход. Повторю вопрос - кто его мучил и под какими осями и какие наблюдались несоответствия, достаточные для того чтобы взяться за написание своей версии. Спасибо тем кто меня не проигнорирует :D
exec не на каждом хостинге дадут поюзать
А system() и passthru() ? Впрчем их может постигнуть такая же судьба, как и exec()...
В крайнем случае, можно поинтересоваться у хостера, разрешает ли он использовать эти вызовы.
Не знаю насчет несоответствий... Я кроме винды ничего не юзаю (пока ничего), а безплатном хостинге hut.ru эта ф-я (php_uname()) выводит такое:
FreeBSD in-hut1.agava.net 4.10-RELEASE-p5 FreeBSD 4.10-RELEASE-p5 #0: Mon i386
Если определять просто название ос, то на Redhat константа PHP_OS выдает лучший результат. Но что на системе стоит именно RedHat показывается только в SERVER_SOFTWARE
Повторю вопрос - кто его мучил и под какими осями и какие наблюдались несоответствия, достаточные для того чтобы взяться за написание своей версии
В Windows как говорил MasterSID есть ComSpec
Опредилить разницу межнду Виндой и Линухом можно по getenv("PATH") если она там есть(в Винде разделитель пути "\" в Линухе "/")
Может еще что-нибудь накопаю
В Windows как говорил MasterSID есть ComSpec
это не я говорил
(в Винде разделитель пути "\" в Линухе "/")
Эээ...
<?php
// *nix
echo DIRECTORY_SEPARATOR; // /
echo PHP_SHLIB_SUFFIX; // so
echo PATH_SEPARATOR; // :
// Win*
echo DIRECTORY_SEPARATOR; // \
echo PHP_SHLIB_SUFFIX; // dll
echo PATH_SEPARATOR; // ;
?>
Это по поводу...
Итого - есть семейства осей - win, nix, etc.
есть виды осей - 2k, 98, xp, FreeBSD, QNX, menuet
никсы правильнее было бы разделить на BSD ядра, sys5 и пингвины.
Далее версия оси(или билд?)
статус(бета, стэйбл, релиз кандидат)
И наверное интересен собственно веб-сервачок под которым пых-чит. То есть сервер/версия
Думаю этого достаточно? То есть возвращается массив
['family']
['name']
['ver']
['status']
['web']
У кого какие предложения/дополнения. Дабы потом не возвращаться.
Эээ...
<?php
// *nix
echo DIRECTORY_SEPARATOR; // /
echo PHP_SHLIB_SUFFIX; // so
echo PATH_SEPARATOR; // :
// Win*
echo DIRECTORY_SEPARATOR; // \
echo PHP_SHLIB_SUFFIX; // dll
echo PATH_SEPARATOR; // ;
?>
Это по поводу...
Итого - есть семейства осей - win, nix, etc.
есть виды осей - 2k, 98, xp, FreeBSD, QNX, menuet
никсы правильнее было бы разделить на BSD ядра, sys5 и пингвины.
Далее версия оси(или билд?)
статус(бета, стэйбл, релиз кандидат)
И наверное интересен собственно веб-сервачок под которым пых-чит. То есть сервер/версия
Думаю этого достаточно? То есть возвращается массив
['family']
['name']
['ver']
['status']
['web']
У кого какие предложения/дополнения. Дабы потом не возвращаться
Может я один мало чего понял из второй части но все-равно обясни pls ))
PS php_uname() - на винде работает корректно. Только что проверил.:)
:) а жабаскрипт как определит какая операционка на сервере стоит? она только клиента выдаст
Я же говорю, что спать хотел:)
По моемому все винды откликаються на php_uname(), если есть причина недоверять этой функции в никсах, то можно попробывать её аналогом system(uname -a).
Я же говорю, что спать хотел:)
По моемому все винды откликаються на php_uname(), если есть причина недоверять этой функции в никсах, то можно попробывать её аналогом system(uname -a).
Не все хостингеры дадут...
Может я один мало чего понял из второй части но все-равно обясни pls ))
В смысле возвращается массив в котором инфа как по оси так и по серваку(пых же не только под апачем пыхчит, мы же помним)