Problemlösung Cachedateien

Aus Wiki | modified eCommerce Shopsoftware
Zur Navigation springenZur Suche springen

Benutzt man den Datenbankcache so füllt sich mit der Zeit das Verzeichnis cache/ zunehmend mit Dateien. Dies kann soweit führen, dass dieses Verzeichnis nicht mehr administrierbar ist. Mit folgendem Script lässt sich das Verzeichnis löschen.

Das Script unter dem Namen delcache.php ins Shoproot hochladen und aufrufen. Man kann es auch als Cronjob einrichten was dafür sorgt, dass das cache-Verzeichnis automatisch gelöscht wird. Im Script ist eine kleine Protokollfunktion integriert.

<?php
/*
   delcache.php

   Simples löschen der Cache-Ordner
   ins Shop-Hauptverzeichnis hochladen
   Aufruf: http://www.meinshop.de/delcache.php
   Schreibt logdatei in http://www.meinshop.de/admin/delcache.log
   Anschließend wieder vom Server löschen
*/

$dir1    = "cache/";
$dir2    = "templates_c/";

// Logdir aus document root und admin

define('LOGDIR', $_SERVER['DOCUMENT_ROOT'].'/log/');

clear_dir($dir1);
clear_dir($dir2);

echo "fertig!";

  /**
   * clear_dir()
   *
   * @param string $dir
   * @param boolean $basefiles
   */
  function clear_dir($dir, $basefiles = false) {
    $dir = rtrim($dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
    $ignore_files = array('.htaccess', 'index.html');
    if ($handle = opendir($dir)) {
      $i = 0;
      while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
          if (is_dir($dir.$file)) {
            clear_dir($dir.$file, true);
            rmdir($dir.$file);
          } else {
            if (!$basefiles && in_array($file, $ignore_files)) {
              continue;
            }
            unlink($dir.$file);
          }
        }
        $i++;
      }
      closedir($handle);
      $file=fopen(LOGDIR."mod_delcache_".date("Y-m-d").".log", "a");
      // Im log noch ein paar infos dazu (welcher Server und welcher DOCUMENT_ROOT 
      $d = date("Y-m-d H:i:s");
      $s = "[$d] ".$_SERVER['SERVER_NAME']." - ".$_SERVER['DOCUMENT_ROOT']."/$dir - $i files deleted\n";

      fwrite($file, $s);
      echo "$s<br />";
      fclose($file);
    }
  }
?>
           
anything