php - Zend OPCache - opcache.enable_cli 1 还是 0?它有什么作用?

标签 php zend-cache opcache php-5.5

在文档中它说“主要用于调试”,这会让我认为“除非你有问题并且需要进行一些调试,否则永远不要启用它”,但是阅读我能找到的关于它的所有内容都说启用它是“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 的一大进步!只需确保为 CLI 和 FPM 都可以写入的 opcache.file_cache 选择一个目录,并且同一用户进行写入/读取。

2017 年更新

我不建议再将文件缓存与 FPM 一起使用(仅用于 CLI),因为在设置 opcache.validate_timestamps=0 时无法重置缓存 - 文件缓存防止 PHP-FPM 识别任何更改,因为 opcache_reset() 甚至完全重新启动 PHP-FPM 都不会影响文件缓存并且没有文件缓存的等效项,因此永远不会注意到更改的脚本.我在 2016 年 3 月将此报告为“bug”/“feature request”,但这目前不被视为问题。如果您使用 opcache.validate_timestamps=0,请当心!

关于php - Zend OPCache - opcache.enable_cli 1 还是 0?它有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25044817/

相关文章:

symfony - Symfony 的 OpCache

php - 获取sql中自增列的最大值

php - Zend Framework 缓存存放位置

php - opcache默认缓存目录在哪里?

php - 让 Zend Framework 2 Memcached 工作

zend-framework - Zend_Paginator 和缓存。如何读取已发送到缓存的数据

php - 与 Doctrine 相关的实体返回所有字段值 NULL

php - docker + xdebug + 原子 : Breakpoints won't fire

使用静态方法创建实例时的PHP垃圾回收

php - 特使 mkdir 问题