0

重複の可能性:
PHPによってすでに送信されているヘッダー

私のウェブサイトのメインURLは、すべての訪問者をローカルサブページにリダイレクトします。これを実現するために、PHPとともにfreegeoip.netを使用します。

<!DOCTYPE html>
<html>
<head>
<title>MLP Today</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="google-site-verification" content="*snip*" />
<?php
$csv = str_getcsv(file_get_contents('http://freegeoip.net/csv/'));
$geoloc = strtolower($csv[1]);

    if ($geoloc == 'hu' || 
        $geoloc == 'ro'){
        header("Location: hu/");
    }
    else if($geoloc == 'nl' || 
            $geoloc == 'be' || 
            $geoloc == 'de' || 
            $geoloc == 'sr' || 
            $geoloc == 'au'){
        header("Location: de/");
    }
    else {
        header("Location: en/");
    }
?>
<link rel="icon" type="image/png" href="img/favicon/favicon.png">
</head>
<body>
</body>
</html>

ただし、ローカルのApacheサーバーからサイトをロードすると、次のようなエラーが発生します。

警告:ヘッダー情報を変更できません-D:\ DJDavid \ Dokumentumok \ Dropbox \ Web \ Today \ indexの(D:\ DJDavid \ Dokumentumok \ Dropbox \ Web \ Today \ index.php:7で開始された出力)によって既に送信されたヘッダー。 13行目のphp

13行目は次のとおりです。header("Location: hu/");

以前にいくつかの回答を読みましたが、それらはすべて、Apache Webサーバーではなく、ライブWebサイトを参照していました。PHPコードの前後にすべてを削除する必要があると言う人もいましたが、それは役に立ちませんでした。また、ご覧のとおり、私は何も出力または返していませんが、これがこの問題の2番目に多い原因でした。3番目に提案されたのは、を使用することob_start()でしたが、それも役に立ちませんでした。

重要なのは、それはWebホスト上で完全に機能しますが、localhost(ローカルサーバー)を使用してライブに移行する前に変更をプレビューしているときは機能しません。

何かを変えないといけないと思いますが、なにかhttpd.confわかりません。

4

1 に答える 1

0

サーバーがHTTP200OK応答の送信を開始し、次のように同意した場合:

<!DOCTYPE html>
<html>
<head>
<title>MLP Today</title>...

respnseを3xxリダイレクトに変更することはできません。コンテンツを送信する前に、リダイレクトロジックを移動してみてください。

もう1つの方法は、次の方法で出力をできるだけ速く送信するのではなく、バッファリング出力をオンにすることです。 ob_start()

また、これはBOM問題になる可能性があります(ファイルの先頭でWindowsのメモ帳によって3バイトが追加されます)

于 2013-01-26T12:18:00.073 に答える