mDescription = "Delete image information from the cache"; $this->addOption( 'sleep', 'How many seconds to sleep between deletions', true, true ); $this->addOption( 'until', 'Timestamp to delete all entries prior to', true, true ); } public function execute() { global $wgMemc; $until = preg_replace( "/[^\d]/", '', $this->getOption( 'until' ) ); $sleep = (int)$this->getOption( 'sleep' ) * 1000; // milliseconds ini_set( 'display_errors', false ); $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( 'image', array( 'img_name' ), array( "img_timestamp < {$until}" ), __METHOD__ ); $i = 0; $total = $this->getImageCount(); foreach ( $res as $row ) { if ( $i % $this->report == 0 ) $this->output( sprintf( "%s: %13s done (%s)\n", wfWikiID(), "$i/$total", wfPercent( $i / $total * 100 ) ) ); $md5 = md5( $row->img_name ); $wgMemc->delete( wfMemcKey( 'Image', $md5 ) ); if ( $sleep != 0 ) usleep( $sleep ); ++$i; } } private function getImageCount() { $dbr = wfGetDB( DB_SLAVE ); return $dbr->selectField( 'image', 'COUNT(*)', array(), __METHOD__ ); } } $maintClass = "DeleteImageCache"; require_once( RUN_MAINTENANCE_IF_MAIN );