2015-08-17 17:00:26 -07:00
< ? php
/**
* @ file
* Rebuilds all Drupal caches even when Drupal itself does not work .
*
* Needs a token query argument which can be calculated using the
* scripts / rebuild_token_calculator . sh script .
*
* @ see drupal_rebuild ()
*/
use Drupal\Component\Utility\Crypt ;
use Drupal\Core\DrupalKernel ;
use Drupal\Core\Site\Settings ;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface ;
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpFoundation\Response ;
// Change the directory to the Drupal root.
chdir ( '..' );
2015-10-08 11:40:12 -07:00
$autoloader = require_once __DIR__ . '/../autoload.php' ;
2015-08-17 17:00:26 -07:00
require_once __DIR__ . '/includes/utility.inc' ;
$request = Request :: createFromGlobals ();
// Manually resemble early bootstrap of DrupalKernel::boot().
require_once __DIR__ . '/includes/bootstrap.inc' ;
DrupalKernel :: bootEnvironment ();
try {
Settings :: initialize ( dirname ( __DIR__ ), DrupalKernel :: findSitePath ( $request ), $autoloader );
}
catch ( HttpExceptionInterface $e ) {
$response = new Response ( '' , $e -> getStatusCode ());
$response -> prepare ( $request ) -> send ();
exit ;
}
if ( Settings :: get ( 'rebuild_access' , FALSE ) ||
2016-10-06 15:16:20 -07:00
( $request -> query -> get ( 'token' ) && $request -> query -> get ( 'timestamp' ) &&
(( REQUEST_TIME - $request -> query -> get ( 'timestamp' )) < 300 ) &&
Crypt :: hashEquals ( Crypt :: hmacBase64 ( $request -> query -> get ( 'timestamp' ), Settings :: get ( 'hash_salt' )), $request -> query -> get ( 'token' ))
2015-08-17 17:00:26 -07:00
)) {
2017-04-13 15:53:35 +01:00
// Clear user cache for all major platforms.
$user_caches = [
'apcu_clear_cache' ,
'wincache_ucache_clear' ,
'xcache_clear_cache' ,
];
array_map ( 'call_user_func' , array_filter ( $user_caches , 'is_callable' ));
2015-08-17 17:00:26 -07:00
drupal_rebuild ( $autoloader , $request );
drupal_set_message ( 'Cache rebuild complete.' );
}
$base_path = dirname ( dirname ( $request -> getBaseUrl ()));
header ( 'Location: ' . $base_path );