返回

OPCache 显示为禁用:故障排除的详细指南

php

OPCache 显示为禁用:故障排除指南

简介

OPCache 是一种 PHP 缓存扩展,可以提高 Web 应用程序的性能。然而,有时即使在 php.ini 中已启用 OPCache,它仍可能显示为禁用。本文将指导你解决此问题,并提供有效的解决方案。

问题症状

  • NextCloud 显示 OPCache 未启用消息
  • php.ini 中启用了 OPCache,但 php -i 显示 OPCache 已禁用
  • 检查 phpinfo() 输出或使用 php --ini 命令显示 OPCache 已禁用

解决方案

1. 检查 INI 文件优先级

确保 php.ini 文件中启用了 OPCache,并且该文件是 PHP 加载的最高优先级的文件。使用 phpinfo() 输出或 php --ini 命令检查 INI 文件优先级。

2. 重新启动 Web 服务器

更改 PHP 配置后,必须重新启动 Web 服务器才能使更改生效。对于 Apache,使用 sudo systemctl restart apache2 命令。

3. 检查 .htaccess 配置

某些托管环境使用 .htaccess 文件覆盖 php.ini 配置。检查是否存在任何 .htaccess 文件,确保它们不会覆盖 OPCache 设置。

4. 检查 Apache 模块

确保已加载 Apache OPCache 模块。在 php.ini 中查找以下行:

zend_extension=/usr/lib/php/20170718/opcache.so

确保路径正确且文件存在。

5. 禁用其他 PHP 缓存扩展

其他 PHP 缓存扩展,如 APC 或 Xcache,可能与 OPCache 冲突。禁用这些扩展并查看问题是否解决。

6. 检查 SELinux 设置

在启用 SELinux 的系统上,可能需要额外的配置以允许 OPCache 访问文件系统。使用 getenforce 命令检查 SELinux 状态。如果是“Enforcing”,请调整 SELinux 策略。

7. 查看 PHP 日志

在 /var/log/apache2/error.log 或相关日志文件中查找 PHP 错误。日志文件可能包含有关 OPCache 状态或错误的详细信息。

8. 联系托管服务提供商

如果以上解决方案无法解决问题,请联系托管服务提供商。他们可能针对你的托管环境有额外的建议。

额外提示

  • 确保 php.ini 中设置的 OPCache 内存大小足够。
  • 启用 OPCache 的 CLI 选项(opcache.enable_cli=1)以在命令行中使用 OPCache。
  • 使用明确路径调用 php 命令,如 “/usr/bin/php -i” 而不是 “php -i”。

常见问题解答

1. 为什么 OPCache 在 php.ini 中已启用却仍然显示为禁用?

可能是因为 INI 文件优先级较低,.htaccess 覆盖了设置,或者 Apache 模块未加载。

2. 禁用其他 PHP 缓存扩展后,为什么 OPCache 仍然禁用?

可能需要重新启动 Web 服务器或检查 SELinux 设置以确保 OPCache 有权访问文件系统。

3. 如何检查 OPCache 是否在命令行中启用?

使用 php --ini | grep opcache 命令或检查 PHP 的 CLI 设置。

4. 为什么需要确保 php.ini 中设置的 OPCache 内存大小足够?

过小的内存大小会限制 OPCache 的有效性并导致性能问题。

5. 如何在启用 SELinux 的系统上启用 OPCache?

参考 Red Hat 文档了解有关调整 SELinux 策略的更多信息,以允许 OPCache 访问文件系统。

结论

通过遵循这些步骤,你可以成功解决 OPCache 显示为禁用的问题。记住重新启动 Web 服务器和检查错误日志以确保解决问题。对于其他疑虑或需要支持,请随时联系托管服务提供商。