+
95
-

回答

可以通过php代码生成opcode字节码缓存。

那么什么是opcode字节码缓存呢?

php是一门解释型的语言,php解释器执行php脚本时会解析php脚本代码,将php脚本代码编译成一系列可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。然后执行这些操作码.

每次请求php文件都是这样,所以会消耗很多资源,Opcode cache 的目地是避免重复编译,减少 CPU 和内存及硬盘io开销。

在PHP 5.5.0及之后版本中,PHP已经将Opcache功能以拓展形式内嵌在发布版本中了,默认未开启Opcache加速,需要我们手动开启。对于之前的老版本,可以将Opcache作为PECL拓展库进行安装和配置.

[php]

engine = On

extension = php_opcache.dll
zend_extension = "/php/ext/php_opcache.dll"

[opcache]
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

重启apache服务,检查opcache是否开启成功

opcode配置讲解

;开关打开
opcache.enable=1

;开启CLI
opcache.enable_cli=1

;可用内存, 酌情而定, 单位为:Mb
opcache.memory_consumption=528

;Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
opcache.interned_strings_buffer=8

;对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值
opcache.max_accelerated_files=10000

;Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒
opcache.revalidate_freq=1

;打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高
opcache.fast_shutdown=1

;检查脚本时间戳是否有更新的周期,以秒为单位。设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新。
opcache.revalidate_freq=0

;如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。
;如果禁用此选项,你必须使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。
opcache.validate_timestamps=0

注意:如果设置opcache的opcache.validate_timestamps的指令设成0,那么zend opcache就察觉不到PHP脚本的变化,我们必须手动清空zend opcache缓存的字节码,让他发现php脚本的变动.这个设置适合在生产环境中设置成0,在开发环境下最好还是设置成1.
我们可以这样配置,启用自动重新验证缓存功能:

opcache.validate_timestamps=1
opcache.revalidate_freq=0

opcode的php函数

opcache_compile_file($php_file); #预生成opcode缓存

opcache_is_script_cached($php_file) #查看是否生成opcode缓存

opcache_invalidate($php_file, true) #清除单个缓存

opcache_reset(); #清空缓存

opcache_get_status(); #获取缓存的状态信息

opcache_get_configuration(); #获取缓存的配置信息


网友回复

我知道答案,我要回答