Support » Plugin: W3 Total Cache » Fix for “Fatal error: require():”

  • If you are seeing errors such as:

    Try the following:

    Open up w3-total-cache-api.php, look for function w3tc_class_autoload( $class ).
    Erase the entire function (from line 120 to line 163) and replace it with the following:

    function w3tc_class_autoload( $class ) {
    	$base = null;
    
    	// some php pass classes with slash
    	if ( substr( $class, 0, 1 ) == "\\" )
    		$class = substr( $class, 1 );
    
    	if ( substr( $class, 0, 5 ) == 'HTTP_' || substr( $class, 0, 7 ) == 'Minify_' ) {
    		$base = W3TC_LIB_DIR . DIRECTORY_SEPARATOR . 'Minify' . DIRECTORY_SEPARATOR;
    	} elseif ( substr( $class, 0, 8 ) == 'Minify0_' ) {
    		$base = W3TC_LIB_DIR . DIRECTORY_SEPARATOR . 'Minify' . DIRECTORY_SEPARATOR;
    		$class = substr( $class, 8 );
    	} elseif ( substr( $class, 0, 7 ) == 'Google_' &&
    		( !defined( 'W3TC_GOOGLE_LIBRARY' ) || W3TC_GOOGLE_LIBRARY ) ) {
    		// Google library
    		$classPath = explode( '_', $class );
    		if ( count( $classPath ) > 3 ) {
    			// Maximum class file path depth in this project is 3.
    			$classPath = array_slice( $classPath, 0, 3 );
    		}
    
    		$filePath = W3TC_LIB_DIR . DIRECTORY_SEPARATOR .
    			implode( '/', $classPath ) . '.php';
    		if ( is_readable( $filePath ) ) {
                        require $filePath;
                    }
    		return;
    	}
    
    	if ( !is_null( $base ) ) {
    		$file = $base . strtr( $class, "\\_",
    			DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR ) . '.php';
    		if ( is_readable( $file ) ) {
    			require_once $file;
                    }
    	} else if ( substr( $class, 0, 5 ) == 'W3TC\\' ) {
    			$filename = W3TC_DIR . DIRECTORY_SEPARATOR . substr( $class, 5 ) . '.php';
    
                            if ( is_readable( $filename ) ) {
                                require $filename;
                            }
                            else {
                                if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
                                        debug_print_backtrace();
                                }
    			}
    			
                            return;
    		}
    }
    
