PHP 严重错误取决于...浏览器类型?

PHP fatal error depending on... browser type?

下面描述的情况在大约 50% 的 浏览器 中导致了 PHP 中的致命错误,而在其他浏览器中,代码 运行 正常。没有使用浏览器或任何客户端信息嗅探。据我所知,这应该是不可能的(PHP 运行 因客户端浏览器而异)。问题已经解决,但我还是想知道这是怎么发生的。

因此 index.php 包含 2 个文件:

include('a.php');
include('b.php');

a.php:

the_function();

b.php:

function the_function(){
  //code
}

50% 的浏览器的致命错误是 the_function 没有在 a.php 中定义,所以 a.php 在包含时立即执行。而在其他浏览器中,它似乎首先包含所有 php 文件,然后才开始执行。

如果我没记错的话,它们是 Mac Safari、Mac Chrome 和 IE,但我什至不知道不同机器上的相同浏览器是否共享此行为.

当然,通过切换包含的顺序解决了这个问题。但是我还是想明白为什么会这样。

不能 100% 确定,但据我所知,当 PHP 代码缓存在 APC 或其他字节码缓存中时,可能会发生这种行为。由于这个原因,有时代码已经被缓存并且函数在开始时可用。

在 PHP 中,如果您在同一个文件中,您可以在调用它之后定义该函数并且它可以工作。 示例:https://3v4l.org/m951d

所以,这不取决于浏览器,它取决于 php 脚本的当前缓存状态。