Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rozpoznawanie języka usera oraz Googlebota
Forum PHP.pl > Forum > Przedszkole
Czesnik
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ś?
nexis
Języka szukaj raczej w nagłówku Accept-Language.
Czesnik
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ź
nexis
  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. ?>
viking
Jeszcze mała uwaga odnośnie takiego sprawdzania IP. Polegaj tylko i wyłącznie na $_SERVER['REMOTE_ADDR'].
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.