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