2012-11-29 2 views
0

안녕하세요,PHP Double_Ccho와 이중 언어 웹 확인이 갑자기 작동하지 않음

죄송 합니다만, 이미 옵션이 부족합니다. 내 웹 사이트에서 머리 부분의 맨 위에있는 체코 코드 또는 슬로바키아 (IP 주소 체크 기반)에서 연결하면 체코 어 콘텐츠를 얻을 수 있고 나머지 IP는 주소는 영어로 제공됩니다. 이 작업은 DoubleEcho 함수의 매개 변수를 정의하여 수행됩니다. 갑작스럽게 멈췄다. 코드의 기본은 괜찮습니다.하지만 여전히 수동으로 내용을 전환 할 수 있지만 자동 선택이 어떻게 든 부숴졌습니다. 나는 항상 영어로 내용을 얻습니다. 제발, 나는 정말로 기뻐할 것입니다. 만약 당신이 코드를 볼 수 있다면 좋을 것입니다. 미리 많이 감사드립니다!

가 프록시를 통해 이동하거나이 부하 분산 장치에 직접 연결된 경우 토니 S.

<?php 

// Language - URL check 
if(isset($_GET['en'])) 
    $lang = 'en'; 
elseif (isset($_GET['cz'])) 
    $lang = 'cs'; 
// Language - IP check 
else { 
    $pc = gethostbyaddr($_SERVER["REMOTE_ADDR"]); 
    $ext = array_pop(explode('.', $pc)); 
    if($ext == 'cz' OR $ext == 'sk') 
    $lang = 'cs'; 
    else 
    $lang = 'en'; 
} 

    // Language - Echo function 
function DoubleEcho($text_cs, $text_en) 
{ 
    global $lang; 
    if($lang == 'cs') 
    echo $text_cs; 
    else 
    echo $text_en; 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang; ?>" lang="<?php echo $lang; ?>"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="Content-language" content="<?php echo $lang; ?>" />  
+1

IP에 역방향 DNS 항목이 없으면 작동하지 않습니다. 사용자가 체코 IP가 있지만 체코 어 호스트 이름이없는 페이지를 방문하면 해당 사용자의 REMOTE_ADDR에 cz 또는 sk가 포함되지 않습니다. – Maritim

+0

네가 맞아, 고마워! 나는 그걸 친구와 테스트 해 봤어. 그래서 이야기는, 제가 최근에 움직여서 새로운 연결을 설정하고 그 이후로 스크립트가 저를 위해 작동하지 않는다는 것입니다. 그러나 친구는 여전히 괜찮습니다. 나는 그것을 스스로 찾아 내지 못했을 것입니다. 다시 한번 고마워! –

답변

1

, IP 주소는 다양하지 않습니다.

function getRemoteInfo() { 
    $proxy=""; 
    $IP = ""; 
    if (isSet($_SERVER)) { 
     if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) { 
      $IP = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
      $proxy = $_SERVER["REMOTE_ADDR"]; 
     } elseif (isSet($_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'); 
      $proxy = getenv('REMOTE_ADDR'); 
     } elseif (getenv('HTTP_CLIENT_IP')) { 
      $IP = getenv('HTTP_CLIENT_IP'); 
     } else { 
      $IP = getenv('REMOTE_ADDR'); 
     } 
    } 
    if (strstr($IP, ',')) { 
     $ips = explode(',', $IP); 
     $IP = $ips[0]; 
    } 
    $RemoteInfo[0]=$IP; 
    $RemoteInfo[1][email protected]($IP); 
    $RemoteInfo[2]=$proxy; 
    return $RemoteInfo; 
} 

을 그리고 당신은 멋진 받기를 원한다면, 나는 도시 수준에서 작동하는 빠른 C++ GeoIP가 데몬을 썼다 :

이 기능은 당신에게 더 많은 경우에 IP를 검출하는 아이디어를 줄 것이다. 그들은 또한 같은 방식으로 일할 자유 국가 수준을 가지고 있습니다.

https://github.com/homer6/geoipd

+0

고마워요! 나는 그 코드를 좀 더 공부할 필요가 있음을 이해한다고 생각합니다. 그러나 응답을 기다리지 않으려 고합니다. 당신은 위대한 사람들입니다! geoip 데몬 링크에 감사드립니다! 다시 한번 많은 감사합니다! –

관련 문제