标题已发送php - 处理遗留代码

时间:2014-12-12 17:47:13

标签: php redirect http-status-code-301 legacy-code

我已经看过这个问题了一千次,但我没看到的是对以下情况的回答。也许一个已经存在?

我确定的事情:

  • <?php?>周围有 NO 空格。
  • 没有回音陈述。
  • 没有印刷声明或任何其他“输出数据声明”

一个问题:

有问题的代码被“包含在”布局页面中“导致问题,也许有人可以告诉我如何解决这个问题?

所以继承代码,我没有写这个,我只是维护它。

$pagetitle = $_SERVER['REQUEST_URI'];
switch ($pagetitle) {
  ...
  case "/locations.php?l=8" :
    echo '<title>Mississauga West, Canada Winemaking - Vinbon</title>';
  break;
  ...
}

在那个案例陈述中,我试图做以下事情,知道由于echo语句它可能不起作用。

case "/locations.php?l=8" :
  ob_start();
  header("HTTP/1.1 301 Moved Permanently");
  header("Location: http://www.New-Website.com");
  die();
  ob_end_flush();
break;

现在我知道你们已经在一些答案中说过不要设置回音,因为这可能会导致问题。我认为ob_start()会清除它吗?

正如您所见,这必须是301重定向。

现在这段代码位于一个名为inc_meta.php的文件中,然后在名为layer01.php的文件中包含(不是必需的)。

运行时会导致以下“警告”:

Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/layer01.php on line 10

Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/layer01.php on line 11

现在第5行是我们<? include inc_meta.php ?>的地方,而layer01.php只不过是一个html文件。

第10行是<body>标记上方的空格,第11行是<body>标记。

我无法使用javascript,因为这必须是此位置的301重定向。有没有人有任何想法?

更新1

所以我尝试删除echo语句,因为我认为你们会说这是问题

我现在得到:

Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/inc_meta.php on line 51

Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/inc_meta.php on line 52

第51和52行是指:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.New-Website.com");

1 个答案:

答案 0 :(得分:1)

问题是在php / html文件中我不知道您必须将此文件包含在<DOCTYPE ... ><html>标记之上。一旦它被包括在那里,问题就固定了它自己。

所以在我的情况下:

<? include('inc_meta.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
....

而不是它是什么:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<? include('inc_meta.php'); ?>
...