PHP重定向包含失败

时间:2012-07-18 14:34:11

标签: php redirect include

我正在尝试实现一个相当复杂的第三方脚本,该脚本由几个互连的脚本组成。我在一个简单的页面中包含了脚本的介绍。该脚本基本上根据逻辑将不同的东西写入字符串,并在结尾处回显字符串。有时它会回显表单,当您单击提交时,脚本会再次运行,并且基于新逻辑回显不同的文本,这些文本在我的页面中显示正常,包含在前面的表单中。 (我页面中包含的第三方脚本也包含一些自己的脚本。)

我的问题是,而不是让它回应它回应的一些事情,特别是错误的成功消息,有时我想让它重定向到我网站上的另一个页面。

我已经成功完成了我的其他页面。我在页面中包含一个脚本,用于编写一些头类型代码。基于回忆脚本的用户的某些参数或动作,包括可以重定向到其自身或另一页面。我唯一需要确保的是,在重定向之前,在包含过程中没有写入空格或文本。

然而,使用这个第三方脚本,虽然我认为我已经删除了所有空格,但它不会让我重定向。错误消息将站在我的页面中的代码包含在第三方脚本中。这是msg:

Warning: Cannot modify header information - headers already sent by (output started at /blah blah/stepone.php:5).  

第一步是我调用第三方脚本的简单页面。

我是否正确,即使当前显示某些文字,包含也可以重定向以响应用户操作?我应该只是检查第三方脚本的空白区域,还是有一些结构性的东西我可能做错了。

第三方脚本太大而无法放入此处,否则我会将它们放入。

感谢。

3 个答案:

答案 0 :(得分:1)

您需要的是ob_start()。这会缓冲输出并使您能够重定向,即使已经生成了输出。

另请参阅手册:http://php.net/manual/en/function.ob-start.php

答案 1 :(得分:1)

您提到的错误是因为标头已经发送到浏览器而发生的。当它再次尝试发送标头时,它会抛出一个错误。例如。

当你尝试做这样的事情时。

echo 'Hello World';
header('Location:some/location.php');

它可能会给你一个错误。因此,将重定向标题置于顶部始终是一件好事。但有时我们可能不希望这样。在这种情况下,您可以根据PHP的定义使用php的ob_start()打开输出缓冲

  

此功能将打开输出缓冲。输出缓冲是   而不是从脚本(除标题之外)发送的活动没有输出   输出存储在内部缓冲区

所以代替上面的示例代码,你可以使用类似的东西。

ob_start();
echo 'Hello World';
header('Location:some/location.php');
ob_end_flush();

答案 2 :(得分:0)

你必须:

  1. 在文件开头使用ob_start()
  2. 在文件末尾使用ob_end_flush()