Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определение операционки

365
09 августа 2005 года
MasterSID
230 / / 23.02.2003
Вопрос такой: как определить операционную систему сервера? Заметил, что в разных операционках в $_ENV создаются разные переменные. Например в Windows это OS, а вот под RedHat я нашел единственную переменную с названием TERM, которая бы содержала слово linux. В принципе, в SERVER_SOFTWARE есть слово RedHat, но нет слова linux. Вопрос такой: есть ли универсальный способ определения операционки в PHP?
1.9K
09 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by MasterSID
Вопрос такой: как определить операционную систему сервера? Заметил, что в разных операционках в $_ENV создаются разные переменные. Например в Windows это OS, а вот под RedHat я нашел единственную переменную с названием TERM, которая бы содержала слово linux. В принципе, в SERVER_SOFTWARE есть слово RedHat, но нет слова linux. Вопрос такой: есть ли универсальный способ определения операционки в PHP?


не знаю точно ли это , но попробуй через массив $_SERVER , $HTTP_SERVER_VARS

1.9K
09 августа 2005 года
Ananim
156 / / 15.05.2005
а еще попробуй чтонить вроде :
 
Код:
phpinfo("system") ;

ну или какнить вытащить оттуда ...
4
09 августа 2005 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by Ananim
а еще попробуй чтонить вроде :
 
Код:
phpinfo("system") ;

ну или какнить вытащить оттуда ...



Это самый правильный способ

365
10 августа 2005 года
MasterSID
230 / / 23.02.2003
Ну system он че-то не принимает, а юзает predefined константы. Может я, конечно, отстал от мира :)

Т.е., как я понял, вы предлагаете включить буферизацию вывода, вывалить туда phpinfo, а из него уже дернуть регекспом стрку таблицы, в которой содержится инфа об операционке?

Единственный косяк только в том, что, как я понял, не написать универсального метода выдергивания версии операционки из этого поля. Или я не прав?
1.9K
10 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by MasterSID
Ну system он че-то не принимает, а юзает predefined константы. Может я, конечно, отстал от мира :)

Т.е., как я понял, вы предлагаете включить буферизацию вывода, вывалить туда phpinfo, а из него уже дернуть регекспом стрку таблицы, в которой содержится инфа об операционке?

Единственный косяк только в том, что, как я понял, не написать универсального метода выдергивания версии операционки из этого поля. Или я не прав?


вообще я сам непробовал но догадываюсь это можно какнить вытощить из этой функции ..
ведь не зря у этой функции есть необезательный параметр "what" ! т.е. :

 
Код:
phpinfo([int what]) ;
1.9K
10 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by Ananim
вообще я сам непробовал но догадываюсь это можно какнить вытощить из этой функции ..
ведь не зря у этой функции есть необезательный параметр "what" ! т.е. :
 
Код:
phpinfo([int what]) ;


а хотя нет нельзя так !

365
10 августа 2005 года
MasterSID
230 / / 23.02.2003
Так он, если верить документации, принимает только 8 значений, которые представляют собой разделы phpinfo()
1.9K
10 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by Ananim
а хотя нет нельзя так !


есть ещё один выриант создаешь фаил с содержимым :

 
Код:
<?php
phpinfo(1) ;
?>

потом от туда вытаскиваешь другим файлом крамсая код HTML того файла ....
365
10 августа 2005 года
MasterSID
230 / / 23.02.2003
Дык я ж выше это описал, только без файла. Не ужели нет других способов??
253
10 августа 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by MasterSID
Ну system он че-то не принимает, а юзает predefined константы. Может я, конечно, отстал от мира :)

Т.е., как я понял, вы предлагаете включить буферизацию вывода, вывалить туда phpinfo, а из него уже дернуть регекспом стрку таблицы, в которой содержится инфа об операционке?

Единственный косяк только в том, что, как я понял, не написать универсального метода выдергивания версии операционки из этого поля. Или я не прав?


Делаешь буфер потом RegEx типа этого:
eregi("\<td[^\>]*\>Operation system:[[:blank:]]*([[:alnum:][:blank:]]+)\</td\>", $phpinfo_text, $serveros)
и в $serveros[1] у тебя будет имя ОС
Только измени то что жирным на нормальное название поля

