编程语言
首页 > 编程语言> > php – header()函数不能像手册中所写的那样工作.错误在哪里?

php – header()函数不能像手册中所写的那样工作.错误在哪里?

作者:互联网

我有header()函数的一些问题.它可以工作,但不能同时工作.

手册说:

Remember that header() must be called before any actual output is
sent, either by normal HTML tags, blank lines in a file, or from PHP.

否则会出错.

但是在输出发送和header()工作后,我可以在html脚本或php代码中的任何地方调用header():

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

任何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>

怎么会这样?设置有问题吗?

解决方法:

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

<?php

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

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

标签:php,http-headers,httpresponse,response-redirect
来源: https://codeday.me/bug/20190530/1182728.html