×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: PHP
Posted by: Dzung Tran
Added: Oct 22, 2014 9:37 AM
Views: 28
Clear cache shell script in magento
  1. <?php
  2. require_once 'abstract.php';
  3. class Shell_CleanCache extends Mage_Shell_Abstract
  4. {
  5.  
  6.     /**
  7.      * Cleans image cache using catalog/product_image model.
  8.      *
  9.      */
  10.     protected function cleanImageCache()
  11.     {
  12.         try {
  13.             echo "Cleaning image cache... ";
  14.             flush();
  15.             echo Mage::getModel('catalog/product_image')->clearCache();
  16.             echo "[OK]" . PHP_EOL . PHP_EOL;
  17.         } catch (Exception $e) {
  18.             die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
  19.         }
  20.     }
  21.  
  22.     /**
  23.      * Cleans magento data cache:
  24.      * - config,
  25.      * - layout,
  26.      * - block_html
  27.      * - translate,
  28.      * - collections,
  29.      * - eav,
  30.      * - config_api
  31.      */
  32.     protected function cleanDataCache()
  33.     {
  34.         try {
  35.             echo "Cleaning data cache:" . PHP_EOL;
  36.             flush();
  37.             $types = Mage::app()->getCacheInstance()->getTypes();
  38.             foreach ($types as $type => $data) {
  39.                 echo "Removing $type ... ";
  40.                 echo Mage::app()->getCacheInstance()->clean($data["tags"]) ? "[OK]" : "[ERROR]";
  41.                 echo PHP_EOL;
  42.             }
  43.             echo PHP_EOL;
  44.         } catch (Exception $e) {
  45.             die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
  46.         }
  47.     }
  48.  
  49.     protected function cleanMergedJSCSS()
  50.     {
  51.         try {
  52.             echo "Cleaning merged JS/CSS... ";
  53.             flush();
  54.             Mage::getModel('core/design_package')->cleanMergedJsCss();
  55.             Mage::dispatchEvent('clean_media_cache_after');
  56.             echo "[OK]" . PHP_EOL . PHP_EOL;
  57.         } catch (Exception $e) {
  58.             die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
  59.         }
  60.     }
  61.  
  62.     protected function cleanStoredCache()
  63.     {
  64.         try {
  65.             echo "Cleaning stored cache... ";
  66.             flush();
  67.             echo Mage::app()->getCacheInstance()->clean() ? "[OK]" : "[ERROR]";
  68.             echo PHP_EOL . PHP_EOL;
  69.         } catch (Exception $e) {
  70.             die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
  71.         }
  72.     }
  73.  
  74.     /**
  75.      * Does a rmdir on:
  76.      * - cache,
  77.      * - var/full_page_cache
  78.      * - var/minifycache
  79.      * - session dir
  80.      *
  81.      * @todo verify these functions
  82.      * @todo check var dir for any other cleanable subdirs.
  83.      */
  84.     protected function cleanFiles()
  85.     {
  86.         try {
  87.             echo "Cleaning files:" . PHP_EOL;
  88.             flush();
  89.             echo "Cache... ";
  90.             $this->_rrmdirContent(Mage::getBaseDir('cache'));
  91.             echo "[OK]" . PHP_EOL;
  92.             $full_page_dir = Mage::getBaseDir('var') . DIRECTORY_SEPARATOR . 'full_page_cache';
  93.             if(is_dir($full_page_dir)) {
  94.                 echo "Full page cache... ";
  95.                 $this->_rrmdirContent($full_page_dir);
  96.                 echo "[OK]" . PHP_EOL;
  97.             }
  98.             $minify_dir = Mage::getBaseDir('var') . DIRECTORY_SEPARATOR . 'minifycache';
  99.             if(is_dir($minify_dir)) {
  100.                 echo "Minify cache... ";
  101.                 $this->_rrmdirContent($minify_dir);
  102.                 echo "[OK]" . PHP_EOL;
  103.             }
  104.             echo "Session... ";
  105.             $this->_rrmdirContent(Mage::getBaseDir('session'));
  106.             echo "[OK]" . PHP_EOL;
  107.             echo PHP_EOL;
  108.         } catch (Exception $e) {
  109.             die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
  110.         }
  111.     }
  112.  
  113.     protected function cleanAccelerator()
  114.     {
  115.         try {
  116.             echo "Cleaning accelerator... ";
  117.             flush();
  118.             accelerator_reset();
  119.             echo "[OK]" . PHP_EOL . PHP_EOL;
  120.         } catch (Exception $e) {
  121.             die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
  122.         }
  123.     }
  124.  
  125.     protected function cleanAll()
  126.     {
  127.         $this->cleanImageCache();
  128.         $this->cleanDataCache();
  129.         $this->cleanStoredCache();
  130.         $this->cleanMergedJSCSS();
  131.         $this->cleanFiles();
  132.         if (function_exists('accelerator_reset')) {
  133.             $this->cleanAccelerator();
  134.         }
  135.     }
  136.  
  137.     /**
  138.      * Run script
  139.      *
  140.      */
  141.     public function run()
  142.     {
  143.         ini_set("display_errors", 1);
  144.         Mage::app('admin')->setUseSessionInUrl(false);
  145.         Mage::getConfig()->init();
  146.         $caches = array('image', 'data', 'stored', 'js_css', 'files');
  147.         if ($this->getArg('info')) {
  148.             echo 'Allowed caches: ' . PHP_EOL;
  149.             foreach ($caches as $cache) {
  150.                 echo "\t" . $cache . PHP_EOL;
  151.             }
  152.             die();
  153.         }
  154.  
  155.         if ($this->getArg('all')) {
  156.             $this->cleanAll();
  157.             die();
  158.         }
  159.  
  160.         if ($this->getArg('clean') && in_array($this->getArg('clean'), $caches)) {
  161.             switch ($this->getArg('clean')) {
  162.                 case 'image':
  163.                     $this->cleanImageCache();
  164.                     break;
  165.                 case 'data':
  166.                     $this->cleanDataCache();
  167.                     break;
  168.                 case 'stored':
  169.                     $this->cleanStoredCache();
  170.                     break;
  171.                 case 'js_css':
  172.                     $this->cleanMergedJSCSS();
  173.                     break;
  174.                 case 'files':
  175.                     $this->cleanFiles();
  176.                     break;
  177.             }
  178.         } else {
  179.             echo $this->usageHelp();
  180.         }
  181.     }
  182.  
  183.     /**
  184.      * Removes all elements contained in the given directory
  185.      * @param string $dir directory containing elements to remove
  186.      */
  187.     private function _rrmdirContent($dir)
  188.     {
  189.         $items = array_diff(scandir($dir), array('..', '.'));
  190.         foreach ($items as $item) {
  191.             $path = $dir . DIRECTORY_SEPARATOR . $item;
  192.             is_dir($path) ? $this->_rrmdir($path) : unlink($path);
  193.         }
  194.     }
  195.  
  196.     /**
  197.      * Removes a directory and all elements contained
  198.      * @param string $dir directory to remove
  199.      */
  200.     private function _rrmdir($dir)
  201.     {
  202.         if (is_dir($dir)) {
  203.             $objects = array_diff(scandir($dir), array('..', '.'));
  204.             foreach ($objects as $object) {
  205.                 $path = $dir . DIRECTORY_SEPARATOR . $object;
  206.                 is_dir($path) ? $this->_rrmdir($path) : unlink($path);
  207.             }
  208.             reset($objects);
  209.             rmdir($dir);
  210.         }
  211.     }
  212.  
  213.     /**
  214.      * Retrieve Usage Help Message
  215.      *
  216.      */
  217.     public function usageHelp()
  218.     {
  219.         return <<<USAGE
  220. Usage:  php cleanCache.php -- [options]
  221.  
  222.     --clean <cache>          Clean <cache>. Any of [image|data|stored|js_css|files]
  223.     all                      Clean all caches
  224.     info                     Show allowed caches
  225.     help                     This help
  226.  
  227.  
  228. USAGE;
  229.     }
  230.  
  231. }
  232.  
  233. $shell = new Shell_CleanCache();
  234. $shell->run();
  235.