【问题标题】:header("Location: mypage.php") not working after upload to other serverheader(“位置:mypage.php”)上传到其他服务器后不起作用
【发布时间】:2012-12-21 23:31:04
【问题描述】:

在我的页面中,我使用标题位置在 twitter 登录中进行重定向。但它在我的服务器上运行良好。但是上传文件到其他服务器后就不行了

header("Location: login-twitter.php");

当尝试查看页面中的错误并使用以下代码时,我看到以下警告消息。

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

警告:无法修改标头信息 - 标头已由(输出 开始于 /vhosts/www/samplehosts/mysite.com/samplefolder/header.php:258) /vhosts/www/samplehosts/mysite.com/samplefolder/signin.php 在第 24 行

重定向不适用于我网站中的任何页面。任何人都可以帮我解决这个问题

signin.php

if (array_key_exists("login", $_GET)) {

    $oauth_provider = $_GET['oauth_provider'];

    if ($oauth_provider == 'twitter') {

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

        header("Location: login-twitter.php");

    }

}



<li class="twitter">
<a  class="twitter_login" href="?login&oauth_provider=twitter"  rel="nofollow">
<img src="images/twitter.png" width="206" height="33" >
</a>
</li>

但点击 twitter 按钮后,标题 URL 显示为

http://mysite.com/?login&oauth_provider=twitter

而不是重定向到 Twitter 登录页面。

【问题讨论】:

  • 警告说明了重定向之前发送的一些数据,即可能是空格;或者在重定向发生之前必须没有输出
  • 我无法理解该页面的警告内容。在 signin.php 第 24 行是“header("Location: login-twitter.php");"
  • @Rithu 第 258 行的文件 header.php 中有什么内容?这条线上的东西似乎正在输出一些东西。
  • @Rithu 太奇怪了...您是否有必要将那个文件 header.php之前 包含在您在此处发布的代码中?或者你可以在那之后添加它吗?
  • @Rithu 你是说第 258 行被评论了? PHP 没有办法告诉您输出从注释行开始。直接在服务器上检查该文件。也许你忘了上传更新的文件什么的。

标签: php twitter header


【解决方案1】:

通过使用输出缓冲区,您可以确保无论输出如何,您的标头始终被执行。只需在代码顶部执行以下操作:

<?php
ob_start();
// put any includes etc. here
// some other code
echo 'Sample output.';
header('Location: login-twitter.com');
// more code
ob_end_flush();
?>

在这种情况下,由于输出已被缓冲,即使在调用 header() 之前执行了 echo 语句,标头仍将执行。

【讨论】:

  • 别忘了最后ob_end_flush()
  • 对不起,我忘了以某种方式添加。感谢您指出这一点!
  • 我反对这种方法,因为我认为 PHP 脚本应该在向客户端呈现任何内容之前执行所有的处理逻辑。设置Location 标头意味着无论如何客户端都会忽略任何内容,所以我想不出任何真实的用例,在设置 Location 标头之前您会想要回显某些内容。
  • 我同意在任何输出之前执行检查是否需要 header() 调用所需的逻辑会是更好的做法,但这比搜索他的整个代码页面更简单并省略任何事先发生的输出。
【解决方案2】:

据我了解,您的问题是:

header("location:[XYX.PHP]") is not working.

它通常不起作用,因为页面上已经打印了一些输出。 请使用

ob_start();

在页面的开头。 这将启动输出缓冲。 并且重定向有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多