0

非常感谢您甚至尝试提出解决方案。我在使用简单的 html 联系表格时遇到了问题。表单的方法设置为post,它的动作被发送到一个php文件。在表单发送到的 PHP 文件的末尾,有一个基本位置:重定向。

前任)header("Location: ../index.htm");

我将我的php.ini文件(Apache)配置为显示 php 错误。这就是我所看到的:

"Cannot modify header information - headers already sent by (output started at /home2/jwarddes/public_html/newTest/php/contact.php:2) in /home2/jwarddes/public_html/newTest/php/contact.php on line 20"

我的代码的第 20 行是我的header("location:...重定向。这似乎很好,但有些东西不断抛出错误。不用说,我被难住了。

有人可以试试他们的解决方案还是请我朝正确的方向轻推?

谢谢!

4

6 回答 6

2

我以前遇到过很多次这个问题,我在这里和那里看到过没有奏效的解决方案。在我的情况下,我把它归结为我(php包含)我的页面到一个索引中,该索引已经有一个标题属性。

我解决这个问题的方法是使用元方法,echo '<meta http-equiv="refresh" content="0;url=<URL>" />';

为了使您的页面看起来更好一点,您可以添加一到两秒的延迟并执行类似...

if ($ = $) { echo '(H1)Redirecting you to...(/H1)'; echo '<meta http-equiv="refresh" content="1;url=<URL>" />'; }

于 2012-10-11T07:38:04.543 回答
1

在此行之前不应有任何输出(回显)发送到浏览器:

header("位置:../index.htm");

发布您的代码,以便我找出确切的问题

于 2012-10-11T07:39:26.610 回答
1

来自手册: PHP header()

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。

于 2012-10-11T07:42:00.897 回答
1

这是一个普遍的问题。

确保您没有任何输出(即使是页面顶部的简单空格),因为这将在重定向之前发送标头。

可能的解决方案如下。

ob_start();

在您的页面顶部和

ob_end_flush(); 

在底部可能会解决您的问题。

另外,我在下面有这个特殊的功能,它可以做一个非常智能的重定向,试试看,让我知道 :)

/**
 * redirect()
 * 
 * Attempts to redirect the user to another page.
 * It tries to PHP header redirect, then JavaScript redirect, then try http redirect.
 * The following redirection method is only attempted if the previous redirection method attempt has failed  
 *  
 * @param mixed $url To be redirected to
 * @return nothing
 */
function redirect($url)
{
        if (!headers_sent())
        { //If headers not sent yet... then do php redirect
                header('Location: ' . $url);
                exit;
        } else
        { //If headers are sent... do java redirect... if java disabled, do html redirect.
                echo '<script type="text/javascript">';
                echo 'window.location.href="' . $url . '";';
                echo '</script>';
                echo '<noscript>';
                echo '<meta http-equiv="refresh" content="0;url=' . $url . '" />';
                echo '</noscript>';
                exit;
        }
} //==== End -- Redirect
于 2012-10-11T07:43:02.817 回答
0

在使用重定向之前,您无法将任何内容打印到浏览器。

无论如何,如果你真的想这样做,你可以做这样的伎俩:

echo "<script>location.href='...';</script>"

但是不建议这样做,因为用户看不到重定向之前打印的任何内容,那么为什么还要麻烦让它出来呢?

于 2012-10-11T07:37:01.567 回答
0

很可能是因为检查的开始或结束标签上有一个空格,我在处理时遇到了非常相似的问题......

于 2012-10-11T07:39:31.260 回答