TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:

TOP云总站云服务器:https://topyun.vip/server/buy.html

TOP云C站云服务器:https://c.topyun.vip/cart

在云服务器上运行的 PHP 应用程序(如 WordPress、Laravel 等)通常会使用 OPcache 来提升性能。OPcache 是 PHP 的一个字节码缓存扩展,它通过将 PHP 脚本编译后的字节码存储在内存中,减少每次请求时重新编译脚本的开销,从而显著提高 PHP 的执行速度。

然而,在某些情况下(如更新了 PHP 文件、修改了代码或配置),你可能需要手动清理 OPcache 缓存,以确保服务器加载的是最新的代码版本,而不是旧的缓存版本。

以下是清理 PHP OPcache 缓存的几种方法,包括通过代码、命令行、PHP-FPM 重启以及自动化脚本等方式。


一、什么是 OPcache?

OPcache 是 PHP 的一个内置扩展(从 PHP 5.5 开始默认集成),用于缓存 PHP 脚本的编译结果(字节码)。它的主要作用包括:

  • 加速 PHP 执行:避免每次请求都重新编译 PHP 脚本。

  • 减少 CPU 和内存开销:通过缓存字节码,降低服务器资源消耗。

  • 提升应用程序性能:显著缩短页面加载时间,尤其是在高流量的网站中。

注意:OPcache 缓存的是 PHP 脚本的编译结果(字节码),而不是文件内容本身。因此,当你修改了 PHP 文件后,OPcache 可能仍然加载旧的缓存版本,导致代码更新未生效。


二、清理 OPcache 缓存的方法

方法一:通过 PHP 脚本清理 OPcache(推荐)

如果你可以通过浏览器访问服务器上的 PHP 文件,可以创建一个简单的 PHP 脚本来清理 OPcache。

步骤 1:创建清理脚本

在你的网站根目录(如 /var/www/html 或 WordPress 的根目录)创建一个 PHP 文件,例如 clear_opcache.php,并将以下代码粘贴到文件中:

<?php
if (function_exists('opcache_reset')) {
    echo "OPcache 缓存正在重置...<br>";
    if (opcache_reset()) {
        echo "OPcache 缓存已成功清理!";
    } else {
        echo "OPcache 缓存清理失败,请检查 OPcache 是否启用。";
    }
} else {
    echo "OPcache 扩展未启用,无法清理缓存。";
}
?>

步骤 2:通过浏览器访问脚本

在浏览器中访问该脚本的 URL,例如:

http://你的域名/clear_opcache.php

如果 OPcache 已成功清理,你会看到类似以下的输出:

OPcache 缓存正在重置...
OPcache 缓存已成功清理!

步骤 3:删除脚本(可选)

为了安全起见,清理完成后建议删除 clear_opcache.php 文件,避免其他人通过 URL 访问该脚本。

优点:简单易用,适合快速清理 OPcache。
缺点:需要通过浏览器访问脚本,可能不适用于无 Web 访问权限的环境。


方法二:通过命令行清理 OPcache

如果你有服务器的 SSH 访问权限,可以通过命令行直接清理 OPcache。需要注意的是,OPcache 的清理通常需要重启 PHP-FPM 或重新加载 PHP 进程,因为 OPcache 的缓存是存储在内存中的。

方法 2.1:重启 PHP-FPM

PHP-FPM(FastCGI Process Manager)是 PHP 的一种常用运行模式,OPcache 的缓存是与 PHP-FPM 进程绑定的。重启 PHP-FPM 会清空所有 OPcache 缓存。

步骤:
  1. 登录到你的云服务器(通过 SSH)。

  2. 根据你的服务器环境,执行以下命令之一:

  • 如果你使用的是 Ubuntu/Debian 系统:

sudo service php-fpm restart

或者(取决于 PHP 版本):

sudo service php8.1-fpm restart
  • 如果你使用的是 CentOS/RHEL 系统:

sudo systemctl restart php-fpm

或者(取决于 PHP 版本):

sudo systemctl restart php8.1-fpm
  1. 等待 PHP-FPM 重启完成。

注意:重启 PHP-FPM 会导致所有正在运行的 PHP 进程被终止,可能会短暂影响网站的访问速度。建议在低流量时段操作。

优点:彻底清理 OPcache 缓存。

缺点:会导致短暂的服务中断。


方法 2.2:重新加载 PHP-FPM(优雅重启)

如果你希望避免服务中断,可以使用“优雅重启”(Graceful Restart)的方式重新加载 PHP-FPM,而不会终止正在处理的请求。

步骤:
  1. 登录到你的云服务器(通过 SSH)。

  2. 根据你的服务器环境,执行以下命令之一:

  • 如果你使用的是 Ubuntu/Debian 系统:

sudo service php-fpm reload

或者(取决于 PHP 版本):

sudo service php8.1-fpm reload
  • 如果你使用的是 CentOS/RHEL 系统:

sudo systemctl reload php-fpm

或者(取决于 PHP 版本):

sudo systemctl reload php8.1-fpm
  1. 等待 PHP-FPM 重新加载完成。

注意:优雅重启会重新加载 PHP-FPM 配置并清空 OPcache,但不会中断正在处理的请求。

优点:避免服务中断,适合生产环境。

缺点:某些情况下可能无法完全清理 OPcache(取决于 PHP 版本和配置)。


方法三:通过代码调用 opcache_reset() 函数

