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 脚本的当前缓存状态。
下面描述的情况在大约 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 脚本的当前缓存状态。