php处理include文件


php processing of include files

这个问题与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(),顾名思义,该方法只包含一次文件,并防止它被包含任何其他时间。