标题('location:..')不起作用

时间:2010-08-23 05:05:45

标签: php apache http-headers header

(1)我正在将我的网站上传到远程Web服务器。

(2)网站的模板系统的设置方式是通过向index.php

发送网址编码的获取请求来形成所有网页

(3)加载初始页面有效。此页面通过评估其表单的值来确定下一页的位置。

(4)通过执行以下操作重定向到下一页:header('location: next_page')

(5)由于某种原因,不执行重定向。这是代码的样子:

$error = "";
if(isset($_POST['index_choice'])){
    $path_choice = isset($_POST['path']) ? $_POST['path'] : NULL;

    //echo $path_choice;
    //echo $page_inc;

    //nothing after this

    if($path_choice != null){

        if($form->is_connected()){

            //if($path_choice != "" || $path_choice != NULL){
                if($path_choice == "new"){

                    //header('location: /login.php');
                    //header('location: page/login');
                    header('location: /index.php?page=login');
                    exit();

                }
                else{

                    //header('location: /amend.php');
                    //header('location: page/amend');
                    header('location: /index.php?page=amend');
                    exit();
                }
            //}
            /**
            else{
                //destroy_session();
                $error = "You haven't selected a path. Please choose a path";
            }
             *
             */
        }
        else{
            //destroy_session();
            $error = "Problems with connecting to the database";
        }
    }else{
        //destroy_session();
        $error = "You have not indicated your choice";
    }

}

已解决

在代码中的其他地方?>之后有一个空格。在将以下命令放在代码顶部后,向我显示了这一点:

 error_reporting(E_ALL); ini_set('display_errors', 'On'); 

我要感谢所有试图提供帮助的人。

11 个答案:

答案 0 :(得分:16)

在发送标题(“位置”)之前,您似乎正在向浏览器回显文本。 在执行header()之前,您无法将内容发送到浏览器,因为echo将强制发送标头。注释这些行并查看它是否有效:

// echo $path_choice;
// echo $page_inc;

现在您的标题将被发送,您将被重定向。

答案 1 :(得分:13)

此代码添加到第一个代码:

<?php
ob_start();
?>

答案 2 :(得分:10)

您可以尝试重定向页面的javascript方式:

echo '<script>window.location = "'.$url.'";</script>';

答案 3 :(得分:3)

简单的PHP脚本是否适合以下工作?

<?php header('Location: /index.php?page=login'); ?>

您还必须确保实际使用$path_choice != null$form->is_connected() === true的代码路径,因为您的错误状态根本没有设置HTTP标头。

答案 4 :(得分:3)

我看到'destroy_session()',你在某个地方使用session_start()吗? 确保已发送NO内容(包括(会话)cookie)。

调试提示:设置error_reporting(E_ALL)(包括E_NOTICE)。 这将为您提供发送标题的行。

其他麻烦来源: - BOM - 包含文件之前的额外行

答案 5 :(得分:2)

我相信你需要检查你的if-stack并确保你进入每个循环。在每个if语句后面放置一个echo,以确保header()甚至被评估,你的循环比你期望的更早被剪切。

我的嫌疑人与null和$ path_choice!= null的使用有关。您是否尝试过is_null()或isset(),因为它们是专门设计用于检查变量是否为空。此外,!==操作数也可以在这种情况下工作,但我不确定是否有PHP。

答案 6 :(得分:2)

确保在php文件的<?php之前没有空格。如果您在<?php之前将文件编码类型更改为没有BOM和退格的UTS_8可能会有所帮助,并确保在文件中的任何内容之后没有session start()。应该就在之后

答案 7 :(得分:2)

试试吧。它会起作用

echo "<script type='text/javascript'>  window.location='index.php'; </script>";

而不是header("location: index.php");

答案 8 :(得分:1)

请确保在您的PHP代码之前没有空格,因为这很重要。

例如

<?php
some code this is the correct way
?>

--------------

<?php
some code this is the incorrect way the space above matters
?>

答案 9 :(得分:0)

好吧,如果您尝试了所有内容,此示例可以提供帮助(HTML / PHP):

<?php
    header("HTTP/1.0 404 Not Found");
    echo '<html>
            <head>
                <meta http-equiv="Refresh" content="0;url=http://www.url.com/index.php?code=404" />
            </head><body></body>
          </html>';
?>

答案 10 :(得分:0)

确保代码开头不应有空格

例如:

------whitespace----
<?php
.
.
.
. ?>

从第一行删除空格,使<?php必须位于第一行。