Niedawno zacząłem się zastanawiać nad witrynami takimi jak http://thismachine.info/, które pobierają informacje o systemie operacyjnym użytkownika. Nie byłem w stanie dowiedzieć się, jak to zrobić w PHP, i chciałem spróbować to rozgryźć.
Zauważyłem, że wymieniają one user-agent
, co daje wiele informacji o przeglądarce. Czy pobierają z tego informacje o systemie operacyjnym, czy z czegoś innego? Czy istnieje interfejs API, którego mógłbym użyć, aby uzyskać system operacyjny użytkownika?
Widzę, skąd wzięli przeglądarkę i adres IP, ale nie mogli znaleźć części dotyczącej systemu operacyjnego!
php
operating-system
user-agent
pattyd
źródło
źródło
echo $_SERVER['HTTP_USER_AGENT'];
pokaże (do pewnego stopnia) system operacyjny użytkownika. Dla mnie wykryłMozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0
, gdzie w rzeczywistości używam Windows XP, więc nie jest to nauka ścisła.http://thismachine.info/
wie, że używam systemu Windows XP? Tego nie wiem, ale muszą używać skryptu, który znajdzie i zastąpi, a następnie powtórzy. O ile mi wiadomo, nic nie określa dokładnego systemu operacyjnego, ponieważ widzę, że należałoby to do domeny papierów wartościowych.Windows XP
od tablicy/windows nt 5.1/i' => 'Windows XP',
Odpowiedzi:
Poniższy kod mógłby sam w sobie wyjaśnić, w jaki sposób http://thismachine.info/ jest w stanie pokazać, którego systemu operacyjnego ktoś używa.
To, co robi, polega na tym, że węszy twój podstawowy model systemu operacyjnego, na przykład
windows nt 5.1
jako mój własny.Następnie przekazuje Windows NT 5.1 / i do Windows XP jako system operacyjny.
Używanie:
'/windows nt 5.1/i' => 'Windows XP',
z tablicy.Można powiedzieć zgadywanie lub przybliżenie, ale mimo wszystko jest to strzał w dziesiątkę.
Zapożyczono z odpowiedzi na SO https://stackoverflow.com/a/15497878/
Przypisy: (19/14 stycznia) 18 stycznia 2014 r. Pojawiła się sugerowana zmiana do dodania
/msie|trident/i
przez YJSoft nowego członka na SO.Komentarz brzmiał następująco:
Komentarz: ponieważ ua msie11 nie zawiera msie (zamiast tego zawiera trójząb)
Zbadałem to trochę i znalazłem kilka linków wyjaśniających ciąg Trident.
Chociaż zmiana została odrzucona (nie przeze mnie, ale przez niektórych innych redaktorów), warto przeczytać powyższe linki i zastosować właściwą ocenę.
Zgodnie z pytaniem dotyczącym wykrywania SUSE, znalazłem ten fragment kodu pod następującym adresem URL:
Dodatkowy kod:
Edycja: 12 kwietnia 2015 r
Wczoraj zauważyłem pytanie, które może być istotne dla tego pytania i odpowiedzi i może być pomocne dla niektórych. W odniesieniu do:
Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-GT-I9505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36
Kolejna edycja i dodanie odnośnika referencyjnego, o który poproszono (i udzielono odpowiedzi / zaakceptowano dzisiaj, 16 listopada), który może być przydatny.
Zapoznaj się z pytaniami i odpowiedziami w stosie:
źródło
'/windows nt 6.3/i'
jest dla Windows 8.1"mavericks HTTP_USER_AGENT"
@ben_aaron'/cros/i' => 'Chrome OS'
Kiedy wchodzisz na stronę internetową, twoja przeglądarka wysyła zapytanie do serwera WWW, zawierające wiele informacji. Ta informacja może wyglądać mniej więcej tak:
Wszystkie te informacje są wykorzystywane przez serwer WWW do określenia sposobu obsługi żądania; preferowany język i czy kompresja jest dozwolona.
W PHP wszystkie te informacje są przechowywane w
$_SERVER
tablicy. Aby zobaczyć, co wysyłasz na serwer WWW, utwórz nowy plik PHP i wydrukuj wszystko z tablicy.To da ci ładną reprezentację wszystkiego, co jest wysyłane na serwer, skąd możesz wyodrębnić żądane informacje, np.
$_SERVER['HTTP_USER_AGENT']
Aby uzyskać system operacyjny i przeglądarkę.źródło
Pobrałem następujący kod z podręcznika php dla get_browser .
$browser
Tablica maplatform
informacji o cenie co daje specyficzny system operacyjny w użyciu.Sprawdź, czy na tej stronie znajduje się sekcja „Uwagi”. To może być coś, czego (thismachine.info) używa, jeśli nie coś, co zostało już wskazane w innych odpowiedziach.
źródło
W oparciu o odpowiedź przez Fred-II Chciałem podzielić się moją zabiorą funkcji GETOS, unika globalnych, łączy obie listy i wykrywa architekturę (x32 / x64)
źródło
Jeśli chcesz uzyskać wszystkie te informacje, możesz przeczytać to:
http://php.net/manual/en/function.get-browser.php
Możesz uruchomić przykładowy kod, a zobaczysz, jak to działa:
Powyższy przykład wyświetli coś podobnego do:
źródło
Jeśli chcesz na przykład bardzo mało informacji, takich jak klasa w swoim html dla popularnych przeglądarek, możesz użyć:
co zwróci „safari”, „firefox” lub „chrome”, lub „ie ie8”, „ie ie9”, „ie ie10”, „ie ie11”.
źródło
Możesz szukać tych informacji w
$_SERVER['HTTP_USER_AGENT']
, ale ich format jest dowolny, nie gwarantuje się wysłania i może być łatwo zmieniony przez użytkownika, czy to ze względów prywatności, czy z innych powodów.Jeśli nie ustawiłeś
browsecap
dyrektywy, zwróci to ostrzeżenie. Aby upewnić się, że jest ustawiona, możesz pobrać wartość za pomocąini_get
i sprawdzić, czy jest ustawiona.Jak wyjaśnił kba w swojej odpowiedzi, twoja przeglądarka wysyła wiele informacji do serwera podczas ładowania strony internetowej. Większość witryn używa ich User-agent informacji do ustalenia odwiedzającego system operacyjny, przeglądarka i różne informacje.
źródło