4

機能に問題がありheader()ます。それは機能し、同時に機能しません。

マニュアルには次のように書かれています。

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。

そうしないと、エラーが発生します。

ただし、出力が送信されて機能header()した後は、html スクリプトまたは php コードのどこでも呼び出すことができます。header()

<?php
   echo "Output here";
   header("Location: http://stackoverflow.com");    // it works, it redirects to the site
   echo "And output here";
?>

どんなheader()作品でも。これheader("Some-Header: bar-foo")はヘッダーを設定できます:

<!DOCTYPE html>
<html>
   <body>

     … some script here…

    <?php
      print_r(headers_list());      // only one header: [0] => X-Powered-By: PHP/5.3.5
      header("Some-Header: bar-foo")
      print_r(headers_list());      // two headers: [0] => X-Powered-By: PHP/5.3.5
                                                    [2] => Some-Header: bar-foo
      var_dump(headers_sent($file, $line)); // bool(false)
      var_dump($file); // string(0) ""
      var_dump($line); // int(0)
    ?>

     … some script here…

   </body>
</html>

どうしてですか?何か設定がおかしくないですか?

4

3 に答える 3

3

これは、出力バッファリングがオンで、最初のフラッシュの前にヘッダーを書き込んだ場合に発生する可能性があります。http://www.php.net/manual/en/ref.outcontrol.php#ini.output-bufferingを参照してください。

于 2012-06-24T23:43:27.857 に答える
2

ルールの例外である output_buffering が有効になっている可能性php.iniあります。例えば

<?php

  ob_start();
  echo 'Foo';
  header('Location: http://www.google.com/');
  echo 'Bar';
  ob_end_flush();

(注:ob_startiniが有効になっている場合、スクリプトファイルでは必要ありませんが、output_bufferingコードを通じて前提を実証したかったのです)

于 2012-06-24T23:43:40.623 に答える
1

あなたのphp設定ファイルの問題だと思います.php.iniで、output_bufferingをオフ以外の値に設定している可能性があります。

于 2012-06-24T23:53:44.407 に答える