web-dev-qa-db-ja.com

PHPページディレクティブ

関数を実行した後にPHPはリダイレクト呼び出しを行うことができますか?私はそれが私がそれが同じルートフォルダにあるファイルにリダイレクトすることを望むその機能の完成時に作成しています。できますか?

 if {
      //i am using echo here
 }

 else if ($_SESSION['qnum'] > 10) { 
            session_destroy();
            echo "Some error occured.";
            //redirect to user.php
        }
138
amit

はい、あなたは ヘッダ 関数を使うでしょう。

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

それより下のコードが実行されないように、直後にexit()を呼び出すことは良い習慣です。

また、ドキュメントから:

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

これはheader()関数の直前で何もエコーしてはいけないことを意味します。また、このコードが他の出力よりも先に実行されることを確認する必要があります。

263
bkildow

フェイルセーフとしてJavaScriptを使用すると、ユーザーは確実にリダイレクトされます(ヘッダーが既に送信されている場合でも)。どうぞ:

// $url should be an absolute url
function redirect($url){
    if (headers_sent()){
      die('<script type="text/javascript">window.location=\''.$url.'\';</script‌​>');
    }else{
      header('Location: ' . $url);
      die();
    }    
}

相対パスを適切に処理する必要がある場合は、そのための関数を作成しました(ただし、これは質問の範囲外です)。

46
brianreavis

簡単な方法は使うことです:

  echo '<script>window.location.href = "the-target-page.php";</script>';
15
CrownFord
   $url='the/url/you/want/to/go';
   echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';

これは私にとってはうまくいきます。

11
header( "Location: http://www.domain.com/user.php" );

しかし、最初にエコーをしてからリダイレクトすることはできません。

7
code-zoop
<?php

    http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM);

?>
2
user3164291

nixxxで説明されているように、phpコードを追加する前にob_start()を追加すると、既に送信されたエラーが防止されます。

それは私のために働いた

以下のコードも機能します。しかし、それは最初にページをロードし、それから私がそれを使用するときにリダイレクトします。

echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
1
user2634873

このコードを使用して、 php にリダイレクトできます。

<?php
/* Redirect browser */
header("Location: http://example.com/");
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
0

はい。

基本的に、何も出力されない限り、ロケーションヘッダーを発行する前に、必要なことをすべて実行できます(セッションの終了、ユーザーのCookieの削除、Piの計算)。

0
John Parker

あなたがあなたのphpファイルのリダイレクトを必ずしも一番上にしないでインクルードしたい場合は、トップで出力バッファリングを有効にしてからページ内のどこからでもリダイレクトを呼び出すことができます。例

 <?php
 ob_start(); //first line
 ... do some work here
 ... do some more
 header("Location: http://www.yourwebsite.com/user.php"); 
 exit();
 ... do some work here
 ... do some more
0
nixxx

実際には、私はPHPベースのCMSのコードでこれを見つけました。

リダイレクト( '?module = blog'、0);

それは可能です。この場合、あなたは管理者レベルでログインしているので、害もファウルもありません(私はそう思います)。最初の部分はURL、そして2番目は?整数が何のためにあるのかについてのドキュメントはありませんが、それは時間か、それがフォームに添付されているのでデータかのどちらかと思います。

私も、イベントの後にページを更新したいと考えていましたが、これをより良い場所に配置するとうまくいきました。

0
llothcat

PHPのheader()関数はこれを行いますが、他のファイルの内容がブラウザに送信される前に必ず呼び出すようにしてください。そうしないとエラーが発生します。

ファイルの内容を既に送信している場合は、JavaScriptが代替手段です。

0
ServAce85

おそらくメッセージをセッション変数として設定し、メッセージを表示しているセッションを破棄する別のページにユーザーをリダイレクトします。

0
Leprosy