How to clean Magento cache?
I need a simple script 开发者_运维问答that will refresh every single element of the Magento cache. I'm running 1.3.2.3 and can't upgrade.
Example cron job script to refresh magento cache : ( the script was published in magento forum from amartinez )
Run via cron job
00 0 * * * root /var/www/html/magento/cron_refresh_cache.php >> /var/log/cron_refresh_cache.log
The php file :
#!/usr/bin/php
<?php
/**
* cron_refresh_cache.php
*
* @copyright copyright (c) 2009 toniyecla[at]gmail.com
* @license http://opensource.org/licenses/osl-3.0.php open software license (OSL 3.0)
*/
( !$_SERVER["HTTP_USER_AGENT"] ) or die ( "Nothing to do\n" ); // to run via local browser use ($_SERVER["SERVER_ADDR"] == $_SERVER["REMOTE_ADDR"])
require_once 'app/Mage.php';
umask( 0 );
Mage::app( "default" ); // if getting error change this line to Mage::app(Mage::app()->getStore());
$ver = Mage::getVersion();
$userModel = Mage::getModel( 'admin/user' );
$userModel -> setUserId( 0 );
Mage::getSingleton( 'admin/session' )->setUser( $userModel );
echo "Refreshing cache...\n";
Mage::app()->cleanCache();
$enable = array();
foreach ( Mage::helper( 'core' )->getCacheTypes() as $type => $label ) {
$enable[$type] = 1;
}
Mage::app()->saveUseCache( $enable );
refresh_cache(); // call refresh function
function refresh_cache()
{
$this -> notify( 'Refreshing cache' );
try {
Mage :: getSingleton( 'catalog/url' ) -> refreshRewrites();
$this -> notify( 'Catalog Rewrites was refreshed successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getSingleton( 'catalog/index' ) -> rebuild();
$this -> notify( 'Catalog Index was rebuilt successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
$flag = Mage :: getModel( 'catalogindex/catalog_index_flag' ) -> loadSelf();
if ( $flag -> getState() == Mage_CatalogIndex_Model_Catalog_Index_Flag :: STATE_RUNNING ) {
$kill = Mage :: getModel( 'catalogindex/catalog_index_kill_flag' ) -> loadSelf();
$kill -> setFlagData( $flag -> getFlagData() ) -> save();
}
$flag -> setState( Mage_CatalogIndex_Model_Catalog_Index_Flag :: STATE_QUEUED ) -> save();
Mage :: getSingleton( 'catalogindex/indexer' ) -> plainReindex();
$this -> notify( 'Layered Navigation Indices was refreshed successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getModel( 'catalog/product_image' ) -> clearCache();
$this -> notify( 'Image cache was cleared successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getSingleton( 'catalogsearch/fulltext' ) -> rebuildIndex();
$this -> notify( 'Search Index was rebuilded successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getSingleton( 'cataloginventory/stock_status' ) -> rebuild();
$this -> notify( 'CatalogInventory Stock Status was rebuilded successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getResourceModel( 'catalog/category_flat' ) -> rebuild();
$this -> notify( 'Flat Catalog Category was rebuilt successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getResourceModel( 'catalog/product_flat_indexer' ) -> rebuild();
$this -> notify( 'Flat Catalog Product was rebuilt successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
}
?>
I just ran this code and I got an error saying:
Using $this when not in object context in cron_refresh_cache.php on line 34
Maybe amartinez was using it via the magento cron whereas I was using from the os cron?
Anyways, I solved it by creating a class, wrapping the "refresh_cache()" function in it, and also giving the class a function called "notify" which accepted two parameters, and which just echoed them out.
Then I created a new instance of this class and called its "refresh_cache" method instead of directly calling "refresh_cache()" like the original code.
Here's my modified code:
#!/usr/bin/php
<?php
/**
* cron_refresh_cache.php
*
* @copyright copyright (c) 2009 toniyecla[at]gmail.com
* @license http://opensource.org/licenses/osl-3.0.php open software license (OSL 3.0)
*/
( !$_SERVER["HTTP_USER_AGENT"] ) or die ( "Nothing to do\n" ); // to run via local browser use ($_SERVER["SERVER_ADDR"] == $_SERVER["REMOTE_ADDR"])
require_once 'app/Mage.php';
umask( 0 );
Mage::app( "default" ); // if getting error change this line to Mage::app(Mage::app()->getStore());
$ver = Mage::getVersion();
$userModel = Mage::getModel( 'admin/user' );
$userModel -> setUserId( 0 );
Mage::getSingleton( 'admin/session' )->setUser( $userModel );
echo "Refreshing cache...\n";
Mage::app()->cleanCache();
$enable = array();
foreach ( Mage::helper( 'core' )->getCacheTypes() as $type => $label ) {
$enable[$type] = 1;
}
Mage::app()->saveUseCache( $enable );
//refresh_cache(); // call refresh function
class RefreshCacheCron{
function notify($message,$type){
echo date("d/m/Y G:i:s"). " $type: $message\r\n";
}
function refresh_cache()
{
$this -> notify( 'Refreshing cache' );
try {
Mage :: getSingleton( 'catalog/url' ) -> refreshRewrites();
$this -> notify( 'Catalog Rewrites was refreshed successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getSingleton( 'catalog/index' ) -> rebuild();
$this -> notify( 'Catalog Index was rebuilt successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
$flag = Mage :: getModel( 'catalogindex/catalog_index_flag' ) -> loadSelf();
if ( $flag -> getState() == Mage_CatalogIndex_Model_Catalog_Index_Flag :: STATE_RUNNING ) {
$kill = Mage :: getModel( 'catalogindex/catalog_index_kill_flag' ) -> loadSelf();
$kill -> setFlagData( $flag -> getFlagData() ) -> save();
}
$flag -> setState( Mage_CatalogIndex_Model_Catalog_Index_Flag :: STATE_QUEUED ) -> save();
Mage :: getSingleton( 'catalogindex/indexer' ) -> plainReindex();
$this -> notify( 'Layered Navigation Indices was refreshed successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getModel( 'catalog/product_image' ) -> clearCache();
$this -> notify( 'Image cache was cleared successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getSingleton( 'catalogsearch/fulltext' ) -> rebuildIndex();
$this -> notify( 'Search Index was rebuilded successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getSingleton( 'cataloginventory/stock_status' ) -> rebuild();
$this -> notify( 'CatalogInventory Stock Status was rebuilded successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getResourceModel( 'catalog/category_flat' ) -> rebuild();
$this -> notify( 'Flat Catalog Category was rebuilt successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
try {
Mage :: getResourceModel( 'catalog/product_flat_indexer' ) -> rebuild();
$this -> notify( 'Flat Catalog Product was rebuilt successfully', 'blank');
}
catch ( Exception $e ) {
$this -> notify( $e -> getMessage(), 'warning' );
}
}
}
$refresher=new RefreshCacheCron();
$refresher->refresh_cache();
?>
Delete everything inside /var/cache/
If you want to clean up your db as well: http://www.magentocommerce.com/wiki/groups/227/maintenance_script
精彩评论