如何使用PHP OPCache?
OPCache 用于提高PHP的性能,因为它存储预编译的字节码,因此无需在每次请求时加载和解析PHP脚本。
要求:有目的的使用需要诸如 Zend OPCache 之类的包。 zendOPCache 包包含PHP版本5.2 、 5.3和5.4 。该包用于满足操作码缓存的基本需求,从而实现优化。它将通过将预编译的字节码存储在共享内存中并消除从磁盘读取代码并编译以供将来访问的需要,从而提高PHP的性能。
Zend OPCache 包下载(直接下载链接):
Version | Release State | Link |
---|---|---|
7.0.1 | beta | Zend OPCacheV 7.0.1(83.1kB) |
7.0.2 | beta | Zend OPCache V 7.0.2(85.8kB) |
7.0.3 | beta | Zend OPCache V 7.0.3(92.0kB) |
7.0.4 | Stable | Zend OPCache V 7.0.4(94.1kB) |
7.0.5 | Stable | Zend OPCache V 7.0.5(94.8kB) |
启用 OPCache 扩展:
- 对于PHP版本 5.2、5.3 和 5.4
Due to Unavailability of a DLL(Dynamic Link Library) for PECL(PHP Extention and Application Repository) installation of the PECL extensions can be found here.
- 对于PHP 5.5.0 或更高版本
OPCache 只能编译为该版本下的共享扩展。首先,您需要使用 –enable-opcache 选项启用默认扩展的构建以使其可用。
之后,您可以使用 zend_extension 配置指令将 OP Cache 扩展引入PHP。在非 Windows 平台上使用 zend_extension=/full/path/to/opcache.so,在 Windows 上使用 zend_extension=C:\path\to\php_opcache.dll。To use OPCache with Xdebug, you need to load OPCache before Xdebug.
可以在此处找到有关新版本、下载、变更日志和其他信息的信息。
建议PHP.ini 设置:
- 在PHP.ini 文件中进行以下更改以优化性能。
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
OPcache 支持的配置指令的完整列表也可用。
OPCache 函数:
- opcache_compile_file()函数:该函数用于编译和缓存PHP脚本而不执行它。
句法:
bool opcache_compile_file( $file )
此函数编译一个PHP脚本并将其添加到操作码缓存中而不执行文件,这可用于在 Web 服务器重新启动后通过预缓存文件来填充缓存,这些文件将包含在以后的请求中。 $file用作参数。它是要编译的PHP脚本的路径。如果文件编译成功,上面的描述返回true否则返回false 。
错误/异常:对于任何错误(如果发生),例如,在这种情况下,如果生成了级别E_Warning的错误,则将其用作@作为前缀,因为我们将其作为前缀,可能会生成的错误消息可能会被忽略.
如果调用任何带有 set_error_handler() 的自定义错误处理程序函数,该函数又会调用 error_reporting(),该函数在前面带有 @ 时返回 0,这意味着该错误将被忽略,程序继续进行。
如果启用了 track_errors 功能,则表达式生成的任何错误消息都将保存在一个变量中,即 $php_errormsg,如果发生,它将覆盖任何进一步的错误。此外,如果您想使用它,可以尽早检查此变量。php
注意:这个运算符被资深 PHPers 称为 STFU运算符。
- opcache_get_configuration()函数:该函数用于获取缓存的配置信息。
句法:
array opcache_get_configuration( void )
此函数返回有关缓存实例的配置数据,还返回包括 ini 文件的信息数组。
错误/异常:如果opcache.restrict_api正在使用并且当前路径违反规则,则将引发 E_WARNING,不会返回任何状态信息。
- opcache_get_status()函数:该函数用于获取缓存的状态信息。
句法:
array opcache_get_status( $get_scripts = TRUE )
此函数返回有关缓存实例的状态信息, $get_scripts用作包含脚本特定状态信息的参数。
返回值:它返回一个信息数组,它可以选择包含脚本特定的状态信息,或者在失败时为 FALSE。
错误/异常:如果 opcache.restrict_api 正在使用并且当前路径违反规则,则将引发 E_WARNING,不会返回任何状态信息。
- opcache_invalidate()函数:该函数用于使缓存的脚本无效。
句法:
bool opcache_invalidate( $script, $force = FALSE )
此函数使操作码缓存中的特定脚本无效。如果 force 未设置或 FALSE,则仅当脚本的修改时间与缓存的操作码相比是新的时,脚本才会失效。 $script用作参数,表示无效脚本的路径。如果$force设置为 TRUE,则用作参数,无论是否需要失效,脚本都将失效。
返回值:如果脚本的操作码缓存无效或没有任何内容无效,则为 TRUE,如果操作码缓存已禁用,则为 FALSE。
- opcache_is_script_cached()函数:判断脚本是否缓存在 OPCache 中。
句法:
bool opcache_is_script_cached( $file )
此函数检查PHP脚本是否已缓存在 OPCache 中。这可以更容易地用于检测特定脚本的缓存“警告”。 $file用作参数描述正在检查的PHP脚本的路径。
返回:如果文件缓存在 OPCache 中,则返回 TRUE,否则返回 FALSE。
- opcache_reset()函数:该函数重置操作码缓存的内容。
句法:
bool opcache_reset( void )
此函数重置整个操作码缓存。调用 opcache_reset() 后,所有脚本将在下次命中时重新加载和重新解析。
返回值:如果操作码缓存被重置,它将返回 TRUE,如果操作码缓存被禁用,它将返回 FALSE。