web-dev-qa-db-ja.com

PHP header location-redirectが機能しない-なぜ?

これが私のファイルです。リダイレクトさせたいのですが、何も起こりません。何が起こっているかを確認するために、ヘッダー部分の前にエコーを追加しました。

エラーをスローすることも、index.phpにリダイレクトすることもありません。なにが問題ですか?出力バッファリングのオン/オフを切り替えましたが、何もリダイレクトしません。私に何ができる?

<?
error_reporting(E_ALL);
echo 'This is an error';

header("Location: login.php");
die();
?>

ありがとう

24
Industrial

実際のテスト環境にxDebugがインストールされていることを思い出し、グーグルで調べたところ、次のサイトを見つけました。 http://bugs.xdebug.org/view.php?id=532

そこで、最新バージョンのxDebugをダウンロードし、それに応じてphp.iniを新しいファイルに合わせて変更し、すべてが魅力的に機能するようにします。ヘッダーが送信されています-再実行が完了し、エラーが表示されます。

皆さん、助けてくれてありがとう!

1
Industrial

PHPドキュメント から:

header()は、実際の出力を送信する前に、通常のHTMLタグ、ファイル内の空白行、またはPHPから呼び出す必要があります。

そして、あなたの場合、header()の前にechoを使用しています。

44
Soufiane Hassou

短いタグが有効になっていますか?長いタグで試してください<?php

<?php
error_reporting(E_ALL);
header("Location: login.php");
die();
?>
1
jah

Display_errorsは有効になっていますか?
@ Gumbo-確かです!

まあ、それは確かではありません。なぜなら

何が起こっているかを確認するために、ヘッダー部分の前にエコーを追加しました。

display_errorsを有効にしている場合は、少なくとも_turned output buffering on_のときにエラーが表示されます。

そのため、まず、エラーメッセージが表示されることを確認してください。
未定義の変数を出力するだけで、

_error_reporting(E_ALL);
echo $undef9306;
_

あなたはそれを見ないだろうと確信しています。したがって、エラーの表示をオンにする必要があります

次に、サーバー側でheaders_sent()関数を使用して、ヘッダーが送信されたかどうかを確認できます。クライアント側でHTTPスニファーを使用して、何かが送信されたかどうかを確認します

そして、ファイルのBOMを確認します。

0