Wyswietlanie ikonek przy komentarzach


(Darom82) #1

Na mojej stronce: http://www.history.is.net.pl/?download&cat=2&appage=0 wlasnie testuje wyswietlanie sie ikonek przegladarek i systemu windows przy komentarzach.

Zastanawiam sie nad tym, ze gdy ktos uzywa systemu Linux to wtedy przy komentarzu wyswietla mi sie ikonka pingwina: linux.gif


(Asperek) #2

Niektóre przeglądarki nie pokazują tego, że jest to akurat ubunciak. Przykładowo, w Chromium, mój useragent pokazuje to, że siedzę na ubunciaku. Natomiast na FF4 czy Operze 11, nie pokazuje distro.

Przykład:

Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Ubuntu/10.10 Chromium/11.0.673.0 Chrome/11.0.673.0 Safari/534.21

W przypadku jeśli przeglądarka pokazuje distro, skrypt wyłapuje pierwsze wystąpienie 'linux', czyli pogrubione wyżej. Natomiast musi oprócz tego wychwycić ewentualną dystrybucję linuxa, czyli podkreślone w przykładzie, 'ubuntu'. Można to rozwiązać, sprawdzając najpierw czy system jest linuxem, a jeśli tak, to sprawdzenie jaką jest dystrybucją:

if (preg_match('/linux/i', $u_agent)) {

   if(preg_match('/ubuntu/i', $u_agent))

      $platform='ubuntu';

   elseif(preg_match('/fedora/i', $u_agent))

      $platform='fedora';

   else

      $platform = 'linux';

}

(Darom82) #3

gachowy to mi zadziałało elegancko i ikonke ubuntu mi wyswietlilo, natomiast kolega dodał komentarz testowy z innej wersji systemu linux i powinna się teraz dla niego wyswietlic ta ikonka przy komentarzu arch.png


(mario@) #4

Darom82 przecież powyżej masz warunek

Po drugie czy w podanym powyżej przykładzie widzisz wpis szukający dystrybucji arch?? Skopiuj odpowiedni fragment i zmień nazwy na arch.

http://www.useragentstring.com/pages/us ... string.php

http://www.useragentstring.com/pages/Browserlist/


(Darom82) #5

mario@ Czyli jesli dodam sobie ten kod:

if (preg_match('/linux/i', $u_agent)) {

   if(preg_match('/arch/i', $u_agent))

      $platform='arch';

   elseif(preg_match('/fedora/i', $u_agent))

      $platform='fedora';

   else

      $platform = 'linux';

}

To bedzie dobrze i wyswietli mi ta ikonke co chce przy komentarzu ? Wowczas calosc by wygladala tak:

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

    }

    if (preg_match('/linux/i', $u_agent)) {

    if(preg_match('/ubuntu/i', $u_agent))

      $platform='ubuntu';

    elseif(preg_match('/fedora/i', $u_agent))

      $platform='fedora';

    else

      $platform = 'linux';

    }

    if (preg_match('/linux/i', $u_agent)) {

   if(preg_match('/arch/i', $u_agent))

      $platform='arch';

   elseif(preg_match('/fedora/i', $u_agent))

      $platform='fedora';

   else

      $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 = '#(?' . join('|', $known) .

    ')[/]+(?[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

    );

}


// send.php


// check if argument 'id' is there

if(empty($_GET['id']))

{

$id = 'default';

}

else

{

$id = $_GET['id'];

}


// comment files location

$localization = "data/comments/";

// comment files extensions

$file_extension = ".txt";


//

// Comment content - start

//


// change HTML special chars in to properly (safe) form

// protect beware sending code via comments

$nickTestowy = preg_replace("/(\s+)/","",htmlspecialchars($_POST['nick']));

$wpisTestowy = preg_replace("/(\s+)/","",htmlspecialchars($_POST['comment']));


//

// Comment content - end

//


//

// Check - start

//


// Simple solution to don't publish empty comments


