PHP 文件执行了两次,但只在 Firefox 中执行

Posted

技术标签:

【中文标题】PHP 文件执行了两次,但只在 Firefox 中执行【英文标题】:PHP files executed twice, but only in Firefox 【发布时间】:2018-09-01 09:21:56 【问题描述】:

这真的很奇怪。我有以下页面结构:

index.php

<?php
session_start();
include_once('src/functions.php');
logMe('index');
include_once(TEMPLATES_FOLDER . 'standard/header.php');
[...]
include_once(TEMPLATES_FOLDER . 'standard/footer.php');
?>

header.php

<?php logMe('header'); ?>

<!DOCTYPE html>
<html lang="en">
<head>

    [...]

    <?php if (isset($_SESSION['accountId'])) : ?>
        <script type="text/javascript">
            [...]
        </script>
    <?php endif; ?>

</head>
<body>

[...]

我希望得到 2 个日志行,一个来自 index.php,一个来自 header.php(因为 logMe() 函数)。

现在,如果我在 Firefox (61.0.2) 中运行该页面,我会得到 4 个日志。如果我在 Chrome (68.0.3440.106) 中运行它,我会得到 2 个日志。所以在 Firefox 中,它似乎执行了两次。

更奇怪的是,如果我删除 &lt;script&gt; 标签,问题似乎消失了,因为 Firefox 只记录了 2 行。但即使我放回一个空的&lt;script&gt; 标签,它也会记录 4 行!所以问题的关键似乎是这个&lt;script&gt;标签,但怎么可能呢??

此外,我在footer.php 中也有一个&lt;script&gt; 标签。然后我希望在这种行为之后获得 6 个日志行,但我总是只得到 4 个。只有当我同时删除它们(从页眉和页脚)我得到正确的行为(2 个日志)。

有人知道发生了什么吗?


更新

根据raina77ow 的要求,这是access.log 的区别:

Firefox 记录了 16 行,而 Chrome 记录了 15 行 Chrome 日志中没有的 Firefox 行: 127.0.0.1 - - [01/Sep/2018:11:47:49 +0200] "GET /favicon.ico HTTP/1.1" 404 209 127.0.0.1 - - [01/Sep/2018:11:47:49 +0200] “GET /src/lib/toastr/toastr.js.map HTTP/1.1”304 - 127.0.0.1 - - [01/Sep/2018:11:47:49 +0200] "GET /?pageId=0 HTTP/1.1" 200 4242 (此行重复两次,一次在开头日志,最后一次) 不在 Firefox 日志中的 Chrome 行: 127.0.0.1 - - [01/Sep/2018:11:48:40 +0200] "GET /src/lib/toastr/toastr.js.map HTTP/1.1" 200 25633 127.0.0.1 - - [01/Sep/2018:11:48:40 +0200] "GET /src/lib/bootstrap-3.3.7/css/bootstrap.min.css.map HTTP/1.1" 200 542194

所以 Firefox 有效地请求 ?pageId=0 两次。

【问题讨论】:

您能否检查 Firefox 开发人员工具或服务器日志中的网络面板,以查看请求的具体内容 - 路径等? @raina77ow 在 Chrome 和 Firefox 中我有相同数量的请求:25 @raina77ow 我已经添加了 access.log 详细信息 【参考方案1】:

好的,我的 Firefox 安装中似乎有些东西被破坏了。我尝试在安全模式下启动它,但问题没有出现。所以我对其进行了硬重置,现在问题不再出现了。

还是想不出问题和&lt;script&gt;标签之间有什么联系……

【讨论】:

可能是一些插件出了问题? @raina77ow 这是我检查的第一件事:我安装的唯一插件是防病毒软件(Trend Micro)。但无论如何它已经(并且已经)被禁用了。

以上是关于PHP 文件执行了两次,但只在 Firefox 中执行的主要内容,如果未能解决你的问题,请参考以下文章

在父 pom 中定义 Maven 插件,但只在子项目中调用插件

php mysqli_query 函数似乎运行了两次

当我只上传一次时,图像在表格中插入了两次

gwt中的远程服务执行两次

Flyway 没有正确清理数据库,执行了两次迁移文件

Express:为啥这个 GET 请求执行了两次?