7

这个问题与 PHP 引擎的内部机制有关。我问它是为了理解文件包含过程。

比如说,您有一个包含在所有 php 脚本中的 20,000 行包含文件(类似于“functions_library.php”)。

每次您的一个 php 脚本加载该文件时,PHP 是否会检查/验证该包含文件在语法上是否正确?这个过程是否会在每次页面加载时一遍又一遍地发生?

或者...

PHP 会注意文件的最后修改日期吗?如果事实证明自上次检查以来没有对其进行任何更改,它是否只是忽略了检查?

4

3 回答 3

4

在默认安装中,每次都会解析该文件。但是,建议 PHP 的任何生产安装都具有字节码缓存,例如APC许多其他。使用字节码缓存时,第一次解析脚本并将解释后的代码存储在内存中。

不同的配置可能会改变检查文件修改的频率。在某些配置下,为了获得非常高的性能,可能需要手动刷新或重新启动 Web 服务器。

于 2012-07-26T14:14:20.803 回答
1

如果包含该文件,PHP每次都需要解释它。

于 2012-07-26T14:05:44.420 回答
0

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

于 2012-07-26T14:12:55.087 回答