Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP代码中产生不同结果的设备差异_Php_Android_Google Chrome - Fatal编程技术网

PHP代码中产生不同结果的设备差异

PHP代码中产生不同结果的设备差异,php,android,google-chrome,Php,Android,Google Chrome,每次运行PHP脚本时,我似乎都会得到不同的结果 在Windows和Chrome上,脚本按其应该的方式运行。在Android Chrome上,几乎就像脚本在导致错误之前运行了两次一样。正如您所知,下面的脚本用于确保请求只能发出一次(无刷新等) 在Android上,脚本运行时,它会在历史记录表中找到该行,该行会从历史记录表中删除,但它也会取消设置$uploadId,导致脚本的其余部分无法工作。我无法看到if语句的两边是如何运行的,除非Android上的Chrome浏览器出于性能或其他原因运行了两次页

每次运行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唯一的问题

另外,我遇到了以下问题:哪一个似乎有类似的想法


uploadId在unset函数之前总是相同的。在那次意外之后。。。它会被取消设置,但同时会删除历史记录中的行。

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

我发现的第一个原因是我的代码报告了请求脚本的不同IP。这导致我的代码第一次失败(上面未显示)。因此,如果您依赖于通过referer IP的脚本,并且希望使用相同的IP,那么在打开“数据保护程序”的情况下,这将导致问题


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

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