PHP Conference Japan 2024

opcache_reset

(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL ZendOpcache >= 7.0.0)

opcache_reset重置操作码缓存的内容

描述

opcache_reset(): bool

此函数重置整个操作码缓存。调用 opcache_reset() 后,所有脚本在下一次被访问时都将被重新加载和重新解析。此函数仅重置内存缓存,不重置文件缓存。

参数

此函数没有参数。

返回值

如果操作码缓存已重置,则返回 true,如果操作码缓存已禁用或重启正在等待或进行中,则返回 false(请参阅 opcache_get_status())。

参见

添加注释

用户贡献的注释 4 条注释

56
fbgolly at gmail dot com
7 年前
我通过 CLI 清除缓存的解决方法是创建一个这样的 bash 脚本

#!/bin/bash
WEBDIR=/var/www/html/
RANDOM_NAME=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13)
echo "<?php opcache_reset(); ?>" > ${WEBDIR}${RANDOM_NAME}.php
curl https://127.0.0.1/${RANDOM_NAME}.php
rm ${WEBDIR}${RANDOM_NAME}.php

将其放在 /usr/local/bin/opcache-clear 中并使其可执行。
当我想清除缓存时,我只需在终端中运行“opcache-clear”。
47
匿名
9 年前
应该提到的是,通过 cli 执行 opcache_reset() 不会重置缓存。
因此 `php -r "var_dump(opcache_reset());"` 输出 "true" 但不会清除缓存。创建文件,通过 http 访问它 - 缓存就被清除了。
18
mike
8 年前
在某些(大多数?)系统中,PHP 的 CLI 具有与 Web 服务器或 PHP-FPM 进程使用的操作码缓存分开的缓存,这意味着在 CLI 中运行 opcache_reset() 不会重置 Web 服务器/fpm 操作码缓存,反之亦然。
4
Jan
4 年前
对于较长的 php 脚本:opcache_reset() 将获取一个锁,并且只有在脚本结束之后才会重置缓存,之后释放锁。

在单个脚本中调用 opcache_reset() 多次或任何其他 opcache 操作方法(例如 opcache_invalidate())之后调用 opcache_reset() 是没有用的:当 opcache_reset() 保持锁时,其他 opcache 方法将返回 false 并且它们对缓存没有任何影响。

尽管在该锁期间 opcache 操作方法没有效果,但只要 opcache.validate_timestamps 打开,opcache 就会根据 opcache.revalidate_freq 设置重新缓存脚本。

为了保持缓存最新,在修改单个 php 文件时使用 opcache_invalidate()。对于较大的更改,仅在 php 脚本结束时使用 opcache_reset()。
To Top