【问题标题】:Device differences in PHP code producing different resultsPHP 代码中的设备差异产生不同的结果
【发布时间】:2015-07-02 22:52:09
【问题描述】:

我似乎每次运行 PHP 脚本都会得到不同的结果。

在 Windows 和 Chrome 上,脚本运行正常。在 Android Chrome 上,几乎就像脚本在导致错误之前运行了两次一样。如您所知,以下脚本用于确保请求只能发出一次(不能刷新等)。

在 Android 上,脚本运行,它在历史记录表中找到该行,该行应该从历史记录表中删除,但它也取消设置 $uploadId 导致脚本的其余部分不起作用。我看不到 if 语句的两边是如何运行的,除非 Android 上的 Chrome 浏览器出于性能或其他原因以某种方式运行该页面两次。

$historyQuery = "SELECT id FROM history WHERE userID = '".$_SESSION['userID']."'";
$historyQuery .= " AND historyCustom = '".$uploadId."' LIMIT 0, 1";
$checkHistory = mysqli_query($conn, $historyQuery);
if(mysqli_num_rows($checkHistory) == 0) {
    unset($uploadId);
} else {
    $historydetail = mysqli_fetch_array($checkHistory);
    mysqli_query($conn, "DELETE FROM history WHERE id = '".$historydetail['id']."'");
}

我现在已经在 Firefox for Android 下进行了测试,并且脚本运行正常,就像在 Windows Chrome 上一样。似乎这是 Android Chrome 独有的问题。

另外,我遇​​到了以下问题:https://stackoverflow.com/questions/29490740/does-chrome-for-android-automatically-compress-and-resize-images 似乎有类似的想法。

uploadId 在 unset 函数之前总是相同的。在未设置之后令人惊讶......它会被取消设置,但同时它会删除历史记录中的行。

【问题讨论】:

  • PHP 在服务器上执行,而不是在客户端上。因此,只要不涉及用户输入,几乎不可能根据设备执行不同的代码。你确定不是别的吗?
  • 是什么让您认为“在 Android Chrome 上,几乎就像脚本运行了两次一样”?
  • 我知道 PHP 是在服务器上执行的,因此如果它以某种方式运行两次,它只会给出我得到的结果。可能一旦进入后台。我已经关闭了 Chrome 的“数据保护程序”,它仍然给出了相同的结果。如果运行一次,它不可能运行 if 语句的两端。
  • 由于您有更多未共享的代码,让我们确保“第二页加载”确实发生。请在unset 命令之前和DELETE query 之后添加var_dump($uploadId);。你得到什么输出?
  • 我已经通过写入日志对此进行了测试。 uploadId 未设置,只有在之前删除历史记录行时才会发生这种情况。但这在页面加载之前不会被删除,并且不可能在同一加载中同时执行。

标签: php android google-chrome


【解决方案1】:

经过更多的研究和测试,在我看来(我可能会更正)Android 上的 Chrome 实际上可以在页面/请求显示页面之前预先加载 TWICE。

我发现的第一个是因为我的代码报告了请求脚本的不同 IP。这导致我的代码第一次失败(上面没有显示)。因此,如果您依赖脚本传递引荐来源 IP 并期望相同的 IP,这将导致“数据保护程序”打开时出现问题。

由于在不同设备上进行测试,我发现了第二个。就我而言,没有其他解释可以解释为什么代码会在另一个浏览器中返回任何不同的东西。正如 treegarden 所提到的,PHP 是服务器端的,所以浏览器的选择不应该影响它(即使在这个例子中它会影响它)。这给我带来了问题,由于安全性,我希望每个请求只运行一次脚本。我想我还必须在脚本中添加基于时间的检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多