【问题标题】:PHP error_log still work inside switch with breakPHP error_log 仍然可以在带中断的开关内工作
【发布时间】:2016-12-05 04:50:52
【问题描述】:

我以为我的代码中存在错误,但通过隔离问题,我发现了 switch case 中 error_log() 的一些“奇怪”行为。

我添加了一些 error_log 用于调试,但无论何时我通过 switch 运行,error_log 总是会被触发,即使调用是在有效案例之外进行的。

这是我的代码中让我发现这种奇怪之处的确切部分:

switch($LLTP->request()){

  case 'json':
    /* some code commented out for debug here */
    error_log('json');
    echo 'json';
    break;

  default:
    /* some code commented out for debug here */
    error_log('html');
    echo 'html';
    break;
}

请求方法简单明了,返回'json','html','ajax'等字符串。

 public function request(){
    return $this->requests;
  }

因此,如果开关是 html,则默认启动,我会得到预期的结果:

回显“html”(预期)

错误日志“html”(预期)

但是当我使用“json”开关运行它时,我在屏幕上和 error_log 中得到了预期的“json”,但我也得到了“html”错误条目(没有回显)。

回显“json”(预期)

错误日志“json”(预期)

errorlog 'html,referer:https://www.example.com/home.json'(意外)

这是正常行为吗?我第一次注意到它,如果我尝试用另一个示例代码重现“怪异”:

$vv='json';
switch($vv){
  case 'json':
    echo 'json';
    error_log('json');
    break;
  default:
    echo 'html';
    error_log('html');
    break;
}

我明白了,(在错误日志中)

[错误] json(预期)

[错误] json,引用者:http://www.example.com/home.json(意外为 这是日志中的第二个条目)

我迷路了,有些我不明白或预期的结果不是我预期的。

PS:我不在页面上输出错误,我只在日志中记录错误。如果这和它有什么关系o.O

【问题讨论】:

  • 很高兴知道人们为什么投反对票。如果你这样做,请解释一下。
  • 无法重现。错误日志中的时间戳是否相同?
  • 是的,除了有时它们相隔 1 秒。令我惊讶的是,在这种特定情况下,我的行为与平时完全不同。我什至隔离了用于调试的包含、方法和函数。一定是我事先编码的东西。我只是惊呆了,因为其他一切都按预期工作。如果我发现我会在这里发表我的结论
  • 另外,第一次出现只显示我传递的字符串。但是最后一个日志条目在字符串之后显示了引用者。请参阅上面引用的日志。
  • 你能在命令行重现它吗?

标签: php switch-statement error-log


【解决方案1】:

今天我发现了这背后的原因。

当我在测试时,我正在用我的浏览器欺骗一个 json 请求。但是每次我点击刷新时,我的浏览器也会发送对 favicon.ico 文件的请求。由于我没有为图像添加 mod_rewrite 规则,因此代码将其作为常规 html 请求处理,因此调用了开关的 html 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 2018-11-01
    • 2015-09-21
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多