[PHP]Obtener datos de cliente y mostrar en imagen

Topic created · 4 Mensajes · 4817 Visitas
  • Buenísimo :miau:

    Me sorprende, lo usaré.

  • Seguramente todos han visto los cartelitos esos de danasoft que te dicen tu ip y cosas así, bueno a mi me dieron ganas de hacer el propio solo por ver que salia, recolecte algo de información y pues he acá el resultado:

    Como ven muestra la ip, navegador, SO, y el puerto, mostrando el correspondiente logo según el navegador y sistema operativo, me parece que quedo bonito XD(y con un poco de publi en el nombre).

    Lo que hace el script es recoger los datos que envían en los headers los clientes, con una serie de comparaciones de expresiones regulares se determina cual es el navegador, su versión y el sistema operativo, como ven todos estos datos se envían cuando navegamos por internet, por eso debemos tener cuidado.

    Acá dejo todo el código fuente, esta totalmente comentado para que logren entenderlo lo mejor posible:

    function getInformation()
    { //Primero obtenemos la ip
    if ($_SERVER) {
    if ( $_SERVER["HTTP_X_FORWARDED_FOR"] ) {
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } elseif ( $_SERVER["HTTP_CLIENT_IP"] ) {
    $ip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
    $ip = $_SERVER["REMOTE_ADDR"];
    }
    } else {
    if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
    $ip = getenv( 'HTTP_X_FORWARDED_FOR' );
    } elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
    $ip = getenv( 'HTTP_CLIENT_IP' );
    } else {
    $ip = getenv( 'REMOTE_ADDR' );
    }
    }

    //La variable información contendra los datos que trae la cabecera
    // 'HTTP_USER_AGENT', como lo son navegador y su versión, ademas del
    //sistema operativo
    $informacion = $_SERVER['HTTP_USER_AGENT'];
    //Si no se encuentran coincidencias se mostraran los valores
    //de las variables que estan puestos por defecto (los que siguen)
    $navegador = 'Desconocido';
    $version= "";
    $SO = 'Desconocido';
    //Obtenemos el puerto por el cual el cliente esta conectado a nuestro servidor
    $puerto = $_SERVER['REMOTE_PORT'];

    /* Ahora averiguamos el nombre del navegador*/
    //Lo que hacemos es comparar los nombres de los navegadores
    //con la información de la cabecera HTTP_USER_AGENT, y cuando haya una
    //coincidencia guardar la variable.
    if(preg_match('/MSIE/i',$informacion) && !preg_match('/Opera/i',$informacion))
    {
    $navegador = 'Internet Explorer';
    $n_navegador = "MSIE";
    }
    elseif(preg_match('/Firefox/i',$informacion))
    {
    $navegador = 'Mozilla Firefox';
    $n_navegador = "Firefox";
    }
    elseif(preg_match('/Chrome/i',$informacion))
    {
    $navegador = 'Google Chrome';
    $n_navegador = "Chrome";
    }
    elseif(preg_match('/Safari/i',$informacion))
    {
    $navegador = 'Apple Safari';
    $n_navegador = "Safari";
    }
    elseif(preg_match('/Opera/i',$informacion))
    {
    $navegador = 'Opera';
    $n_navegador = "Opera";
    }
    elseif(preg_match('/Netscape/i',$informacion))
    {
    $navegador = 'Netscape';
    $n_navegador = "Netscape";
    }

    // Finalmente obtenemos la versión del navegador
    //Esto es una expresión regular que no explicare...apenas y la entiendo yo
    $patron = '#(?' . $n_navegador .')[/ ]+(?[0-9.|a-zA-Z.]*)#';
    if (!preg_match_all($patron, $informacion, $busqueda)) {
    // aun no tenemos el número correcto, solo continuamos
    }

    // Contamos cuantos números tenemos de la versión
    $i = count($busqueda['browser']);
    if ($i != 1) {
    //comprobamos en que posición del array esta la versión
    if (strripos($informacion,"version") < strripos($informacion,$n_navegador)){
    $version= $busqueda['version'][0];
    }
    else {
    $version= $busqueda['version'][1];
    }
    }
    else {
    $version= $busqueda['version'][0];
    }

    // Comprobamos si tenemos un número
    if ($version==null || $version=="") {
    $version="???";
    }

    //Obtenemos el sistema operativo
    if (preg_match('/linux/i', $informacion)) {
    $SO = 'linux';

    }
    elseif (preg_match('/macintosh|mac os x/i', $informacion)) {
    $SO = 'mac';
    }
    elseif (preg_match('/windows|win32/i', $informacion)) {
    $SO = 'Windows';
    }
    //Asignamos un valor a cada variable dentro del array
    return array(
    'dirección' => $ip,
    'navegador' => $navegador,
    'version' => $version,
    'SO' => $SO,
    'puerto' => $puerto
    );
    }

    // Almacenamos toda la información en una variable
    $obtener=getInformation();
    //Comprobamos el sistema operativo y asignamos el logo
    if ($obtener['SO']=='Windows') {
    $logo_so = imagecreatefrompng("SO.png") ;}
    elseif ($obtener['SO']=='linux') {
    $logo_so = imagecreatefrompng("Linux_Logo.png") ;}
    elseif ($obtener['SO']=='mac') {
    $logo_so = imagecreatefrompng("Mac_logo.png") ;}

    //Mensaje a mostrar en la imagen junto a los valores sacados de la función
    $tuinformacion= "
    Tu navegador es : " . $obtener['navegador'] . " " . $obtener['version'] . "
    Tu sistema operativo es : " .$obtener['SO'] . "
    Tu direccion ip es : ".$obtener['dirección']."
    y te estas conectando a traves del puerto : ".$obtener['puerto']."";
    // Segundo mensaje, igual que el anterior, solo para dar volumen a las letras
    $tuinformacion2= "
    Tu navegador es :
    Tu sistema operativo es :
    Tu direccion ip es :
    y te estas conectando a traves del puerto : ";

    //Obtenemos el navegador y asignamos el logo correspondiente
    if ($obtener['navegador']=='Google Chrome') {
    $logo_na = imagecreatefrompng("Chrome_Logo.png") ;}
    elseif ($obtener['navegador']=='Internet Explorer') {
    $logo_na = imagecreatefrompng("internetexplorer9logo.png") ;}
    elseif ($obtener['navegador']=='Mozilla Firefox') {
    $logo_na = imagecreatefrompng("firefox-logo.png") ;}
    elseif ($obtener['navegador']=='Opera') {
    $logo_na = imagecreatefrompng("Opera_logo.png") ;}
    elseif ($obtener['navegador']=='Apple Safari') {
    $logo_na = imagecreatefrompng("Mac_logo.png") ;}

    // Esta imagen es el logo del sistema operativo que se pondra.
    $imagen_logo = $logo_so;
    // Defino ancho, alto del logo.
    $ancho_logo = imagesx($imagen_logo);
    $alto_logo = imagesy($imagen_logo);

    // Esta imagen es el logo del navegador que se pondra.
    $imagen_logo2 = $logo_na;
    // Defino ancho, alto del logo.
    $ancho_logo2 = imagesx($imagen_logo2);
    $alto_logo2 = imagesy($imagen_logo2);

    //Imagen extra (es el mundito ese que sale abajo del todo)
    $imagen_logo3 = imagecreatefrompng("ip.png");

    //Creamos la imagen de fondo
    $direccion = imagecreatefrompng("Background_status.png");
    //Asociamos el fondo a otra variable para trabajar los tamaños y poder encajar mejor las imagenes
    $imagen_dest = $direccion;
    //obtenemos ancho y alto de la imagen de fondo
    $ancho_dest = imagesx($imagen_dest);
    $alto_dest = imagesy($imagen_dest);

    //posición donde ira el logo del sistema operativo
    $ancho_muestra = (460) - 10;
    $alto_muestra = (86) - 10;

    //posición donde ira el logo del navegador
    $ancho_muestra2 = (460) - 10;
    $alto_muestra2 = (55) - 10;

    //color del texto que ira en la imagen
    $colText = imagecolorallocate($direccion, 0, 0, 0);
    //Creamos el texto, tamaño, posición, font y finalmente la información
    ImageTTFText ($direccion, 15, 0, 9, 41, $colText, "tahoma.ttf",$tuinformacion);
    //Segundo texto, solo para hacer sombra a ciertas letras
    ImageTTFText ($direccion, 15, 0, 8, 40, $colText, "tahoma.ttf",$tuinformacion2);
    //Enviamos la cabecera para que lea la imagen png
    header("Content-type: image/png");
    //Montamos el logo del sistema operativo
    imagecopyresized($imagen_dest,$imagen_logo,$ancho_muestra,$alto_muestra,0,0,$ancho_logo,$alto_logo,$ancho_logo,$alto_logo);
    //Montamos el logo del navegador
    imagecopyresized($imagen_dest,$imagen_logo2,$ancho_muestra2,$alto_muestra2,0,0,$ancho_logo2,$alto_logo2,$ancho_logo2,$alto_logo2);
    //Montamos el logo adicional
    imagecopyresized($imagen_dest,$imagen_logo3,230,145,0,0,25,25,25,25);
    //Creamos la imagen completa
    imagepng($direccion);

    //Destruimos las imagenes
    imagedestroy($direccion);
    imagedestroy($imagen_logo);
    imagedestroy($imagen_logo2);
    imagedestroy($imagen_logo3);

    ?>

  • Muy bueno, aunque ya existen varios scripts como este.

  • lo bueno de esta funcion es que se puede sacar un par de lineas de el para poder hacer los .css para cada navegador, sin tener que usar lineas raras.