saskozp

Извращение на PHP

7 posts in this topic

Подскажите рабочее решение на PHP , которое позволит запускать сайт только в браузере IE! Для всех остальных браузеров нужно выводить определенное сообщение.

Заранее благодарен за любую помощь.

Share this post


Link to post
Share on other sites

 

https://www.drupal.org/node/1552190

 

Пример для ФФ

$userAgent = $_SERVER['HTTP_USER_AGENT'];
if(!preg_match('/Firefox/i',$userAgent)){
	return FALSE;
}
return TRUE;

ага, только заголовки легко сменить, так что, если кому надо зайдет с любого бразуера)

Share this post


Link to post
Share on other sites

Приветствую. Есть различные варианты решений, все они связаны с определением HTTP_USER_AGENT, по другому на уровне сервера не сделать. Вот варианты:

1) Использовать функцию get_browser, которая по умолчанию не входит в дистрибутив php;

2) На основе ветки обсуждений по функции выше, рекомендуют использовать скрипт UserAgentParser.

3) Также в комментариях к той функции человек написал свою функцию парсинга HTTP_USER_AGENT, усовершенствованный аналог get_browser по его словам, продублирую её код сюда:

<?php
function getBrowser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown';
    $platform = 'Unknown';
    $version= "";

    //First get the platform?
    if (preg_match('/linux/i', $u_agent)) {
        $platform = 'linux';
    }
    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
        $platform = 'mac';
    }
    elseif (preg_match('/windows|win32/i', $u_agent)) {
        $platform = 'windows';
    }
    
    // Next get the name of the useragent yes seperately and for good reason
    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'Internet Explorer'; 
        $ub = "MSIE"; 
    } 
    elseif(preg_match('/Firefox/i',$u_agent)) 
    { 
        $bname = 'Mozilla Firefox'; 
        $ub = "Firefox"; 
    } 
    elseif(preg_match('/Chrome/i',$u_agent)) 
    { 
        $bname = 'Google Chrome'; 
        $ub = "Chrome"; 
    } 
    elseif(preg_match('/Safari/i',$u_agent)) 
    { 
        $bname = 'Apple Safari'; 
        $ub = "Safari"; 
    } 
    elseif(preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'Opera'; 
        $ub = "Opera"; 
    } 
    elseif(preg_match('/Netscape/i',$u_agent)) 
    { 
        $bname = 'Netscape'; 
        $ub = "Netscape"; 
    } 
    
    // finally get the correct version number
    $known = array('Version', $ub, 'other');
    $pattern = '#(?<browser>' . join('|', $known) .
    ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
    if (!preg_match_all($pattern, $u_agent, $matches)) {
        // we have no matching number just continue
    }
    
    // see how many we have
    $i = count($matches['browser']);
    if ($i != 1) {
        //we will have two since we are not using 'other' argument yet
        //see if version is before or after the name
        if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            $version= $matches['version'][0];
        }
        else {
            $version= $matches['version'][1];
        }
    }
    else {
        $version= $matches['version'][0];
    }
    
    // check if we have a number
    if ($version==null || $version=="") {$version="?";}
    
    return array(
        'userAgent' => $u_agent,
        'name'      => $bname,
        'version'   => $version,
        'platform'  => $platform,
        'pattern'    => $pattern
    );
} 

// now try it
$ua=getBrowser();
$yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
print_r($yourbrowser);
?>
up
down
7 Francesco R ¶2 months ago
If you ONLY need a very fast and simple function to detect the browser name (update to May 2016):

<?php

function get_browser_name($user_agent)
{
    if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) return 'Opera';
    elseif (strpos($user_agent, 'Edge')) return 'Edge';
    elseif (strpos($user_agent, 'Chrome')) return 'Chrome';
    elseif (strpos($user_agent, 'Safari')) return 'Safari';
    elseif (strpos($user_agent, 'Firefox')) return 'Firefox';
    elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) return 'Internet Explorer';
    
    return 'Other';
}

// Usage:

echo get_browser_name($_SERVER['HTTP_USER_AGENT']);

?>

Определив HTTP_USER_AGENT, остальное уже дело техники, как говорится.

saskozp likes this

Share this post


Link to post
Share on other sites

ага, только заголовки легко сменить, так что, если кому надо зайдет с любого бразуера)

Ну да. На порносайты(я к примеру) только программисты и хакеры заходят))) Иного варианта железно определить тип браузера - нет, по крайней мере я не знаю такого варианта(

 

 

 

Использовать функцию get_browser, которая по умолчанию не входит в дистрибутив php

 

По умолчанию входит, просто он не включен. Не хватает файлика browscap.ini, если хостер позволяет создавать локальные php-конфиги и он не ограничил нужный параметр для работы этой функции, то можно настроить это дело. А "ini" файл можно взять из одноименного сайта browscap.org(не сочтите за рекламу( )

campusboy likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.