wp_opcache_invalidate

The timeline below displays how wordpress function wp_opcache_invalidate has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 5.5

/**
 * Attempts to clear the opcode cache for an individual PHP file.
 *
 * This function can be called safely without having to check the file extension
 * or availability of the OPcache extension.
 *
 * Whether or not invalidation is possible is cached to improve performance.
 *
 * @since 5.5.0
 *
 * @link https://www.php.net/manual/en/function.opcache-invalidate.php
 *
 * @param string $filepath Path to the file, including extension, for which the opcode cache is to be cleared.
 * @param bool   $force    Invalidate even if the modification time is not newer than the file in cache.
 *                         Default false.
 * @return bool True if opcache was invalidated for `$filepath`, or there was nothing to invalidate.
 *              False if opcache invalidation is not available, or is disabled via filter.
 */
function wp_opcache_invalidate($filepath, $force = false)
{
    static $can_invalidate = null;
    /*
     * Check to see if WordPress is able to run `opcache_invalidate()` or not, and cache the value.
     *
     * First, check to see if the function is available to call, then if the host has restricted
     * the ability to run the function to avoid a PHP warning.
     *
     * `opcache.restrict_api` can specify the path for files allowed to call `opcache_invalidate()`.
     *
     * If the host has this set, check whether the path in `opcache.restrict_api` matches
     * the beginning of the path of the origin file.
     *
     * `$_SERVER['SCRIPT_FILENAME']` approximates the origin file's path, but `realpath()`
     * is necessary because `SCRIPT_FILENAME` can be a relative path when run from CLI.
     *
     * For more details, see:
     * - https://www.php.net/manual/en/opcache.configuration.php
     * - https://www.php.net/manual/en/reserved.variables.server.php
     * - https://core.trac.wordpress.org/ticket/36455
     */
    if (null === $can_invalidate && function_exists('opcache_invalidate') && (!ini_get('opcache.restrict_api') || stripos(realpath($_SERVER['SCRIPT_FILENAME']), ini_get('opcache.restrict_api')) === 0)) {
        $can_invalidate = true;
    }
    // If invalidation is not available, return early.
    if (!$can_invalidate) {
        return false;
    }
    // Verify that file to be invalidated has a PHP extension.
    if ('.php' !== strtolower(substr($filepath, -4))) {
        return false;
    }
    /**
     * Filters whether to invalidate a file from the opcode cache.
     *
     * @since 5.5.0
     *
     * @param bool   $will_invalidate Whether WordPress will invalidate `$filepath`. Default true.
     * @param string $filepath        The path to the PHP file to invalidate.
     */
    if (apply_filters('wp_opcache_invalidate_file', true, $filepath)) {
        return opcache_invalidate($filepath, $force);
    }
    return false;
}