PHP是否从我使用opcache.opcache_compile_file()编译的文件中的include中执行文件?

时间:2019-06-22 01:40:44

标签: php opcache

[opcache.opcache_compile_file的PHP文档说:

  

此函数编译一个PHP脚本并将其添加到操作码缓存中   而不执行它。

如果我使用opcache_compile_file()编译文件,并且该文件包含其他文件(通过include()require()等),是否将执行其中包含的文件?还是仅将包含的文件编译并添加到操作缓存中?

编辑

从注释中提出的观点来看,包含的文件是否也添加到缓存中?还是opcache_compile_file()只是忽略包含(也许是最佳行为)?

1 个答案:

答案 0 :(得分:1)

有同样的问题,我用谷歌搜索并通过与stackoverflow伙伴一起打开xampp中的opcache获得了一些结果

所以我做了成功的愚蠢测试..

在php.ini中,我把这些

[opcache]
zend_extension=C:\xampp\php\ext\php_opcache.dll
opcache.enable=1
opcache.enable_cli=1

所以在htdocs \ stupidtest * index.php *中,我这样写:

<?php
opcache_compile_file('test.php');
test();

在我放入的 test.php

<?php
function test(){
    echo 'yep';
}

和另一个名为 the_answer_i_need.php

的文件
<?php
include('test.php');

print_r(opcache_is_script_cached('test.php'));  

test();
?>  

现在让我们玩游戏: 首先运行index.php http://localhost/test/index.php就我而言

然后我运行the_answer_i_need.php http://localhost/test/the_answer_i_need.php就我而言

我得到的结果是 1yep

1 means boolean true
'yep' means the function called are included from cache cause the previous result was **true**

*job done,we're good* 

我写了自2002年以来最快的php框架,这个技巧将使我能够将框架核心的某些部分切换为php之后的第二个预处理程序,并提高大约40%的速度。