代码之家  ›  专栏  ›  技术社区  ›  matpie

是否每次我包含同一个文件时都对其进行标记?

  •  2
  • matpie  · 技术社区  · 15 年前

    当我在一个运行时多次包含一个文件时,PHP是每次都将其标记化,还是保留一个缓存并在后续包含中运行编译后的代码?

    编辑: 更多细节:我没有使用外部缓存机制,我正在处理 相同的 同样的要求 .

    编辑2: 我试图包含的文件包含过程代码。我希望每次我离开的时候都能执行 include() 我只是好奇PHP是否出于速度原因在内部跟踪文件的标记化版本。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Bill Karwin    15 年前

    您应该使用PHP字节码缓存,例如APC。这将实现您想要的,在后续请求中重用PHP页面的编译版本。否则,PHP读取文件,在每次请求时标记并编译它。

        2
  •  1
  •   Ólafur Waage    15 年前

    看看 include_once() .

    如果您使用的是对象,也可以。看看 __autoload()

        3
  •  1
  •   VolkerK    15 年前

    默认情况下,每次(实际上)包含该文件时都会对其进行解析,即使在同一个php实例中也是如此。 但也有操作码缓存,例如。 apc

    <?php
    $i = 'include_test.php';
    file_put_contents($i, '<?php $x = 1;'); include $i; echo $x, ' ';
    file_put_contents($i, '<?php $x = 2;'); include $i; echo $x, ' '
    1 2
        4
  •  0
  •   Warren Krewenki    15 年前

    我只是写了一个基本的测试,很像沃克的。以下是我测试的内容:

    <?php
    file_put_contents('include.php','<?php echo $i . "<br />"; ?>');
    
    for($i = 0; $i<10; $i++){
        include('include.php');
        if($i == 5){
            file_put_contents('include.php','<?php echo $i+$i; echo "<br />"; ?>');
        }
    }
    
    ?>
    

    这产生了以下结果:

    0
    1
    2
    3
    4
    5
    12
    14
    16
    18
    

    include_once() 而不是标准的include()。希望有帮助!