365
11 августа 2005 года
MasterSID
230 / / 23.02.2003
Кстати, в народе ходят слухи, что preg_match работает быстрее eregi. А вообще ты таким подходом не версию операционкт выдернешь, а кучу лишней инфы, например на кого зарегистрирован виндовоз или кто залогинен в данный момент - не знаю точно что он имеет ввиду. А Redhat еще и дату со временем туда какую-то сливает. Так что этот подход не годится.
Ты имел ввиду, что вместо Operating system я должен написать название или я тебя не понял? Я пытаюсь найти универсальный метод определения ОС и ее версии, последнее, похоже не получится. Получается, что я опять должен перечислять все операционки. Тогда уж что-то вроде этого /<td> *System *</td><td>(.*?)</td>/

\ не ставил чтобы читать удобнее было
8.8K
11 августа 2005 года
viktor_root
58 / / 10.08.2005
в виндовозе определена getenv('COMSPEC')
а в else неану и далее...:D
365
11 августа 2005 года
MasterSID
230 / / 23.02.2003
Да, кстати [[:alnum:]] вообще-то не принимает точку.
365
11 августа 2005 года
MasterSID
230 / / 23.02.2003
В виндовозе все просто и понятно:
$_ENV['OS'], но только перечислять все известные операционки в скрипте это не серъезный подход. Их на вскидку штук 10 можно припомнить и что, ставить их все и смотреть какие они переменные окружения создают?

Подход всегда должен быть универсален. Пока только один (видимо и единственный нашли). Может быть кто-то еще что-то предложит?



Вот еще наковырял константу: PHP_OS, но она не совсем то показывает, что мне нужно :(
253
11 августа 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by MasterSID
В виндовозе все просто и понятно:
$_ENV['OS'], но только перечислять все известные операционки в скрипте это не серъезный подход. Их на вскидку штук 10 можно припомнить и что, ставить их все и смотреть какие они переменные окружения создают?
Подход всегда должен быть универсален. Пока только один (видимо и единственный нашли). Может быть кто-то еще что-то предложит?
Вот еще наковырял константу: PHP_OS, но она не совсем то показывает, что мне нужно


Это похоже на разные кодировки(KOI-R, ISO, Windows и т.д) - у каждого свои
Похоже только if .... else юзать надо или RegEx как я выше показал
З.Ы: разумеется там есть ошибки так исправь их ))

365
11 августа 2005 года
MasterSID
230 / / 23.02.2003
Цитата:
Originally posted by Proger_XP
Это похоже на разные кодировки(KOI-R, ISO, Windows и т.д) - у каждого свои



Да, точно подметил :)

Цитата:

Похоже только if .... else юзать надо или RegEx как я выше показал



RegEx IMHO предпочтительнее, т.к. if/else не предполагает универсальности. А юзая RegExp можно что-то на нее больше менее похоже зделать. Только пока косяк в том, чтобы выделить версию операционки, но, похоже, тут идеального решения не сущетсвует.

253
14 августа 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by MasterSID
Да, точно подметил :)

RegEx IMHO предпочтительнее, т.к. if/else не предполагает универсальности. А юзая RegExp можно что-то на нее больше менее похоже зделать. Только пока косяк в том, чтобы выделить версию операционки, но, похоже, тут идеального решения не сущетсвует


Похоже
Можно попробовать, как было сказано выше, юзать phpinfo(), т.е буферизировать вывод юзать eregi и определять ОС
Тут главное как опредилит PHP ))
Только если PHP стоит как CGI то врят ли это сработает

338
14 августа 2005 года
chigevara
529 / / 29.09.2003
Короче, народ! Берусь нарисовать скриптец, давайте накидаем сюда какая ось какие признаки себя содержит. Особенно интересны различные мутации пингвинов и что нибудь нетрадиционное(под чем пых пыхчит). win2k и FreeBSD есть. Оформлю модулем, выкладу сюда! Есть сочуствующие?(хотя бы что ли с маздая начнем - уж он то у многих под рукой)
Обоснование - отсутствие единого стандарта, будем брать брутфорсом. Имхо вещь в хозяйстве полезная.
Кстати, а насколько адекватно себя ведет php_uname()?
299
14 августа 2005 года
3D Bob
885 / / 18.04.2005
Парни, а что этот способ тоже не работает???

$_SERVER['OS'];


А?
1.9K
14 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by 3D Bob
Парни, а что этот способ тоже не работает???

