这个问题与PHP引擎的内部机制有关。我问它是为了理解文件包含过程。
比方说,您得到了一个20000行的包含文件(类似于"functions_library.php"),它包含在所有php脚本中。
每次PHP脚本加载该文件时,PHP是否都会检查/验证该包含文件的语法是否正确?这个过程是否会在每次页面加载时一遍又一遍地发生?
或者。。。
PHP是否注意文件的最后修改日期?如果事实证明,自上次检查以来,它没有任何更改,它是否只是忽略了检查?
在默认安装中,每次都会解析该文件。然而,建议任何PHP的生产安装都有一个字节码缓存,例如APC或许多其他缓存。当使用字节码缓存时,第一次解析脚本,并将解释的代码存储在内存中。
不同的配置可能会更改检查文件修改的频率。在某些配置下,为了获得非常高的性能,可能需要手动刷新或重新启动web服务器。
如果包含该文件,PHP每次都需要解释。
PHP将在每次调用include()
时重新解释该文件。
这可以通过使用变量进行可视化测试。如果你有这样的东西:
otherScript.php:
<?php echo $foo; ?>
script.php:
<?php
$foo = 1;
include("otherScript.php");
$foo = 2;
include("otherScript.php");
?>
输出为:
12
这是一个糟糕的例子,但它应该表明PHP每次都需要包含文件的内容。假设PHP解释器不会为每个引用在内存中保留包含文件的副本,这是一个很好的猜测——每个应用程序可能有数百个包含。
然而,为了处理这个特定的理想,他们提供了一个方法include_once()
,顾名思义,该方法只包含一次文件,并防止它被包含任何其他时间。