PHP APC在CLI模式(PHP APC in CLI mode)

2019-07-31 15:44发布

在命令行模式支持代码优化的运行时是否APC模块中的PHP? 例如,当我运行与文件php -f <file>将文件与APC执行或不之前优化? 假设APC被设置在配置文件加载。 此外,将脚本包含require_once进行了优化?

我知道的FastCGI模式下运行时优化工作正常,但我想知道,如果它也能在CLI。

apc_ *职能的工作,但我不知道有关的代码优化,这是这里后,我最主要的事情。

快乐的一天,马蒂奇

Answer 1:

的文档apc.enable_cli ,其控制是否APC应在CLI模式下被激活,说(引用):

主要用于测试和调试。 设置这使APC的PHP的CLI版本。 在正常情况下,这是不理想的创建,填充和销毁CLI的每个请求的APC缓存,但由于各种测试场景它能够使APC的PHP的CLI版本容易是非常有用的。

也许APC将操作码存储在内存中,但作为PHP可执行死在脚本的末尾,内存将会丢失:它不会脚本的执行之间持续存在。

因此操作码缓存在APC在CLI模式无用:它不会优化任何东西,因为PHP仍然要重新编译源每个PHP的可执行文件推出的时间来操作码。


事实上,APC不“优化”:执行PHP脚本的标准方式是这样的:

  • 读取该文件,并将其编译为操作码
  • 执行操作码

什么APC确实是在内存操作码存储,所以PHP脚本的执行就变成了:

  • 从存储器读取操作码(比编译源代码快得多)
  • 执行操作码

但是,这意味着你必须在内存的某个地方来存储操作码。 当运行PHP作为Apache模块,Apache是​​负责该内存段的持续性......当PHP是从CLI运行,没有什么可保留的内存段出现,所以它是在PHP的执行结束时销毁。
(我不知道它是怎么工作的,但它是类似的东西,至少在原则,即使我的话是不是很“技术” ^^)


或者,通过“优化”你的意思是不是码缓存一样,像配置指令apc.optimization ? 如果是这样,一个已经在APC 3.0.13删除



Answer 2:

嗯,有一个很好的理由,APC在CLI模式:单元测试:我想用尽量靠近后生产环境尽可能的环境做我的单元测试。 Zend框架有一个内部的缓存解决方案,它可以使用APC的可变Cache作为存储后端 - 我想用这个。



Answer 3:

如果您有基于环境的任何配置CLI代码,那么CLI代码会认为APC未启用。 例如,通过CLI产生的Symfony的DI容器时,它会告诉学说不要使用APC( 详细信息 )。

此外,我还没有测试,但有一个机会可以APC提高脚本的速度,包括了文件后pcntl_fork() 编辑:我问的问题关于APC与pcntl_fork()在这里 。

为了完整,对CLI(在Ubuntu)使APC:

echo 'apc.enable_cli = 1' > /etc/php5/cli/conf.d/enable-apc-cli.ini


Answer 4:

还有另外一个原因在CLI模式下使用它:一些脚本能够使用它作为一个高速缓存



文章来源: PHP APC in CLI mode