2

異なる Web サイトにある 2 つの PHP コードを統合しました。コードの最初の部分は、あなたがどの国にいるかを調べ、2 番目の部分は言語を決定します。私はそれを実行しようとしましたが、運がありません。エラーは表示されず、真っ白な画面が表示されます。

コードは次のとおりです。

<?php

function visitor_country()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];
    $result  = "Unknown";
    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));

    if($ip_data && $ip_data->geoplugin_countryName != null)
    {
        $result = $ip_data->geoplugin_countryName;
    }

    return $result;
}

    session_start();
    header('Cache-control: private'); // IE 6 FIX

    if (isset($_GET['lang'])) {
            $lang = $_GET['lang'];

            // register the session and set the cookie
            $_SESSION['lang'] = $lang;

            setcookie('lang', $lang, time() + (3600 * 24 * 30));
    } else if (isset($_SESSION['lang'])) {
            $lang = $_SESSION['lang'];
    } else if (isset($_COOKIE['lang'])) {
            $lang = $_COOKIE['lang'];
    } else {
            $lang = 'en';
    }

    switch ($lang) {
            case 'en':
            $lang_file = 'lang.en.php';
            break;

            case 'de':
            $lang_file = 'lang.de.php';
            break;

            if(visitor_country() == "Germany") {
                default:
                $lang_file = 'lang.de.php';
                echo "Germany";
            } else {
                default:
                $lang_file = 'lang.en.php';
                echo "Not in Germany";
            }

    }

    include_once 'languages/' . $lang_file;



?>

言語コードを含めることはできませんでしたが、国を自動検出せずに自分のサイトで使用しているため、動作するので安心してください.

4

1 に答える 1

1

あなたのコードはエラーを返します: PHP Parse error: syntax error, unexpected 'default' (T_DEFAULT) in yourfile.php on line. それはあなたが声明で誤用defaultしていることを意味します。switchコードの最後の部分を次のように置き換えます。

default:
  if(visitor_country() == "Germany") {
     $lang_file = 'lang.de.php';
     echo "Germany";
  } else {
     $lang_file = 'lang.en.php';
     echo "Not in Germany";
  }

ステートメントdefault内から取り出します。if/else

編集1:

PHP に が表示されていることを確認しERRORS、コードWARNINGNOTICES 適切にデバッグします。

ini_set('display_errors', -1);

編集2:

あなたが言ったように、ステートメントなしで機能していた場合は、ファイル/が実際に存在switchすることを確認する必要があります。lang.en.phplang.de.php

編集3:

@の前にあることでエラーを抑制していjson_decode(file_get_contentsます。ほとんどの場合、編集してphp.ini有効allow_url_fopenにする必要があります。を削除する@と、エラーが発生するに違いありません。

 Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in

この種の方法を使用してユーザー言語を検出し、有効allow_url_fopenにすることは、セキュリティ上の欠陥である可能性があるため、強くお勧めしません! 興味がある場合は、ユーザーのブラウザーの言語を判別するためのより優れたソリューションを提供します。

于 2013-11-03T16:52:07.753 に答える