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

时间:2016-01-17 12:14:26

标签: php browser runtime-error server-side php-include

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

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

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

a.php只会:

the_function();

b.php:

function the_function(){
  //code
}

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

如果我没记错,他们是Mac Safari,Mac Chrome和IE,但我甚至不知道这种行为是否在不同机器上的相同浏览器之间共享。

当然问题是通过切换包含的顺序来解决的。但我仍然想知道为什么会这样。

1 个答案:

答案 0 :(得分:1)

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

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

因此,它不依赖于浏览器,它取决于php脚本的当前缓存状态。