【问题标题】:Disable OPCache temporarily暂时禁用 OPCache
【发布时间】:2014-02-28 15:43:57
【问题描述】:

我最近迁移到 PHP 5.4 并安装了 OPCache,它非常强大!

如何暂时禁用缓存?

我试过了:

 ini_set('opcache.enable', 0);

但是没有效果。

谢谢

【问题讨论】:

    标签: php opcache


    【解决方案1】:

    opcache.enablePHP_INI_ALL 这意味着 ini_set() 确实 工作,但仅适用于当前请求,为当前请求中编译的其余脚本禁用 OPcache 缓存. (您不能强制启用)。对于其他请求,它会恢复为系统默认值。到这个阶段,请求脚本已经被缓存了,除非你在 auto_prepend_file 脚本中执行 ini_set。

    系统默认值 (PHP_INI_SYSTEM) 作为 PHP 系统启动的一部分被锁定,无法重新读取。因此,以 Apache 为例,您需要重新启动 Apache 才能更改/重新加载这些内容。

    .htaccess php_flag 指令仅适用于您运行 mod_php 或等效项的情况。它们和.user.ini 文件是 PHP_INI_PERDIR,在请求激活时也会被锁存。

    现在到我认为您可能会问的问题。如果您有开发系统,那么最简单的方法是在适当的 INI 文件中设置 opcache.enable=0 并重新启动您的网络服务器。将其设置回=1 并在完成后重新启动。

    还要考虑(在开发环境中)设置opcache.validate_timestamps=onopcache.revalidate_freq=0。这将使 OPcache 保持启用状态,但脚本将在每个编译请求上进行统计,以查看它们是否已更改。这在开发时可以两全其美。

    还阅读了opcache.blacklist_filename 指令。这允许您指定一个排除文件,因此如果它包含 /var/www/test,并且 Web 服务 docroot 是 /var/www,则不会缓存 /var/www/test* 层次结构中的 任何 脚本。

    【讨论】:

    • 有没有办法将 web_path 列入黑名单,而不是文件名?例如,在 Laravel 中,整个应用程序只有一个“引导”PHP 文件。
    • @pilat 否。黑名单基于所需或自动加载的任何文件的完全解析文件名,而不是符号文件名。由于在 CMS 或 wiki 等复杂应用程序的情况下,URI 通常会加载大约 100 个模块/文件,因此使用“网络路径”没有意义。
    • 如果我做对了,您也只能在 .user.ini 文件中禁用 - 不能启用。
    【解决方案2】:

    在我看来,因为我不是专家,所以 Jul 给出了最好的答案。该问题包括“临时”一词,因此更改配置文件我认为...不是最佳答案,因为您需要重新配置,运行所需的内容并再次重新配置以使其正常工作。

    不流畅。

    有了 Jul 的回答,您可以通过禁用 opcache 来修改代码以执行某些操作,并在同一代码中返回正常情况(尽管我们必须看看如何从代码中重新启用 opcache)

    例如,在 Prestashop 中,如果启用 opcache,则从管理界面清除“正常”缓存可能会出现问题,因此在这种情况下,您可以使用一种方法,以便在执行操作时禁用 opcache, “正常”缓存被清除,然后再次启用 opcache。

    【讨论】:

      【解决方案3】:

      我发现在特定 PHP 文件中禁用 opcache 的最佳方法是:opcache_invalidate(__FILE__, true);

      您也可以使用 PHP 重置所有缓存:opcache_reset();

      【讨论】:

        【解决方案4】:

        脚本运行后,再不缓存文件就太晚了。您需要在 PHP 之外进行设置:

        • 如果 PHP 作为 Apache 模块运行,请使用 .htaccess 文件:

          php_flag opcache.enable Off
          
        • 如果 PHP 作为 CGI/FastCGI 运行,请使用 .user.ini 文件:

          opcache.enable=0
          

        而且,无论如何,如果您有权访问它,您可以使用旧的系统范围内的 php.ini

        【讨论】:

        • 请注意:命令行 php 脚本还有一个 opcache.enable_cli 选项。
        • 我不得不将 php_flag 更改为 php_value (Ubuntu)
        • @dev101 很奇怪,因为它显然是documented as boolean :-?
        • 嗯,这很奇怪,我第一次检查它的缓存仍然处于活动状态,现在它正在工作。可能是我打错了旁边的书签。
        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        相关资源
        最近更新 更多