Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否每次我包含同一个文件时都对其进行标记?_Php_Parsing - Fatal编程技术网

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

Php 是否每次我包含同一个文件时都对其进行标记?,php,parsing,Php,Parsing,这个问题是关于PHP解析引擎的 当我在一个运行时多次包含一个文件时,PHP是每次都将其标记化,还是保留一个缓存并在后续包含中运行编译后的代码 编辑:更多详细信息:我没有使用外部缓存机制,我正在处理同一请求中多次包含的同一文件 编辑2:我试图包含的文件包含过程代码。我希望每次我include()it时都能执行它,我只是好奇PHP是否出于速度原因在内部跟踪文件的标记化版本。 它将再次包括它 如果您使用的是对象,也可以。查看默认情况下,每次(实际上)包含该文件时都会对其进行解析,即使在同一个php实例

这个问题是关于PHP解析引擎的

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

编辑:更多详细信息:我没有使用外部缓存机制,我正在处理同一请求中多次包含的同一文件

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


如果您使用的是对象,也可以。查看

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


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

我刚刚编写了一个基本测试,与VolkerK的测试非常相似。以下是我测试的内容:

<?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 />"; ?>');
    }
}

?>
所以,除非它基于文件的mtime进行缓存,否则它似乎会解析每个include。您可能希望使用而不是标准的include()。希望有帮助

1 2
<?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