标头位置不适用于实时服务器,但适用于 localhost

Posted

技术标签:

【中文标题】标头位置不适用于实时服务器,但适用于 localhost【英文标题】:Header Location dont work on live server but works on localhost 【发布时间】:2013-03-30 19:44:05 【问题描述】:

如果用户设置了下拉菜单的值,我有这段代码可以将用户重新定位到 index.php 在不相关的页面上设置它,请检查我的代码。

if(isset($_GET['d'])&&empty($_GET['d'])===false)
        $cur_page=$_SERVER['PHP_SELF'];
        $current_page = substr($cur_page,1);
        $possible_page = array('terms.php','contact.php','about.php');

        if(in_array($current_page,$possible_page))
               header('Location:/index.php?d='.$_GET['d'].'');
       exit();
    else
       echo $_GET['d'];
    

它在我的本地服务器上运行良好,但在实时服务器上却不行?

【问题讨论】:

您需要更好地解释“不起作用”的含义。您的标题中还需要一个空格,即:'Location: /index.php?d=' 如果标头已经发送,header() 不起作用。一旦将某些内容输出到页面,就会发生这种情况,即使是 PHP 标记之前的空格或字节顺序标记。 你试过header('Location: index.php?d='.$_GET['d'])吗? (不带斜线) @adeneo 好吧,这无法解释为什么它在本地工作但不能在现场工作。 在靠近脚本顶部的某处输入error_reporting(E_ALL);,因为您可能在某处遇到错误,并且可能是“第 X 行已发送标头”。 【参考方案1】:

在 php 脚本的最开始添加ob_start();。如果它包含另一个文件,那么最后不要使用?>。谢谢

【讨论】:

这应该是一个评论,然后如果他说“不”,那么你可以建议它作为答案:) 感谢 Jonast,这个社区的新手会慢慢学会使用它的 :) @jonast92 它不应该是评论。它有能力成为答案,因为ob_start()header 有影响。谁在评论中写答案并询问我是否将其作为答案发布? 所以鼓励或不鼓励这样回答? 不是。我们可能首先要问我们所有的反问题,弄清楚情况,然后提出我们的解决方案。目前你的答案在技术上不是一个答案,它是一个肯定答案不是一个确认的解决方案的问题【参考方案2】:

我总是使用这个小方法,在任何情况下都能完美运行。

public static function Redirect($sec, $file)

    if (!headers_sent())
    
        header( "refresh: $sec;url=$file" ); 
    
    elseif (headers_sent())
    
        echo '<noscript>';
        echo '<meta http-equiv="refresh" content="'.$sec.';url='.$file.'" />';
        echo '</noscript>';
    
    else
    
        echo '<script type="text/javascript">';
        echo 'window.location.href="'.$file.'";';
        echo '</script>';
    

在最后一种情况下,它肯定会重定向。

【讨论】:

以上是关于标头位置不适用于实时服务器,但适用于 localhost的主要内容,如果未能解决你的问题,请参考以下文章

代码适用于localhost但不适用于实时服务器

为 JWT 使用过滤器时,HttpServletRequest 为空,标头适用于邮递员,但不适用于 localhost

URLSession 配置的标头设置仅适用于 PUT,不适用于 POST

正在尝试在 Android 设备上检索位置...适用于模拟器,但不适用于真实设备

Phonegap - iOS 文件传输不适用于授权标头

我的服务适用于 android 7.1.1 但不适用于 android 9