0

我正在尝试实现一个相当复杂的 3rd 方脚本,该脚本由几个相互连接的脚本组成。我已经在我的一个简单页面中包含了脚本的介绍。该脚本基本上根据逻辑将不同的内容写入字符串并在末尾回显字符串。有时它会回显一个表单,当您单击提交时,脚本会再次运行并基于新逻辑回显不同的文本,这些文本在我的页面内显示良好,它被包含在早期表单的位置。(我的页面中包含的第 3 方脚本也有自己的一些内容。)

我的问题是,有时我想让它重定向到我网站上的另一个页面,而不是让它回显它回显的一些东西,尤其是错误操作系统成功消息。

我已经用我的其他页面成功地做到了这一点。我在页面中包含一个脚本,该脚本编写了一些标题类型代码。基于调用脚本的用户的某些参数或操作,包含可能重定向到它自己或另一个页面。我唯一需要确保的是在重定向之前的包含过程中没有空格或文本。

然而,使用这个第三方脚本,虽然我认为我已经删除了所有的空白,但它并没有让我重定向。错误消息将我的页面中编写的代码包含在第 3 方脚本中。这是味精:

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

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

即使当前显示了一些文本,包含可以重定向以响应用户操作,我是对的吗?我应该只是检查第三方脚本的空白还是有一些我可能做错的结构性事情。

第 3 方脚本太大,无法放在这里,否则我会把它们放在这里。

谢谢。

4

3 回答 3

1

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

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

于 2012-07-18T14:36:44.567 回答
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();
于 2012-07-18T14:42:25.487 回答
0

你必须:

  1. ob_start()在文件的开头使用。
  2. ob_end_flush()在文件末尾使用。
于 2012-07-18T14:42:21.330 回答