PHP只能使用print_r,echo ...但不能单独使用

时间:2010-11-09 19:30:49

标签: php

我准备在nads中打击PHP。我有一个非常简单的操作,基本上是以自己的想法行事。

$this->user = $this->processToken($token);

if(!isset($this->user))
{
    $this->sendError(401);
}

w /一个有效的$令牌,它发送401,它不应该。但是这个:

$this->user = $this->processToken($token);

print_r($this->user);

if(!isset($this->user))
{
    $this->sendError(401);
}

毫无障碍地工作,除了我现在在屏幕上打印出一个阵列的事实。 $user是一个VO,将print_r(...)替换为echo $this->user->name,产生的结果相同(当然没有数组)。

修改 我应该补充一下,此后的操作返回一个递增的int。即使发送错误仍然增加(只要令牌是正确的)。所以它看起来像标题覆盖了最终结果。我原以为if会阻止标题写入吗?

更新 让事情变得怪异。如果我echo '';在同一个地方,它不会覆盖任何内容,并且错误仍会显示....再次,即使有良好的令牌。

2 个答案:

答案 0 :(得分:1)

如果您的sendError函数正在使用header发送401响应,那就是print_r正在更改结果的原因。

除非您启用了输出缓冲,否则在调用header之前发送的任何内容都将导致无法正确发送标头。这是因为标题和一些内容已经发送。

看起来无论如何你的标题都会被发送。在不查看其余代码的情况下,我无法确定,但print_recho或标头之前的任何其他类型的输出都会导致无法发送。

答案 1 :(得分:0)

print_r()取消了发送到浏览器的标头401 Unauthorized - 现在导致Headers already sent错误。