PHP致命错误取决于..浏览器类型



下面描述的情况在大约50%的浏览器中导致PHP出现致命错误,而在其他浏览器中代码正常运行。未使用浏览器或任何客户端信息嗅探。据我所知,这应该是不可能的(PHP 根据客户端浏览器以不同的方式运行)。问题已经解决,但我仍然想确切地了解这是如何发生的。

所以索引.php包括 2 个文件:

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

答.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 脚本的当前缓存状态。

相关内容

最新更新