当前位置:  开发笔记 > 编程语言 > 正文

PHP标头重定向无法正常工作

如何解决《PHP标头重定向无法正常工作》经验,为你挑选了4个好方法。

仔细查看您的包含 - 也许您在关闭后有一个空行?>?

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

请注意,将关闭?>关闭包含文件是合法的,这是避免此问题的有用习惯用法.

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

最后,正如标题的PHP手册页指出的那样,您应该使用完整的URL来重定向:

注意:HTTP/1.1需要绝对URI作为Location的参数: 包括方案,主机名和绝对路径,但某些客户端接受相对URI.你通常可以使用$ _SERVER ['HTTP_HOST'],$ _SERVER ['PHP_SELF']和dirname()自己创建一个相对的URI:

它不仅仅是空白,而是导致错误的PHP块之后的整个HTML输出. (2认同)


T.Todua.. 28

常见问题:

1)命令echo...之前应该没有输出(即HTML部分)header(...);.

2)后,header(...);您必须使用exit();

3)删除任何空白(或换行之前)和后?>标记.

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

5)使用301或302参考:

header("location: http://example.com",  true,  301 );  exit;

6) 打开错误报告.并告诉错误.

7)如果以上都没有帮助,使用JAVASCRIPT重定向(但是,不鼓励的方法),可能是自定义案例中的最后一次机会......:

echo ""; exit;


ya23.. 8

或者,不要考虑文件中某处的换行符或空格,可以缓冲输出.基本上,您ob_start()在文件的最开始和ob_end_flush()最后调用.您可以在php.net ob-start功能描述中找到更多详细信息.

编辑: 如果使用缓冲,则可以在header()函数之前和之后输出HTML - 缓冲将忽略输出并仅返回重定向标头.



1> Paul Dixon..:

仔细查看您的包含 - 也许您在关闭后有一个空行?>?

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

请注意,将关闭?>关闭包含文件是合法的,这是避免此问题的有用习惯用法.

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

最后,正如标题的PHP手册页指出的那样,您应该使用完整的URL来重定向:

注意:HTTP/1.1需要绝对URI作为Location的参数: 包括方案,主机名和绝对路径,但某些客户端接受相对URI.你通常可以使用$ _SERVER ['HTTP_HOST'],$ _SERVER ['PHP_SELF']和dirname()自己创建一个相对的URI:


它不仅仅是空白,而是导致错误的PHP块之后的整个HTML输出.

2> T.Todua..:
常见问题:

1)命令echo...之前应该没有输出(即HTML部分)header(...);.

2)后,header(...);您必须使用exit();

3)删除任何空白(或换行之前)和后?>标记.

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

5)使用301或302参考:

header("location: http://example.com",  true,  301 );  exit;

6) 打开错误报告.并告诉错误.

7)如果以上都没有帮助,使用JAVASCRIPT重定向(但是,不鼓励的方法),可能是自定义案例中的最后一次机会......:

echo ""; exit;



3> ya23..:

或者,不要考虑文件中某处的换行符或空格,可以缓冲输出.基本上,您ob_start()在文件的最开始和ob_end_flush()最后调用.您可以在php.net ob-start功能描述中找到更多详细信息.

编辑: 如果使用缓冲,则可以在header()函数之前和之后输出HTML - 缓冲将忽略输出并仅返回重定向标头.



4> 小智..:

试试这个 :

**ob_start();**

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');

**ob_end_flush();**

    exit;

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有