%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/higroup/wp-content/plugins/devmonsta/core/helpers/
Upload File :
Create Path :
Current File : /var/www/html/higroup/wp-content/plugins/devmonsta/core/helpers/class-devm-cache.php

<?php
if ( !defined( 'DEVM' ) ) {
    die( 'Forbidden' );
}

class Devm_Cache {
    /**
     * The actual cache
     * @var array
     */
    protected static $cache = [];

    protected static $min_free_memory = 10485760;

    protected static $not_found_value;

    protected static $hits = 0;

    protected static $misses = 0;

    protected static $freed = 0;

    protected static function get_memory_limit() {
        $memory_limit = ini_get( 'memory_limit' );

        if ( $memory_limit === '-1' ) { // This happens in WP CLI
            return 256 * 1024 * 1024;
        }

        switch ( substr( $memory_limit, -1 ) ) {
        case 'M':return intval( $memory_limit ) * 1024 * 1024;
        case 'K':return intval( $memory_limit ) * 1024;
        case 'G':return intval( $memory_limit ) * 1024 * 1024 * 1024;
        default:return intval( $memory_limit ) * 1024 * 1024;
        }

    }

    protected static function memory_exceeded() {
        return memory_get_usage( false ) >= self::get_memory_limit() - self::$min_free_memory;

    }

    /**
     * @internal
     */
    public static function init_static() {
        self::$not_found_value = new Devm_Cache_Not_Found_Exception();

        foreach ( [
            'query'                     => true,
            'plugins_loaded'            => true,
            'wp_get_object_terms'       => true,
            'created_term'              => true,
            'wp_upgrade'                => true,
            'added_option'              => true,
            'updated_option'            => true,
            'deleted_option'            => true,
            'wp_after_admin_bar_render' => true,
            'http_response'             => true,
            'oembed_result'             => true,
            'customize_post_value_set'  => true,
            'customize_save_after'      => true,
            'customize_render_panel'    => true,
            'customize_render_control'  => true,
            'customize_render_section'  => true,
            'role_has_cap'              => true,
            'user_has_cap'              => true,
            'theme_page_templates'      => true,
            'pre_get_users'             => true,
            'request'                   => true,
            'send_headers'              => true,
            'updated_usermeta'          => true,
            'added_usermeta'            => true,
            'image_memory_limit'        => true,
            'upload_dir'                => true,
            'wp_head'                   => true,
            'wp_footer'                 => true,
            'wp'                        => true,
            'wp_init'                   => true,
            'devm_init'                 => true,
            'init'                      => true,
            'updated_postmeta'          => true,
            'deleted_postmeta'          => true,
            'setted_transient'          => true,
            'registered_post_type'      => true,
            'wp_count_posts'            => true,
            'wp_count_attachments'      => true,
            'after_delete_post'         => true,
            'post_updated'              => true,
            'wp_insert_post'            => true,
            'deleted_post'              => true,
            'clean_post_cache'          => true,
            'wp_restore_post_revision'  => true,
            'wp_delete_post_revision'   => true,
            'get_term'                  => true,
            'edited_term_taxonomies'    => true,
            'deleted_term_taxonomy'     => true,
            'edited_terms'              => true,
            'created_term'              => true,
            'clean_term_cache'          => true,
            'edited_term_taxonomy'      => true,
            'switch_theme'              => true,
            'wp_get_update_data'        => true,
            'clean_user_cache'          => true,
            'process_text_diff_html'    => true,
        ] as $hook => $tmp ) {
            add_filter( $hook, [ __CLASS__, 'free_memory' ], 1 );
        }

        foreach ( [
            'switch_blog'               => true,
            'upgrader_post_install'     => true,
            'upgrader_process_complete' => true,
            'switch_theme'              => true,
        ] as $hook => $tmp ) {
            add_filter( $hook, [ __CLASS__, 'clear' ], 1 );
        }

    }

    public static function is_enabled() {
        return true;
    }

    /**
     * @param mixed $dummy
     * @return mixed
     */
    public static function free_memory( $dummy = null ) {

        while ( self::memory_exceeded() && !empty( self::$cache ) ) {
            reset( self::$cache );

            $key = key( self::$cache );

            unset( self::$cache[$key] );
        }

        ++self::$freed;

        return $dummy;
    }

    /**
     * @param $keys
     * @param $value
     * @param $keys_delimiter
     */
    public static function set( $keys, $value, $keys_delimiter = '/' ) {

        if ( !self::is_enabled() ) {
            return;
        }

        self::free_memory();

        devm_array_key_set( $keys, $value, self::$cache, $keys_delimiter );

        self::free_memory();
    }

    /**
     * Unset key from cache
     * @param $keys
     * @param $keys_delimiter
     */
    public static function del( $keys, $keys_delimiter = '/' ) {
        devm_array_key_unset( $keys, self::$cache, $keys_delimiter );

        self::free_memory();
    }

    /**
     * @param $keys
     * @param $keys_delimiter
     * @return mixed
     * @throws Devm_Cache_Not_Found_Exception
     */
    public static function get( $keys, $keys_delimiter = '/' ) {
        $keys     = (string) $keys;
        $keys_arr = explode( $keys_delimiter, $keys );

        $key = $keys_arr;
        $key = array_shift( $key );

        if ( $key === '' || $key === null ) {
            trigger_error( 'First key must not be empty', E_USER_ERROR );
        }

        self::free_memory();

        $value = devm_array_key_get( $keys, self::$cache, self::$not_found_value, $keys_delimiter );

        self::free_memory();

        if ( $value === self::$not_found_value ) {
            ++self::$misses;

            throw new Devm_Cache_Not_Found_Exception();
        } else {
            ++self::$hits;

            return $value;
        }

    }

    /**
     * Empty the cache
     * @param mixed $dummy When method is used in add_filter()
     * @return mixed
     */
    public static function clear( $dummy = null ) {
        self::$cache = [];

        /**
         * This method is used in add_filter() so to not break anything return filter value
         */
        return $dummy;
    }

    /**
     * Debug information
     * <?php add_action('admin_footer', function(){ Devm_Cache::stats(); });
     * @since 2.4.17
     */
    public static function stats() {
        echo '<div style="z-index: 10000; position: relative; background: #fff; padding: 15px;">';
        echo '<p>';
        echo '<strong>Cache Hits:</strong> ' . esc_html( self::$hits ) . '<br />';
        echo '<strong>Cache Misses:</strong> ' . esc_html( self::$misses ) . '<br />';
        echo '<strong>Cache Freed:</strong> ' . esc_html( self::$freed ) . '<br />';
        echo '<strong>PHP Memory Peak Usage:</strong> ' . devm_human_bytes( memory_get_peak_usage( false ) ) . '<br />';
        echo '</p>';
        echo '<ul>';

        foreach ( self::$cache as $group => $cache ) {
            echo "<li><strong>Group:</strong>
				$group - ( " . number_format( strlen( serialize( $cache ) ) / KB_IN_BYTES, 2 ) . 'k )
				</li>';
        }

        echo '</ul>';
        echo '</div>';
    }

}

class Devm_Cache_Not_Found_Exception extends Exception {}

Devm_Cache::init_static();

Zerion Mini Shell 1.0