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