2017-03-11 22 views
2

PHPサーバーコード内でメールを呼び出し、HTMLページに戻ります。 は、次のサーバーのコードを書いた:PHP - HTML形式に戻る

<!DOCTYPE HTML> 
<HEAD> 
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</HEAD> 
<BODY> 
    <?php 
    $referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected 
    // do something or nothing 
    header("Location: $referer"); 
    ?> 
</BODY> 

このコードは、エラー「:ヘッダー情報を変更することはできません - すでに ...によって送られたヘッダ警告」を生産します。 なぜですか?

+0

http://stackoverflow.com/questions/8028957/how-to-fix-headers -既に-sent-error-in-phpは重複している可能性があります。 –

+0

ヘッダーは、その名前が示すとおり、内容の前に送信されます。しかし、あなたのPHPコードが実行されると、いくつかのコンテンツ( '<?php'の前のHTML)がブラウザに返されました。コンテンツを送信すると、最初にヘッダーがフラッシュされます。何らかのコンテンツが送信された後で、それ以上ヘッダーを送信することはできません。ファイルの上にPHPコードを移動します。あなたがリダイレクトを送り返すときに内容が必要ないので、 'header(" Location ... ")'の後ろに 'exit()'を入れてください。 ['header()'](http://php.net/manual/en/function.header.php)PHP関数の詳細を読む。 – axiac

答えて

1

header()任意の実際の出力は、
                 に送信され、あなたはすでにそれを使用する前にデータを送信する前に、呼び出される必要があります。

☼►Solution :  がそれを操作すると、あなたが好きな場所)(ヘッダを使用する能力を持っている...
は、PHPをするとき、あなたがコントロールできるようにする出力制御機能を有するようなHTMLとして出力(コード)は、送信するまでサーバーにバッファリングされます。その下に、以下の手順に従ってください。

を最後に

を初めにob_startob_endを使用してこれであなたのコードを置き換え✔:

<?php 
ob_start(); 
?> 
<!DOCTYPE HTML> 
<HEAD> 
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</HEAD> 
<BODY> 
<?php 
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected 
// do something or nothing 
header("Location: $referer"); 
?> 
</BODY> 

<?php 
ob_end_flush(); 
?> 

警告:作ります<?php ob_start();
の前に空白がないか、同じエラーが発生します。
.........................................

✘ - the 間違っ方法:

<?php 
ob_start(); ?> 

✔ - 方法:

<?php 
ob_start(); ?> 
1

あなたのPHPコードはHTMLの中間にあり、出力と見なされます。出力が生成されると、header()のような関数はもう動作しなくなり、エラーが返されます。解決策は、htmlの前にPHPコードをファイルの先頭に移動することです。通常の使用で

<?php 
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER'); // real referrer detected 
// do something or nothing 
header("Location: $referer"); 
?> 
<!DOCTYPE HTML> 
<HEAD> 
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</HEAD> 
<BODY> 
</BODY>