<html>
<body>
<?php
error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);
if( $_SERVER['REQUEST_METHOD'] == 'POST') {
header('Location: https://www.google.com/', true, 302);
exit();
}
?>
<form method='post'>
<input type='submit' name='submit' value='Submit' /><br />
</form>
</body>
</html>
如果删除“html”和“body”标记,表单将按预期工作。其中任何一个的存在都会导致失败。这发生在一个托管网站上;但是我可以毫无问题地在另一台主机上运行它。
php.ini中是否有可能导致此行为的设置?
当代码使用“html”或“body”标记运行时,会显示以下错误: 警告:无法修改标头信息 - 已在/ webroot / m / o / montc001 / primary / www / test中发送的标头(在/webroot/m/o/montc001/primary/www/test.php:3处开始输出)。第7行的php
失败的网站也安装了Wordpress。 WP站点正在被新的实现取代。
答案 0 :(得分:0)
您的标题函数必须位于顶部并在打印出任何html之前调用。
来自php.net文档(http://php.net/manual/en/function.header.php):
请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。 使用include或require读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 调用header()之前输出的行。一样的问题 使用单个PHP / HTML文件时存在。
所以你的代码应该是这样的:
<?php
error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);
if( $_SERVER['REQUEST_METHOD'] == 'POST') {
header('Location: https://www.google.com/', true, 302);
exit();
}
?>
<html>
<body>
<form method='post'>
<input type='submit' name='submit' value='Submit' /><br />
</form>
</body>
</html>