在文档中它说"主要用于调试",这将导致我认为"永远不要启用它,除非你有一个问题,需要做一些调试,"然而阅读几乎所有我能找到的关于它说启用它"opcache。Enable_cli 1",但为什么?我找不到任何关于这个问题的信息,所以如果有人知道,为什么我要启用它,如果文件基本上说保持在0?
对于PHP7和基于文件的缓存,现在为CLI启用opcache是有意义的。最好的方法是为CLI创建一个单独的php.ini,配置如下:
opcache.enable=1
opcache.enable_cli=1
opcache.file_cache="/tmp/php-file-cache"
opcache.file_cache_only=1
opcache.file_cache_consistency_checks=1
opcache.file_cache_only=1
确保禁用内存中的opcache,并且只使用文件,这是您想要的CLI。这将大大提高执行时间。
在FPM的php.ini中,您将希望有相同的设置,但使用opcache.file_cache_only=0
,因此在内存中使用opcache,文件缓存用作回退(这也使FPM更快,因为文件缓存减少了FPM重启或opcache重置时的预热时间,因为缓存的文件仍然存在)。
这样,CLI和FPM共享文件缓存,FPM将内存缓存作为第二主缓存以获得最大速度。PHP7的巨大改进!只要确保为opcache.file_cache
选择一个CLI和FPM都可以写入的目录,并且写入/读取的用户是相同的。
我不建议使用FPM的文件缓存(只使用它的CLI),因为没有办法重置缓存时设置opcache.validate_timestamps=0
-文件缓存阻止PHP-FPM识别任何变化,因为opcache_reset()
甚至一个完整的PHP-FPM重启不影响文件缓存,没有对等的文件缓存,所以改变的脚本永远不会被注意到。我在2016年3月报告了这是一个"bug"/"功能请求",但目前这并不是一个问题。注意如果你使用opcache.validate_timestamps=0
!
将其关闭。它主要用于调试OPcache本身的问题。
当从命令行运行PHP脚本时,opcache.enable_cli
选项启用PHP OPcache(使用php
命令)。但是,请记住,对于PHP 5。OPcache扩展通过将缓存的操作码存储在当前进程的内存中来工作。这只在运行PHP的进程要处理多个可以重用这些操作码的请求时才有用,比如在web服务器或FastCGI下。对于像PHP CLI这样运行一个"请求"并退出的进程,它只是浪费内存和时间。
根据PHP文档:
opcache.enable_cli boolean
为PHP的CLI版本启用操作码缓存。这在测试和调试时非常有用。
因此,除非你真的需要它,否则它应该被禁用。
当您有一些从命令行运行的长期迁移过程时,这可能是有用的(我个人通过运行一些广泛的迁移脚本测试了OPcache v7.0.3的CLI,我没有看到太多的性能改进)。