0

解決策を提示しようとしても、事前に感謝します。単純なhtmlお問い合わせフォームで問題が発生しています。フォームのメソッドがに設定されpost、そのアクションがphpファイルに送信されます。フォームが送信されるPHPファイルの最後に、基本的な場所:リダイレクトがあります。

元)header("Location: ../index.htm");

php.iniphpエラーを表示するようにファイル(Apache)を設定しました。これは私が示しているものです:

"Cannot modify header information - headers already sent by (output started at /home2/jwarddes/public_html/newTest/php/contact.php:2) in /home2/jwarddes/public_html/newTest/php/contact.php on line 20"

私のコードの20行目は私のheader("location:...リダイレクトです。これは問題ないように見えますが、何かがエラーをスローし続けます。言うまでもなく、私は困惑しています。

誰かが解決策を試してみるか、私を正しい方向に動かしてくれませんか?

ありがとう!

4

6 に答える 6

2

私はこれまで何度もこの問題を抱えてきましたが、うまくいかなかった解決策をあちこちで見てきました。私の場合、私は (php include ) 私のページを既にヘッダー属性を持つインデックスに入れているという事実にそれを置きました。

私がこれを回避した方法は、meta メソッドを使用することです。echo '<meta http-equiv="refresh" content="0;url=<URL>" />';

ページの見栄えを少し良くするために、1 ~ 2 秒の遅延を追加して、次のようにすることができます...

if ($ = $) { echo '(H1)Redirecting you to...(/H1)'; echo '<meta http-equiv="refresh" content="1;url=<URL>" />'; }

于 2012-10-11T07:38:04.543 に答える
1

次の行の前に、ブラウザーに出力 (エコー) を送信しないでください。

header("場所: ../index.htm");

正確な問題を見つけることができるように、コードを投稿してください

于 2012-10-11T07:39:26.610 に答える
1

マニュアルから: PHP header()

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。include 関数、require 関数、または別のファイル アクセス関数を含むコードを読み取り、header() が呼び出される前に出力されるスペースまたは空の行があることは、非常に一般的なエラーです。単一の PHP/HTML ファイルを使用する場合にも、同じ問題が存在します。

于 2012-10-11T07:42:00.897 に答える
1

それはよくある問題です。

リダイレクトの前にヘッダーが送信されるため、出力がないことを確認してください (ページ上部の単純なスペースであっても)。

考えられる解決策は次のとおりです。

ob_start();

あなたのページの上部に

ob_end_flush(); 

一番下にあなたの問題を解決するかもしれません。

また、私は非常にスマートなリダイレクトを行うこの特別な機能を以下に持っています。試してみて、私に知らせてください:)

/**
 * redirect()
 * 
 * Attempts to redirect the user to another page.
 * It tries to PHP header redirect, then JavaScript redirect, then try http redirect.
 * The following redirection method is only attempted if the previous redirection method attempt has failed  
 *  
 * @param mixed $url To be redirected to
 * @return nothing
 */
function redirect($url)
{
        if (!headers_sent())
        { //If headers not sent yet... then do php redirect
                header('Location: ' . $url);
                exit;
        } else
        { //If headers are sent... do java redirect... if java disabled, do html redirect.
                echo '<script type="text/javascript">';
                echo 'window.location.href="' . $url . '";';
                echo '</script>';
                echo '<noscript>';
                echo '<meta http-equiv="refresh" content="0;url=' . $url . '" />';
                echo '</noscript>';
                exit;
        }
} //==== End -- Redirect
于 2012-10-11T07:43:02.817 に答える
0

You can't have anything printed out to the browser before using the redirect.

Anyway if you really want to do that you can do such trick:

echo "<script>location.href='...';</script>"

But that's not recommended as whatever you print out before you redirect cannot be seen by the user so why bother letting it out?

于 2012-10-11T07:37:01.567 に答える
0

おそらく、チェックの開始タグまたは終了タグのスペースが原因で、作業中に非常によく似た問題が発生しました...

于 2012-10-11T07:39:31.260 に答える