Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Rozpoznawanie języka usera oraz Googlebota
Czesnik
post 2.07.2009, 10:06:02
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 2.07.2009

Ostrzeżenie: (0%)
-----


Witam! Chciałem napisać skrypt, który rozpozna język odwiedzającego lecz się nie udało. sciana.gif Nie mam pojęcia co jest źle...
  1. <?
  2. /*--------------------TEST PO IP------------------------*/
  3. function IP_prawdziwe(){
  4.    if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
  5.        $ip_prawdziwe = $_SERVER['HTTP_X_FORWARDED_FOR'];
  6.    } else {
  7.            $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  8.        }
  9.  
  10. return $ip_prawdziwe;
  11. }
  12. $ip=IP_prawdziwe();
  13.  
  14. $adres='http://legacytools.dnsstuff.com/tools/ipall.ch?ip='.$ip;
  15. $info=file_get_contents($adres);
  16. $cut_start='PL';
  17. $cut_end=$cut_start+11;
  18. $testuj=substr($info, $cut_start, $cut_end);
  19.    if($testuj=='PL [Poland]'){
  20.        $test1='pl';
  21.    }else{$test1='en';}
  22.  
  23. /*--------------------TEST PO PRZEGLADARCE*--------------*/
  24. $info2=$_SERVER['HTTP_USER_AGENT'];
  25. $search='en';
  26. $testuj2=substr($info2, $start, 1);
  27.    if(!$testuj2){
  28.        $test2='pl';
  29.    }else{$test2='en';}
  30.  
  31. /*-------------------GOOGLEBOT TEST*----------------------*/
  32. $googlebot=substr($host, -13, -4);
  33. if($googlebot=='googlebot'){
  34. echo 'GOOGLE!<br />';
  35. }
  36.  
  37. echo $test1.'<br />'.$test2.'<br />';
  38. ?>

a efekt odwrotny niż powinien być (żaden if się nie sprawdził)
  1. en<br />en<br />

Pomoże ktoś?
Go to the top of the page
+Quote Post
nexis
post 2.07.2009, 10:12:30
Post #2





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


Języka szukaj raczej w nagłówku Accept-Language.


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
Czesnik
post 2.07.2009, 10:23:20
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 2.07.2009

Ostrzeżenie: (0%)
-----


Zwróciło mi:
  1. pl,en-us;q=0.7,en;q=0.3

Język usera to 2 pierwsze znaki?

EDIT:

już wiem:
http://www.netcoffee.pl/pogodzinach/2006/0...ka-uzytkownika/
Dzięki za podpowiedź

Ten post edytował Czesnik 2.07.2009, 10:27:17
Go to the top of the page
+Quote Post
nexis
post 2.07.2009, 10:33:36
Post #4





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function getLanguage()
  3. {
  4.    $httplanguages = getenv('HTTP_ACCEPT_LANGUAGE');
  5.    $languages     = array();
  6.    if (empty($httplanguages) === true) {
  7.        return $languages;
  8.    }
  9.  
  10.    $accepted = preg_split('/,s*/', $httplanguages);
  11.  
  12.    foreach ($accepted as $accept) {
  13.        $match  = null;
  14.        $result = preg_match('/^([a-z]{1,8}(?:[-_][a-z]{1,8})*)(?:;s*q=(0(?:.[0-9]{1,3})?|1(?:.0{1,3})?))?$/i',
  15.                             $accept, $match);
  16.  
  17.        if ($result < 1) {
  18.            continue;
  19.        }
  20.  
  21.        if (isset($match[2]) === true) {
  22.            $quality = (float) $match[2];
  23.        } else {
  24.            $quality = 1.0;
  25.        }
  26.  
  27.        $countrys = explode('-', $match[1]);
  28.        $region   = array_shift($countrys);
  29.  
  30.        $country2 = explode('_', $region);
  31.        $region   = array_shift($country2);
  32.  
  33.        foreach ($countrys as $country) {
  34.            $languages[$region . '_' . strtoupper($country)] = $quality;
  35.        }
  36.  
  37.        foreach ($country2 as $country) {
  38.            $languages[$region . '_' . strtoupper($country)] = $quality;
  39.        }
  40.  
  41.        if ((isset($languages[$region]) === false) || ($languages[$region] < $quality)) {
  42.            $languages[$region] = $quality;
  43.        }
  44.    }
  45.    
  46.    arsort($languages);
  47.  
  48.    return key($languages);
  49. }
  50.  
  51. echo getLanguage();
  52. ?>


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
viking
post 2.07.2009, 11:19:49
Post #5





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jeszcze mała uwaga odnośnie takiego sprawdzania IP. Polegaj tylko i wyłącznie na $_SERVER['REMOTE_ADDR'].


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 16:03