Viewing 15 replies - 1 through 15 (of 18 total)
  • Hi.
    I get the following error when upgrading to version 0.9.5

    Warning require_once(/home/wp_b3es9v/adldata.org/wp-content/plugins/w3-total-cache/lib/W3/CacheFlush.php): failed to open stream: No such file or directory in /home/wp_b3es9v/adldata.org/wp-content/plugins/w3-total-cache/inc/define.php on line 1478

    Fatal error: require_once() Failded o pening required’/home/wp_b3es9v/adldata.org/wp-content/plugins/w3-total-cache/lib/W3/CacheFlush.php’ (include path=’.:/usr/local/lib/php:/usr/local/php5/lib/pear’) in /home/wp_b3es9v/adldata.org/wp-content/plugins/w3-total-cache/inc/define.php on line 1478

    I don’t know whether this is the same error the original poster received.

    Try the workaround posted above and see if that clears it.

    Wow, I’m also getting that fatal PHP error when trying to access WordPress after updating to 0.9.5.

    Your recommendation fixed this fatal error for me. This really should be addressed sooner than later since this is looking like a fatal plugin update if 0.9.5 is applied in its current state (which may be quite problematic for those with auto-update enabled for their plugins).

    That said, it seems that not all of my sites appear to be experiencing this issue. Odd.

    Thank you for the fix charles ~

    @destac, no problem πŸ™‚

    Thank you, it works!

    Perfect! Thanks @charleslf πŸ™‚

    • This reply was modified 5 months, 3 weeks ago by corytrevor.

    I, also, am getting errors and can’t see my stats in my GA dashboard anymore. I have no idea what I’m doing. Where would I find w3-total-cache-api.php to even make any changes? Sorry – newbie here.

    These are the errors I get when I try to go to my GA Dashboard settings page:

    Warning: require(/home/thekite4/public_html/wp-content/plugins/w3-total-cache/lib/Google/Service/Analytics.php): failed to open stream: No such file or directory in /home/thekite4/public_html/wp-content/plugins/w3-total-cache/w3-total-cache-api.php on line 143

    Fatal error: require(): Failed opening required ‘/home/thekite4/public_html/wp-content/plugins/w3-total-cache/lib/Google/Service/Analytics.php’ (include_path=’/home/thekite4/public_html/wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google:.:/usr/local/php56/pear’) in /home/thekite4/public_html/wp-content/plugins/w3-total-cache/w3-total-cache-api.php on line 143

    The file is in /wp-content/plugins/w3-total-cache/w3-total-cache-api.php

    Hello guys. Here’s a patch suggested by Alin Marcu (@deconf), author of GADWP. The patch is on the W3TC api file too. And it worked great to me! (You need to undo the fix posted by @charleslf)

    https://wordpress.org/support/topic/dashboard-widget-not-loading/#post-8229082

    • This reply was modified 5 months, 3 weeks ago by Marcelo Pedra.

    @kent-brockman, here’s a more thorough patch:

    
    function w3tc_class_autoload( $class ) {
    	$base = null;
    
    	// some php pass classes with slash
    	if ( substr( $class, 0, 1 ) == "\\" )
    		$class = substr( $class, 1 );
    
    	if ( substr( $class, 0, 5 ) == 'HTTP_' || substr( $class, 0, 7 ) == 'Minify_' ) {
    		$base = W3TC_LIB_DIR . DIRECTORY_SEPARATOR . 'Minify' . DIRECTORY_SEPARATOR;
    	} elseif ( substr( $class, 0, 8 ) == 'Minify0_' ) {
    		$base = W3TC_LIB_DIR . DIRECTORY_SEPARATOR . 'Minify' . DIRECTORY_SEPARATOR;
    		$class = substr( $class, 8 );
    	} elseif ( substr( $class, 0, 7 ) == 'Google_' &&
    		( !defined( 'W3TC_GOOGLE_LIBRARY' ) || W3TC_GOOGLE_LIBRARY ) ) {
    		// Google library
    		$classPath = explode( '_', $class );
    		if ( count( $classPath ) > 3 ) {
    			// Maximum class file path depth in this project is 3.
    			$classPath = array_slice( $classPath, 0, 3 );
    		}
    
    		$filePath = W3TC_LIB_DIR . DIRECTORY_SEPARATOR .
    			implode( '/', $classPath ) . '.php';
    		if ( file_exists( $filePath ) ) {
                        require $filePath;
                    }
    		return;
    	}
    
    	if ( !is_null( $base ) ) {
    		$file = $base . strtr( $class, "\\_",
    			DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR ) . '.php';
    		if ( file_exists( $file ) ) {
    			require_once $file;
                    }
    	} else if ( substr( $class, 0, 5 ) == 'W3TC\\' ) {
    			$filename = W3TC_DIR . DIRECTORY_SEPARATOR . substr( $class, 5 ) . '.php';
    
                            if ( file_exists( $filename ) ) {
                                require $filename;
                            }
                            else {
                                if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
                                        debug_print_backtrace();
                                }
    			}
    			
                            return;
    		}
    }
    

    basically just replace is_readable() with file_exists() in the original patch above.

    ok @charleslf, thanks for that.
    I hope @ftownes to apply this patch soon to W3TC πŸ™‚

    Looks like it’s patched now folks. The conflict with our Simple Calendar plugin is now resolved. Thanks @ftownes and team!

Viewing 15 replies - 1 through 15 (of 18 total)
  • You must be logged in to reply to this topic.