PHP 函数在未调用时执行

PHP Function Executes when not called

我的简单脚本中发生了一些非常奇怪的事情。我有一个静态函数,它从服务器传递 $_GET 数据,运行在它上面有一个准备好的语句。

奇怪的是,这个函数在 if 语句内部调用,当 if 不满足时,SQL 准备语句仍然 运行 但函数中的其他任何东西都不会。

if(Filter::isBlacklisted($domain) || $domain == null || Filter::forbiddenCountry($country)) {

    $pid = ($_GET['pid'] == null) ? 0 : $_GET['pid'];
    $tid = ($_GET['tid'] == null) ? 0 : $_GET['tid'];

    //THIS WILL NOT ECHO OUT CAUSE THE IF IS NOT MET
    echo "here";

    //IF I UNCOMMENT THIS THE QUERY WILL NOT RUN
    //exit; 

    //THIS LINE IS THE CULPRIT, ITS QUERY RUNS ON EVERY PAGE REQUESTS
    Filter::blockedRequest($tid,$pid); 

}
else {

    echo "there";

    exit;

}

这里是对应的静态函数

 public static function blockedRequest($tid,$pid) {

    //The QUERY executes but this will not echo out
    echo "Hello";


    $date = date("Y-m-d");
    $mysqli = DB::dbConnect();

    if($stmt = $mysqli->prepare("INSERT INTO adserver.requests VALUES(?,1,1,?,?) ON DUPLICATE KEY UPDATE requests=requests+1, blocked=blocked+1")) {

      $stmt->bind_param("isi",$tid,$date,$pid);
      $stmt->execute();
      $stmt->close();
      $mysqli->close();

    }

    return;

  }

发送的每个请求都不符合第一个 if 语句,并转到回显 "there" 的 else 语句。所以 If 语句正常工作,但是 sql 语句仍然执行,但是静态函数中的 echo 不 运行 只有 sql 准备好的语句。

服务器没有 运行 memcache、opcache 或任何其他缓存解决方案,所以不是那样。

此外,这里的代码中的其他任何地方都没有调用查询。包含的 class 不会通过任何其他函数调用静态函数。

我很困惑,非常感谢任何建议。

您可能在没有意识到的情况下发送了多个请求。如果第一个请求进入 if 语句而第二个请求没有,它将覆盖第一个 echo 并产生您看到的结果。

要检查向服务器发送了哪些请求,请在重现该行为(刷新页面或提交表单)时查看访问日志。

典型LAMP:tail -f /var/log/apache/access.log

nginx: tail -f /var/log/nginx/access.log