Jump to content

Recommended Posts

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

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

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;

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

Link to post
Share on other sites
  • VIP

Приветствую. Есть различные варианты решений, все они связаны с определением 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, остальное уже дело техники, как говорится.

Link to post
Share on other sites
  • VIP

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

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

 

 

 

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

 

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...