4

我在功能上有一些问题header()。它可以工作,但不能同时工作。

手册说:

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。

否则会出错。

header()但是在发送输出并工作后,我可以在 html-script 或 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

php.ini很有可能启用了output_buffering,这是该规则的例外。例如

<?php

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

(注:ob_start如果启用了ini,脚本文件中不需要output_buffering,但想通过代码演示前提)

于 2012-06-24T23:43:40.623 回答
1

我认为您的 php 配置文件有问题,可能在您的 php.ini 中,您将 output_buffering 设置为非关闭值。

于 2012-06-24T23:53:44.407 回答