Определение браузера способами php

477
28 февраля 2017, 18:53

Здрасьте всем, я мало что знаю в php, поэтому и спрашиваю. Я нашел вот эту функцию:

function getInfoBrowser(){
$agent = $_SERVER['HTTP_USER_AGENT'];
preg_match("/(MSIE|Opera|Firefox|Chrome|Safari|Chromium|Version)(?:\/| )([0-9.]+)/", $agent, $bInfo);
$browserInfo = array();
$browserInfo['name'] = ($bInfo[1]=="Version") ? "Safari" : $bInfo[1];
$browserInfo['version'] = $bInfo[2];     
return $browserInfo;}

досоздал вот так: $browser = getInfoBrowser(); var_dump($broswer); ,все отлично вывело

но мне надо перенаправлять пользователей старых браузеров (Chrome lt 8.0, Safari lt 5.0, Firefox lt 4.0, MS IE lt 9.0, Opera lt 8.2) на страницу OldBroswer.php при условии что например значение ['name'] = 'Chrome' а ['version'] = <8.0, как это реализовать?

Answer 1

Версия может принимать вид, например, 56.0.2924.87 и во float вы не переведёте. Как вариант реализовать функцию, которая сравнивает 2 строки, например true - версия больше сравниваемого значения, false - наоборот, -1 - равны :

function compareVersion($version, $compare) {
    $versionArr = explode('.',$version);
    $compareArr = explode('.',$compare);
    $len = count($versionArr) - count($compareArr);
    if($len >  0) {
        $compareArr = array_pad($compareArr,count($versionArr), 0 );
    }
    if($len < 0) {
        $versionArr = array_pad($versionArr,count($compareArr), 0 );
    }
    for($i = 0; $i < count($versionArr); $i++) {
        if((int)@$versionArr[$i] > (int)@$compareArr[$i]) {
            return true;
        } else if((int)@$versionArr[$i] < (int)@$compareArr[$i]) {
            return false;
        }
    }
    return -1;
}
compareVersion($browserInfo['version'], '55.0.29955');
Answer 2

В принципе, я подумал, что так тоже норм, так как мне не нужна супер точная система детекции.

$browserInfo = getInfoBrowser(); $roughVersion = floatval($browserInfo['version']); $name = $browserInfo['name']; if(stristr($name, "Chrome") && $roughVersion <= 8){ header("Location: OldBrowser");} else if (stristr($name, "Firefox") && $roughVersion <= 4){ header("Location: OldBrowser");} else if (stristr($name, "Safari") && $roughVersion <= 5){ header("Location: OldBrowser");} else if (stristr($name, "MSIE") && $roughVersion <= 9){ header("Location: OldBrowser");} else if (stristr($name, "Opera") && $roughVersion <= 9){ header("Location: OldBrowser");}

READ ALSO
Замена пробелов на перенос строки в файле средствами php

Замена пробелов на перенос строки в файле средствами php

Есть txt файл в котором есть некий текст:

374
ffpmeg не вырезает видео

ffpmeg не вырезает видео

На локальном сервере работала эта команда:

222
checkbox в yii 2.0

checkbox в yii 2.0

Подскажите, пожалуйста, как в представлении вывести в ActiveForm checkboxList, значение которые являются объектами модели переданными из контроллера?...

545
Мультиязычность в Laravel

Мультиязычность в Laravel

Как правильно сделать мультиязычность в Laravel, что бы язык был в роуте, типа pl/team/1 ?

324