<?php

// ------------------------------------------------------------------------- //
// Une fonction qui retourne sous forme de tableau la nature du navigateur.  //
// ------------------------------------------------------------------------- //
// Auteur: Perrich                                                           //
// Email:  perrich@club-internet.fr                                          //
// Web:    http://www.frshop.net/                                            //
// ------------------------------------------------------------------------- //

// ----------------------------------------------------------------------------
// Fonction retournant le navigateur, sa version et l'OS dans un tableau
//
// $agt : chaine contenant le $HTTP_USER_AGENT
// ----------------------------------------------------------------------------

function parseAgent( $agt )
{
if (
$agt[8] == '4' )
{

// ----------------------------------------------------------------------------
// Opera
// ----------------------------------------------------------------------------

$tmp = strpos( $agt, "Opera" );
if (
$tmp )
{
$new_agt[0] = "OP";

$values = Array( "5.01", "5.0", "4.02", "4.01", "4.0", "3.60", "3.62" );
$tmp = searchValue( substr( $agt, $tmp + 6), $values );
if (
$tmp != -1 )
{
$new_agt[1] = $values[$tmp];
$values = Array( "Windows 95", "Windows 98", "Windows NT" );
$tmp = searchValue( $agt, $values );
if (
$tmp != -1 )
{
$values2 = Array( "Win95", "Win98", "WinNT" );
$new_agt[2] = $values2[$tmp];

return
$new_agt;
}
}

return
sendError( $agt );
}


// ----------------------------------------------------------------------------
// Internet Explorer
// ----------------------------------------------------------------------------

$tmp = strpos( $agt, "MSIE" );
if (
$tmp )
{
$tab = explode( ';', substr( $agt, 30 ) );
$new_agt[0] = "IE";
$new_agt[1] = $tab[0];
$values = Array( "9x 4.90", "Windows 98", "NT 5.0", "Windows NT", "Windows 95",
                 
"Mac", "Win32" );
$i = 1;
while (
$i < count( $tab ) )
{
$tmp = searchValue( $tab[$i], $values );
if (
$tmp != -1 )  break; // on a trouvé l'OS
$i++;
}
if (
$tmp != -1 )
{
$values2 = Array( "WinMe", "Win98", "Win2000", "WinNT", "Win95", "Mac PPC", "Win95" );
$new_agt[2] = $values2[$tmp];

return
$new_agt;
}

return
sendError( $agt );
}

// ----------------------------------------------------------------------------
// Netscape
// ----------------------------------------------------------------------------

if ( ereg( "Mozilla/4", $agt ) )
{
$new_agt[0] = "NS";
$tmp = strpos( $agt, "[" );
if (
$tmp )
{
$new_agt[1] = substr( $agt, 8,  $tmp - 9 );
}
else
{
$str2 = '0123456789';
$i = 10;
while (
eregi( $agt[$i], $str2 ) ) $i++;
$new_agt[1] = substr( $agt, 8, $i - 8 );
echo
substr( $agt, 8, $i - 8 );;
}
$str = substr( $agt, 10 );
$values = Array( "Win95", "Win98", "WinNT", "Windows NT", "Linux", "SunOS",
                 
"PPC", "FreeBSD", "AIX", "IRIX", "HP-UX", "OS/2", "NetBSD");
$tmp = searchValue( $str, $values );
if (
$tmp != -1 )
{
$values2 = Array( "Win95", "Win98", "WinNT", "WinNT", "Linux", "SunOS",
                  
"Mac PPC", "FreeBSD", "AIX", "IRIX", "HP-UX", "OS/2", "NetBSD");
$new_agt[2] = $values2[$tmp];

return
$new_agt;
}

return
sendError( $agt );
}
}

// ----------------------------------------------------------------------------
// Netscape 6
// ----------------------------------------------------------------------------

if ( $agt[8] == '5' )
{
$tmp = strpos( $agt, "Netscape6" );
if (
$tmp )
{
$new_agt[0] = "NS";
$new_agt[1] = substr( $agt, $tmp + 10);
$str = substr( $agt, 11, $tmp - 11 );
$values = Array( "Win95", "Win98", "WinNT", "Windows NT", "Linux", "SunOS",
                 
"PPC", "FreeBSD", "AIX", "IRIX", "HP-UX", "OS/2", "NetBSD");
$tmp = searchValue( $str, $values );
if (
$tmp != -1 )
{
$values2 = Array( "Win95", "Win98", "WinNT", "WinNT", "Linux", "SunOS",
                  
"Mac PPC", "FreeBSD", "AIX", "IRIX", "HP-UX", "OS/2", "NetBSD");
$new_agt[2] = $values2[$tmp];

return
$new_agt;
}

return
sendError( $agt );
}
}

$values = Array( "Lynx", "WWWOFFLE", "Konqueror");
$tmp = searchValue( $agt, $values );
if (
$tmp != -1 )
{
$new_agt[0] = $values[$tmp];
$new_agt[1] = "-";
$new_agt[2] = "Linux";
   
   return
$new_agt;
}

return
sendError( $agt );
}

// ----------------------------------------------------------------------------
// Fonction permettant de chercher une chaine dans un tableau de valeurs
//
// $str : chaine a trouver
// $values : tableau de chaines indiquant les valeurs possible de str

function searchValue( $str, $values )
{
    for (
$cpt = 0; $cpt < count( $values ); $cpt++ )
    {
        if (
ereg( $values[$cpt], $str ) ) return $cpt;
    }

    return -
1;
}

// ----------------------------------------------------------------------------
// Fonction retournant un code d'erreur pour un agent inconnu et envoyant un
// mail pour prévenir
//
// $agt : chaine contenant le $HTTP_USER_AGENT

function sendError( $agt )
{
    
$new_agt[0] = "-";
    
$new_agt[1] = "-";
    
$new_agt[2] = "-";

    @
mail( 'adresse@email.com', 'PB Visiteurs', 'Agent : '.$agt );

    return
$new_agt;
}

?>