代码之家  ›  专栏  ›  技术社区  ›  Daniel Bingham

php头(“位置:…”)在一台计算机上工作,而不是在另一台计算机上工作。

  •  0
  • Daniel Bingham  · 技术社区  · 15 年前

    所以当我部署了一些我认为已经测试过的代码时,我只是得到了一个令人讨厌的惊喜。似乎我的测试机和服务器之间一定有一些区别。完全相同的代码,具有头部重定向功能,在我的测试机器上工作得很好,而在服务器上则完全不工作。服务器上的重定向根本没有发生,结果留下一个空白页。

    头在脚本中间的某个地方被调用——但是还没有输出任何内容。直到脚本结束,它才输出任何内容。在其他一切都运行很久之后。它缓冲一切。

    服务器和测试机都在运行相同的PHP版本和相同的Apache版本。配置文件中是否存在允许一个而不是另一个发生头的内容?这里还有什么事情会导致失败吗?

    编辑:

    这是设置标题的行:

    public function setRedirect($url) {
        header('Location: '.$url);
    }
    

    下面的代码调用了:

    $url = new URL('index');
    $this->layout->setRedirect($url->toString());
    

    在哪里? URL::toString() 始终生成完全限定的域名,在这种情况下: http://domain/index.php?action=index

    我检查了PHP和Apache错误日志。Nada。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Artefacto    15 年前

    可能在 header 打电话。

    只有当你的ini设置 output-buffering 打开(或者如果显式启动输出缓冲,但在这种情况下,重定向应该在两台计算机中都有效)。

    您可以通过打开错误报告来确认这一点。

        2
  •  0
  •   Brad    15 年前

    使用fiddler或其他客户端工具检查头部。确定实际发送的是location:header。另外,有些浏览器在发送邮件头的顺序上很挑剔。

        3
  •  0
  •   Tim Fountain    15 年前

    我认为最有可能的解释是错误导致脚本退出服务器,并且显示错误被关闭(因此是空白屏幕)。我建议在服务器上长时间地检查Apache错误,看看PHP是否在其中放置了一些东西。

    否则,您可以使用浏览器扩展名,如livehttpheaders(对于firefox),来查看位置头是否被发送,或者尝试调试脚本,以查看它是否到达了头调用的最远位置。

        4
  •  0
  •   Shubham    15 年前

    我认为你的服务器在你的页面中放置了一些脚本来跟踪访问者,并为你提供流量统计信息或者类似的目的。理想情况下,您应该为此得到一个错误,但可能是您的服务器禁用了错误报告,这会给您一个空白页。

    我建议您运行带有语法错误的脚本,并检查您的服务器是否禁用了错误报告。