使用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可以写入,且相同的用户进行写入/读取即可。
2017年更新
我不建议再将文件缓存与FPM一起使用(仅在CLI中使用它),因为当设置opcache.validate_timestamps=0
时,没有办法重置缓存 - 文件缓存会防止PHP-FPM识别任何更改,因为opcache_reset()
甚至完全重启PHP-FPM都不会影响文件缓存,也没有等效的文件缓存,因此更改后的脚本永远不会被注意到。我在2016年3月将此报告为“错误”/“功能请求”,但目前这并不被视为问题。只要小心使用opcache.validate_timestamps=0
!
opcache.file_cache_only=0
,在一台8GB RAM的服务器上,opcache.memory_consumption
的值应该是多少? - PKHunter不需要开启它。它主要用于调试 OPcache 本身的问题。
opcache.enable_cli
选项会在使用 php
命令行运行 PHP 脚本时启用 PHP OPcache。但是,要记住,对于 PHP 5.x,OPcache 扩展通过将缓存的操作码存储在当前进程的内存中来工作。这只有在运行 PHP 的过程将处理可以重复使用这些操作码的多个请求(例如 Web 服务器或 FastCGI)时才有用。对于像 PHP CLI 这样仅运行一个"请求"并退出的进程,它只会浪费内存和时间。
opcache.enable_cli布尔值
为CLI版本的PHP启用opcode缓存。这在测试和调试时非常有用。因此,除非确实需要,否则应禁用它。在命令行中运行一些长期迁移过程时,这可能很有用(个人测试了OPcache v7.0.3 CLI,通过运行一些大规模迁移脚本,并没有看到多少性能提升)。