【问题标题】:Redirect Function Php重定向功能PHP
【发布时间】:2011-08-18 20:05:03
【问题描述】:

我有一个函数,'redirect_to()' 写在 php 脚本上,它在成功更新到我的自定义 CMS 上的页面后调用。它在本地主机上运行良好,但是当我在我的实际活动域上尝试它时,我收到以下错误消息:

警告:无法修改标头信息 - 标头已由 /hermes/bosweb/web119/b1192/ipg.typaldosnetcom 中的(输出开始于 /hermes/bosweb/web119/b1192/ipg.typaldosnetcom/edit_listing.php:7)发送/includes/functions.php 第 20 行

redirect_to() 函数的代码如下:

function redirect_to ($location = NULL) {
    if ($location != NULL) {
        header("Location: {$location}");
        exit;
    }
}

我确保在输出任何 HTML 之前调用该函数,所以我不确定问题到底是什么。

我的问题:为什么会收到此错误消息?

【问题讨论】:

  • 也许<?php 标记之前有一个空格字符? /hermes/bosweb/web119/b1192/ipg.typaldosnetcom/edit_listing.php:7 包含什么?
  • edit_listing.php 的第 7 行是什么?
  • 这是一个空白问题......一个隐藏的空间。谢谢大家。
  • 此错误的另一个常见原因是使用字节顺序标记以 UTF-8 编码您的 源文件。如果您将文件编码为 UTF-8,请不要使用 BOM。

标签: php redirect http-headers


【解决方案1】:

这不是说谎。在到达这一点之前,您已经输出了一些东西。检查错误消息中提到的位置。

向我们展示所提到的每个文件的前 25 行。

【讨论】:

    【解决方案2】:

    在设置标题之前,您已经将输出发送到页面。首先你需要设置标题,然后才能输出。

    它甚至可以是一个空格。

    【讨论】:

    • UTF-8 BOM 也会出问题 :)
    【解决方案3】:

    这意味着已经在建议的行上输出了一些东西。尝试去那里看看它的作用。

    如果您自己找不到问题,请尝试将周围的代码粘贴到该位置以获得更好的说明。

    【讨论】:

      【解决方案4】:

      一个常见的原因是在包含的 php 文件后面有一行...

      简单的解决方案:从所有文件中删除结束 php 标记“?>”,因为它不需要..

      【讨论】:

        【解决方案5】:

        您可以通过删除任何关闭的 php-script 标记来测试在开始的 php-script 标记之前是否有一个字符。这样你就可以确定没有任何字符了(不需要)。

        【讨论】:

          【解决方案6】:

          使用输出缓冲:

          <?php 
          ob_start();
          
          // Test buffered output. 
          echo 'hello world'; 
          
          function redirect_to ($location = NULL) {
              if ($location != NULL) {
                  header('Location: ' . $location);
                  exit;
              }
          }
          
          // rest of php file here
          
          ob_end_flush();
          ?>
          

          文档:ob_start()ob_end_flush()

          【讨论】:

          • 这有什么帮助?缓冲函数定义什么都不做 - 错误只会在函数被调用并且函数的执行不会被缓冲时出现。
          • 假设输出发生在同一个文件上,这将起作用。看到// rest of php file here?这么快就投反对票了,啧啧。
          • 另外,我不是建议他缓冲函数,哈哈。想想吧,伙计。
          • 我同意@AlienWebguy。如果输出被缓冲,则在刷新缓冲区之前不会发送任何内容。如果这是 OP 的问题,这将解决在到达标头函数之前向客户端发送无关输出的问题。
          猜你喜欢
          • 2011-07-17
          • 1970-01-01
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多