$_SERVER['OS'];


А?


У меня нет !

1.9K
14 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by 3D Bob
А Какой у Вас PHP ? У меня стоит 4.3
Вообщем правда сервер сейчас не устновлен и я увереным быть не могу. Но через командную строку у меня возвращает ОС.


У меня тоже 4.3 , а через командную страку нечего невыводит !

1.8K
15 августа 2005 года
BIKTOP
91 / / 06.04.2005
Цитата:
Originally posted by MasterSID
Вопрос такой: как определить операционную систему сервера? Заметил, что в разных операционках в $_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().

338
15 августа 2005 года
chigevara
529 / / 29.09.2003
Цитата:
Originally posted by BIKTOP
Все операционки можно поделить на 2 группы: виндовозы и юниксподобные (полуось не в счет).

Так вот, если в (любой) винде сделать системный вызов типа
$a = array ();
exec ('ver', $a);
, то $a будет содержать примерно следующее:
Microsoft Windows 2000 [Версия 5.00.2195].

Я почти уверен, что такого же типа команда есть и в никсах.

Результат работы этого кода вроде как легче обрабатывать, чем вывод phpinfo().


exec не на каждом хостинге дадут поюзать. В этом отношении php_uname() гораздо более правильный выход. Повторю вопрос - кто его мучил и под какими осями и какие наблюдались несоответствия, достаточные для того чтобы взяться за написание своей версии. Спасибо тем кто меня не проигнорирует :D

1.8K
15 августа 2005 года
BIKTOP
91 / / 06.04.2005
Цитата:
Originally posted by chigevara
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

365
15 августа 2005 года
MasterSID
230 / / 23.02.2003
Под красной шапочкой php_uname() выдаст вот это: Linux prh.lend.ru 2.4.21-4.EL #1 Fri Oct 3 18:13:58 EDT 2003 i686

Если определять просто название ос, то на Redhat константа PHP_OS выдает лучший результат. Но что на системе стоит именно RedHat показывается только в SERVER_SOFTWARE
253
15 августа 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by chigevara
Повторю вопрос - кто его мучил и под какими осями и какие наблюдались несоответствия, достаточные для того чтобы взяться за написание своей версии


В Windows как говорил MasterSID есть ComSpec
Опредилить разницу межнду Виндой и Линухом можно по getenv("PATH") если она там есть(в Винде разделитель пути "\" в Линухе "/")
Может еще что-нибудь накопаю

365
15 августа 2005 года
MasterSID
230 / / 23.02.2003
Цитата:
Originally posted by Proger_XP
В Windows как говорил MasterSID есть ComSpec


это не я говорил

338
15 августа 2005 года
chigevara
529 / / 29.09.2003
Цитата:
Originally posted by Proger_XP
(в Винде разделитель пути "\" в Линухе "/")


Эээ...

<?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']
У кого какие предложения/дополнения. Дабы потом не возвращаться.

253
18 августа 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by chigevara
Эээ...

<?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 ))

15
19 августа 2005 года
shaelf
2.7K / / 04.05.2005
Просьба не пинать сильно ногами, но не проще воспользоваться JavaScript? Берёшь ОС в хайден и передаёшь серваку? Может и бред несу, просто спать хоца...
PS php_uname() - на винде работает корректно. Только что проверил.:)
365
19 августа 2005 года
MasterSID
230 / / 23.02.2003
:) а жабаскрипт как определит какая операционка на сервере стоит? она только клиента выдаст
15
19 августа 2005 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by MasterSID
:) а жабаскрипт как определит какая операционка на сервере стоит? она только клиента выдаст


Я же говорю, что спать хотел:)
По моемому все винды откликаються на php_uname(), если есть причина недоверять этой функции в никсах, то можно попробывать её аналогом system(uname -a).

338
19 августа 2005 года
chigevara
529 / / 29.09.2003
Цитата:
Originally posted by shaelf
Я же говорю, что спать хотел:)
По моемому все винды откликаються на php_uname(), если есть причина недоверять этой функции в никсах, то можно попробывать её аналогом system(uname -a).


Не все хостингеры дадут...

Цитата:
Originally posted by Proger_XP
Может я один мало чего понял из второй части но все-равно обясни pls ))


В смысле возвращается массив в котором инфа как по оси так и по серваку(пых же не только под апачем пыхчит, мы же помним)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог