首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP头重定向不起作用

PHP头重定向不起作用
EN

Stack Overflow用户
提问于 2009-01-08 10:55:06
回答 12查看 158.7K关注 0票数 28
代码语言:javascript
复制
include('header.php');

$name = $_POST['name'];
$score = $_POST['score'];
$dept = $_POST['dept'];

$MyDB->prep("INSERT INTO demo (`id`,`name`,`score`,`dept`, `date`) VALUES ('','$name','$score','$dept','$date')");
// Bind a value to our :id hook
// Produces: SELECT * FROM demo_table WHERE id = '23'
$MyDB->bind(':date', $date);
// Run the query
$MyDB->run();

header('Location:index.php');
    exit;

上面的代码一直给我一个重定向的问题。错误如下:

警告:无法修改标头信息-标头已由(在第16行的/Applications/MAMP/htdocs/testygubbins/OO/test/form.php中的/Applications/MAMP/htdocs/testygubbins/OO/test/header.php:15)处开始输出)发送。

我完全被这件事搞糊涂了。有人知道我应该怎么做才能让它工作吗?

编辑

header.php代码:

代码语言:javascript
复制
<?php
include('class.user.php');
include('class.Connection.php');

$date = date('Y-m-j');

?>
<html>
<head>
    <link rel=StyleSheet href="css/style.css" type="text/css" media=screen>
    <title>Test</title>
</head>
<body>
<div id="page">
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-01-08 11:01:59

仔细看看你的includes -也许你在一个结束的?>之后有一个空行?

这将导致一些文字空格作为输出发送,从而阻止您进行后续的头调用。

请注意,在包含文件中保留关闭?>是合法的,这是避免此问题的一种有用的习惯用法。

(编辑:查看您的标题,如果您想输出标题,则需要避免进行任何HTML输出,或者使用输出缓冲来捕获它)。

最后,正如PHP manual page for header所指出的,你应该真正使用完整的URL来重定向:

注意: HTTP/1.1要求绝对URI作为位置的参数:包括方案、主机名和绝对路径,但一些客户端接受相对URI。您通常可以使用$_SERVER‘’HTTP_HOST‘,$_SERVER’‘PHP_SELF’和dirname()自己从相对URI创建绝对URI:

票数 52
EN

Stack Overflow用户

发布于 2014-07-24 16:23:45

常见问题:

HTML1)在header(...);命令之前不应该有输出(例如,echo...或部分)。

2)在header(...);之后使用必须使用exit();

3)删除任何white-space(or 换行符)在<?php之前和?>标记之后。

4)检查php文件(以及其他.php文件,即included) -它们应该具有不带BOM编码UTF8 (而不仅仅是UTF-8)。因为默认的UTF8在文件的开头添加了不可见的字符(称为“UTF8”),所以你应该避免这样做!

5)使用301或302参考:

代码语言:javascript
复制
header("location: http://example.com",  true,  301 );  exit;

6) 打开错误报告。并指出错误。

7)如果上面的方法都没有帮助,使用JAVASCRIPT重定向(但是,不鼓励的方法),在自定义情况下可能是最后的机会...:

代码语言:javascript
复制
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;
票数 41
EN

Stack Overflow用户

发布于 2009-01-08 12:36:12

或者,不去考虑文件中某个地方的换行符或空格,可以缓冲输出。基本上,您在文件的最开始处调用ob_start(),在末尾调用ob_end_flush()。你可以在php.net ob-start function description上找到更多细节。

HTML:如果你使用缓冲,你可以在header()函数之前和之后输出-缓冲将忽略输出,只返回重定向头部。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/423860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档