如果你在 PHP 应用程序中有管理员权限(如 WordPress 的管理员),可以通过代码调用 opcache_reset() 函数来清理 OPcache。

示例代码:

在你的 PHP 文件中添加以下代码:

if (function_exists('opcache_reset')) {
    opcache_reset();
    echo "OPcache 缓存已成功清理!";
} else {
    echo "OPcache 扩展未启用,无法清理缓存。";
}

注意:此方法需要通过浏览器访问该 PHP 文件,或者将其集成到你的管理后台中(如 WordPress 插件或主题的某个功能)。


方法四:通过 WP-CLI 清理 OPcache(适用于 WordPress)

如果你使用的是 WordPress,并且服务器上安装了 WP-CLI(WordPress 命令行工具),可以通过 WP-CLI 执行自定义命令来清理 OPcache。

步骤:

  1. 登录到你的云服务器(通过 SSH)。

  2. 运行以下命令:

wp eval 'if (function_exists("opcache_reset")) { opcache_reset(); echo "OPcache 缓存已成功清理!"; } else { echo "OPcache 扩展未启用,无法清理缓存。"; }'

注意:此方法需要确保 WP-CLI 已正确安装并配置,且当前用户有权限执行 PHP 函数。


三、自动化清理 OPcache(高级)

在某些场景下(如代码部署后自动清理缓存),你可能需要自动化清理 OPcache 的过程。

方法 1:在部署脚本中加入 OPcache 清理命令

如果你使用自动化部署工具(如 Git、Jenkins、Deployer 等),可以在部署脚本中加入清理 OPcache 的命令。例如:

# 重启 PHP-FPM 清理 OPcache
sudo systemctl restart php-fpm

或者:

# 使用 WP-CLI 清理 OPcache(适用于 WordPress)
wp eval 'if (function_exists("opcache_reset")) { opcache_reset(); echo "OPcache 缓存已成功清理!"; } else { echo "OPcache 扩展未启用,无法清理缓存。"; }'

方法 2:通过插件清理 OPcache(适用于 WordPress)

如果你使用的是 WordPress,可以安装一些插件来管理和清理 OPcache,而无需手动操作。

推荐插件:

  1. WP Rocket

    • WP Rocket 是一款高级缓存插件,支持自动清理 OPcache。

    • 在插件设置中启用 OPcache 清理功能。

  2. LiteSpeed Cache

    • 如果你的服务器使用 LiteSpeed Web Server,LiteSpeed Cache 插件内置了对 OPcache 的支持。

    • 提供一键清理 OPcache 的功能。

  3. WP Super Cache

    • 虽然 WP Super Cache 主要用于生成静态 HTML 文件,但某些版本支持与 OPcache 配合使用。

优点:无需手动操作,适合非技术用户。
缺点:部分插件可能需要付费或依赖特定环境。


四、验证 OPcache 是否已清理

清理 OPcache 后,你可以通过以下方法验证缓存是否已被清空:

方法 1:通过 PHP 脚本检查

创建一个新的 PHP 文件(如 check_opcache.php),并添加以下代码:

<?php
if (function_exists('opcache_get_status')) {
    $status = opcache_get_status();
    if ($status['opcache_enabled']) {
        echo "OPcache 已启用,缓存信息如下:<br>";
        echo "缓存命中次数:" . $status['opcache_statistics']['hits'] . "<br>";
        echo "缓存未命中次数:" . $status['opcache_statistics']['misses'] . "<br>";
    } else {
        echo "OPcache 未启用。";
    }
} else {
    echo "OPcache 扩展未启用。";
}
?>

访问该脚本的 URL,查看 OPcache 的状态信息。如果缓存已被清理,hits 和 misses 的值可能会重置。


方法 2:通过命令行检查

登录到服务器,运行以下命令:

php -r 'if (function_exists("opcache_get_status")) { $status = opcache_get_status(); if ($status["opcache_enabled"]) { echo "OPcache 已启用,缓存信息如下:<br>"; echo "缓存命中次数:" . $status["opcache_statistics"]["hits"] . "<br>"; echo "缓存未命中次数:" . $status["opcache_statistics"]["misses"] . "<br>"; } else { echo "OPcache 未启用。"; } } else { echo "OPcache 扩展未启用。"; }'

注意:此命令会输出 OPcache 的状态信息,包括缓存是否启用、命中次数等。


五、总结

方法操作内容适用场景优点缺点
PHP 脚本清理创建 clear_opcache.php 文件调用 opcache_reset()有 Web 访问权限的环境简单易用需手动删除脚本
重启 PHP-FPM使用 systemctl 或 service 命令重启 PHP-FPM有 SSH 访问权限的环境彻底清理缓存可能导致短暂服务中断
优雅重启 PHP-FPM使用 reload 命令重新加载 PHP-FPM有 SSH 访问权限的生产环境避免服务中断可能无法完全清理缓存
WP-CLI 清理使用 WP-CLI 执行 opcache_reset()WordPress 环境适合自动化部署需安装 WP-CLI
插件清理使用缓存插件(如 WP Rocket)管理 OPcacheWordPress 环境无需手动操作可能需要付费插件

通过以上方法,你可以根据实际需求选择合适的 OPcache 清理方式,确保 PHP 应用程序始终运行在最新代码的基础上,同时保持最佳性能。


不容错过
Powered By TOPYUN 云产品资讯