if(empty($wpisTestowy))

   die("

Zamieszczanie pustych komentarzy jest zabronione.

Kliknij Tutaj, aby wrócić do komentarzy

"); $nick = (empty($nickTestowy))? "Anonymous" : str_replace("\r\n", " ", htmlspecialchars(trim($_POST['nick']))) ; $comment = str_replace("\r\n", " ", htmlspecialchars(trim($_POST['comment']))); // // Check - end // // // COOKIE - start // // Simple anti-spam solution // cookie name $cookie_name = 'comment'; // cookie value $cookie_value = '1'; // when cookie will expire // 60 seconds $cookie_expire = time()+60; // setcookie(name, value, expire, path, domain); // check if there is cookie now if (isset($_COOKIE[$cookie_name])) { // show information to wait before adding next comment echo "

Dodano Twój komentarz.

Kliknij Tutaj, aby wrócić do komentarzy

"; die(); } $date_and_time = date("d.m.Y H:i"); // user identification $user_ip = $_SERVER['REMOTE_ADDR']; list($useragent,$ua_name,$ua_version,$user_os,$ua_pattern)=array_values(getBrowser()); // place between content in flat-file $PLACE = '|||'; // end of the line in flat-file $line_end = "\n"; // exported line to flat-file $result = $date_and_time.$PLACE.$user_ip.$PLACE.$ua_name.$PLACE.$user_os.$PLACE.$useragent.$PLACE.$nick.$PLACE.$comment.$line_end; // directory and name of flat-file $file = $localization.$id.$file_extension; // opening flat-file in 'add' mode $file_handle = fopen($file, "a"); // write '$result' in to the flat-file fwrite ($file_handle, $result); // close the flat file and report result if(fclose($file_handle)) { // COOKIE // create cookie file to protect against spam setcookie($cookie_name, $cookie_value, $cookie_expire); // STATUS // show that comment was sucessfully added echo "

Dodano Twój komentarz.

Kliknij Tutaj, aby wrócić do komentarzy

"; } else { // show that there was an error while adding comment echo "

Wystąpił błąd podczas dodawania komentarza, spróbuj następnym razem.

Kliknij Tutaj, aby wrócić do komentarzy

"; } // send.php ?>[/code]

Jesli blednie to zrobilem to bardzo prosze o poprawienie mnie. Bardzo Was prosze o pomoc.


(mario@) #6
if (preg_match('/linux/i', $u_agent))

(Darom82) #7

mario@ dzięki serdeczne. A czy moglbys mi jeszcze tylko tę jedną rzecz powiedziec, a mianowicie: Jak zrobic, zeby wykrywalo mi tez te popularne systemy Linuksowe tj. Debian, openSUSE ?

I co zrobic, jesli ktos wpisal komentarz i powinna mi sie wyswietlic przy komentarzu taka ikonka iceweasel.png


(mario@) #8

Iceweasel to firefox dla debiana więc musisz go rozpoznawać w przeglądarkach a ikonka symbolizuje system (rodzinę systemów).

Tak jak powyżej z archem - same nazwy systemów (możliwy zapis nazw) znajdziesz w linkach jakie podałem powyżej.


(Darom82) #9

mario@ czyli dla przegladarek to dobrze zrobilem ? jesli nie to prosze popraw mnie.

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('/Firefox/i',$u_agent))

    {

        $bname = 'Iceweasel';

        $ub = "Iceweasel";

    }

    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";

    }

Czyli tak jak zrobilem ponizej to jest poprawnie ?

if (preg_match('/linux/i', $u_agent)) {

        $platform = 'linux';

    }

    if (preg_match('/linux/i', $u_agent)) {

    if(preg_match('/ubuntu/i', $u_agent))

      $platform='ubuntu';

    elseif(preg_match('/fedora/i', $u_agent))

      $platform='fedora';

    elseif(preg_match('/arch/i', $u_agent))

      $platform='arch';

    elseif(preg_match('/debian/i', $u_agent))

      $platform='debian';

    elseif(preg_match('/openSUSE/i', $u_agent))

      $platform='openSUSE';

    else

      $platform = 'linux';

    }

    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {

        $platform = 'mac';

    }

    elseif (preg_match('/windows|win32/i', $u_agent)) {

        $platform = 'windows';

    }

Jesli jest zle to prosze zebys mi pomogl to poprawic tak zeby bylo dobrze.


(mario@) #10

Iceweasel to firefox ale to nie oznacza, że przedstawia się jako firefox - przecież powyżej podałem Ci linki, które bezpośrednio odpowiadają na Twoje pytania. W drugim prócz pierwszego ifa, który jest zbędny, nie pasuje mi nazwa opesnsuse jako warunek a co jak będzie samo suse(ale ogólnie tak ma to wyglądać - drugi kod) - znowu odsyłam cię do powyższych linków.


(Darom82) #11

Mam skrypt do wyświetlania ikonek przeglądarek i ikonek systemu windows oraz w dymku równocześnie wyświetla nazwe przeglądarki i nazwe systemu windows. Bardzo prosze, by ktoś pomógł mi na tej zasadzie zrobić tak, żeby wyświetlało mi też ikonke systemu windows XP oraz ikonke przeglądarki linuxa ubuntu.gif