<?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;
}
?>