-1

phpから301リダイレクトを作成しました。以下は、URLをリダイレクトするための私のコードです。

$current_url = substr($redirect_url, 11);
$sqlr = "SELECT old_url, new_url FROM cscart_301_redirection WHERE old_url  = '$current_url' ";
$resultr = mysql_query($sqlr);
$rowr = mysql_fetch_array($resultr);
$newurl = $rowr['new_url'];

if(mysql_num_rows($resultr)>0)
{
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: '.$host.$newurl);
} 

しかし、コードがライブサーバーで実行されると、

警告:ヘッダー情報を変更できません-このエラーによって既に送信されたヘッダー。どこが間違っているのか教えてください。

ありがとう

4

2 に答える 2

2

「ヘッダーはすでに送信されています」エラーは通常、PHPタグの開閉の前後に空白があることが原因で発生します(<?php . . . ?>

ob_start()if条件を記述して、次のコードを試してください。ob_start()メソッドは、出力バッファリングをオンにします。出力バッファリングがアクティブな間、スクリプトから出力は送信されません(ヘッダーを除く)。代わりに、出力は内部バッファーに格納されます。

$current_url = substr($redirect_url, 11);
$sqlr = "SELECT old_url, new_url FROM cscart_301_redirection WHERE old_url  = '$current_url' ";
$resultr = mysql_query($sqlr);
$rowr = mysql_fetch_array($resultr);
$newurl = $rowr['new_url'];

if(mysql_num_rows($resultr)>0)
{
    ob_start();
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: '.$host.$newurl);
    die;
} 
于 2012-08-31T07:48:04.223 に答える
-1
警告:ヘッダー情報を変更できません-ヘッダーは/ homeの(/home/ indianet/public_html/var/compiled/customer/ %% 45 ^ 45E ^ 45E480CD %% index.tpl.ph‌ p:9で開始された出力)によって既に送信されています/indianet/public_html/var/compiled/customer/%% FD ^ FD1 ^ FD153A02 %% top.tpl.php (32行目)

9行目では、スクリプト%%45^45E^45E480CD%%index.tpl.ph‌​p出力の行がクライアントに送信されてから、top.tpl.phpの32行目のヘッダー関数が実行されます。

httpの応答は次のようになります

header1
header2
header3
<--empty line-->
body
body
body

つまり、コンテンツがクライアントに送信されるとすぐに、phpはすべてのヘッダーと「空の行」を送信し、ヘッダーセクションに戻る方法はありません(応答ヘッダーと応答を区切る空の行を「元に戻す」ことはできません)クライアントに送信された後の本文)。いずれかの出力バッファリングが必要です。つまり、phpは応答の内容/本文を可能な限り抑制します。または、出力が生成される前にヘッダーの処理が行われるように、スクリプトを構造化することをお勧めします。リダイレクトの場合、「URLにコンテンツがありますが、ここにコンテンツがあります」と言ってもあまり意味がありません。

于 2012-08-31T07:48:53.877 に答える