Определение версии браузера — PHP или javascript?

Хорошо если ваш сайт работает во всех, или почти во всех браузерах так, как вы того хотите. Все меняется, выходят новые версии, появляются новые возможности, и глупо их не использовать, в угоду «старичкам». Года 1,5 назад IE 6.0 (судя по статистике посещений одного из моих сайтов) был на каждом третьем компьютере, использующем IE. Приходилось с ним считаться, т.к. IE доминировал на компьютерах — более 40% посетителей пользовались IE. Я связываю такое распространение IE 6.0 (не смотря на то, что уже вышла 8я версия), в первую очередь, с широким распространением старых пиратских версий Windows XP в России, которые не подключаются к серверу обновлений.

Сейчас активно устанавливают и более свежие версии XP (тоже почти везде пиратские), где уже в комплекте идет 7-я версия IE, и Windows 7, поставляемая с MSIE 8.0. Кроме того, IE пришлось потесниться, а на первое место вышла Opera (29,8% посетителей), а IE, потеряв более 10%, занимает 2-е место, набрав 28.8% от общего объема посетителей. При этом доля IE 6.0 в общем объеме пользователей IE сократилась с 34% до 15%. Замыкает тройку лидеров — FireFox.

Так образом, IE 6.0 сейчас пользуется каждый 20й пользователь (около 5%). С ними все ещё приходится считаться.

Это долгое вступление призвано показать, что вопрос о том поддерживать какие то версии браузеров или нет — серьёзный, требует периодических исследований, чтобы понимать какова текущая ситуация. Она будет разной для разных регионов, возможно даже будет зависеть от тематики сайта. Рано или поздно возникает идея сообщить пользователю, что мол, есть уже новые браузеры (пора ими начать пользоваться, дружок!).

Определить версию программы браузера, его семейство и предпринять какие то действия, вы можете как на стороне сервера, так и на стороне клиента. Для примера кусочек кода на javascript, позволяющий определить, что пользователь использует IE версии ниже чем 7.0

В PHP можно обратиться к заголовкам, передаваемым браузером, с помощью ф-ции getallheaders(), она вернет ассоциативный массив, где элемент [User-Agent] будет содержать информацию о браузере.

Так мы выяснили, что путей как минимум — 2. Какой лучше? Я сторонник того, чтобы вся работа, которая не сопряжена с безопасностью, которая достаточно легко реализуема на стороне клиента — выполнялась на клиентской машине. В наше время чаще получается так, что ресурсы клиентских машин значительно превышают возможности виртуальных выделенных веб-серверов. Вот пусть они и работают по мере возможности :).

С другой стороны, у клиента вообще могут не работать javascripts и тогда выполнить проверку на сервере — единственный путь. Явление это очень редкое, хотя точной статистики у меня нет.

Есть тут и «подводные камни». Ведь если не принимать в счет мои личные предпочтения, то выполнить проверку на стороне сервера будет принципиально более верным подходом. Хотя бы потому, что определить версию браузера на некоторых старых клиентах, будет нельзя так, как я это показал в примере. И скрипт будет более сложным. Одним из подводных камней может оказаться система кеширования страниц сайта (как, например, у drupal). Один раз определив на стороне сервера, что клиент подходит или, наоборот, не подходит для отображения сайта, страница с данным результатом будет отображаться всем другим анонимным клиентам, пока не кончится время жизни кеша. В таких случаях уже javasctipt является единственным подходящим вариантом.

Мало букафф? Читайте есчо !

Асинхронная загрузка и инициализация js скрипта

Май 13, 2022 г.

С тех пор как стало возможным указать загружаемому в HTML документе скрипту флаги-аттрибуты async и defer, стало необходимо понимать то, в какой очередности скрипты будут исполнены, если они зависят друг от друга. Так если ваш скрипт зависит от ...

Читать

Можно ли вызвать статический метод trait в php, не подключая его к какому то классу?

Май 27, 2025 г.

Если коротко - нельзя. Вызвать какой метод трейта напрямую без подключения его к классу невозможно, т.к. трейты в PHP не являются самостоятельными сущностями, как классы или объекты. Трейт — это механизм "вклейки" кода в класс. Он не компилируется ...

Читать

Валидатор ip адреса на PHP

Ноябрь 13, 2015 г.

Пример хелпера-валидатора на PHP для проверки формата ip адреса. [crayon-69ffcb3779e2e804363683/] Функция проверяет является ли формально строка ip-адресом по протоколам ipv4 или ipv6. Возвращает булево значение. Возможно применение этого кода ...

Читать

Вызов замыкания из другой анонимной функции.

Декабрь 14, 2020 г.

При необходимости использовать (в PHP коде) замыкание (closure) A в коде замыкания B, возникает проблема в области видимости. Т.к. внутри B о функции A ничего не известно. Пример ситуации: [crayon-69ffcb377a01c790194599/] Для того чтобы в ...

Читать
 

Комментарии к «Определение версии браузера — PHP или javascript?»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: