标头位置不适用于实时服务器,但适用于 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的主要内容,如果未能解决你的问题,请参考以下文章
为 JWT 使用过滤器时,HttpServletRequest 为空,标头适用于邮递员,但不适用于 localhost
URLSession 配置的标头设置仅适用于 PUT,不适用于 POST