[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Export automatisieren
Seite 1 von 1

Export automatisieren

Verfasst: 27. Apr 2016, 19:08
von engeltom
Hallo,

im Backend gibt es ja das Addon Import/Export. Hier kann ich sowohl die Datenbank als auch die Files in einer Datei sichern (auf Server oder als Download).

Kann ich dieses Script / Addon auch von außen (also außerhalb Redaxo) aufrufen?

Mein Ziel ist, dass ich über einen Cron-Job einmal täglich alles in exportiere und auf dem Server speichere. Geht etwas in der Pflege der Homepage schief, kann man schnell einen Import machen.

Ich will hier bewusst nicht mit einem anderen Programm (MySQLDumper) arbeiten sondern ich will die Standards von Redaxo nutzen.

Merci, Thomas

Re: Export automatisieren

Verfasst: 27. Apr 2016, 21:42
von Markus.Staab
Hi!

Es gibt ein cronjob addon was dir das ermöglicht

Re: Export automatisieren

Verfasst: 27. Apr 2016, 21:52
von engeltom
Danke für den tollen Hinweis.

Damit geht der Datenbank-Export. Schaffe ich das auch mit dem Datei-Export?

Re: Export automatisieren

Verfasst: 1. Jun 2016, 18:38
von engeltom
Ich muss leider nochmal nachfragen: mit dem Addon Cronjob kann ich bequem einen Datenbank-Export automatisieren.

Kann ich das auch mit dem Dateiverzeichnis machen? Ich meine es ändert sich ja nicht nur was in der Datenbank, sondern oftmals auch im Verzeichnis files (Bilder, PDF, ...)

Hilfe wäre super :-)

Re: Export automatisieren

Verfasst: 2. Jun 2016, 01:21
von dpf_dd
Aber natürlich, du kannst jedes beliebige PHP-Skript durch das Cronjob-Addon jagen... :D

Im Dropdown "Typ" auf PHP-Code stellen, "Name" und "Intervall" beliebig einstellen und bei "Umgebung" nur Backend selektieren und unten ins Textfeld dein PHP-Code reinsetzen...

Ich hab sowas ähnliches im Einsatz und mir mal 10min genommen das für dich aufzubereiten...
Rein technisch sollte das funktionieren, es sei denn ich hab beim Umschreiben der Uhrzeit wegen paar Klammern zu viel oder Semikolons zu wenig drin. Probier's einfach mal aus :mrgreen:

Code: Alles auswählen

<?php
### Dokument auf UTF8 einstellen
header('Content-Type: text/html; charset=UTF-8');

### Cronjob-Klasse
class Cronjob
{

    ### MySQLi connecten
    private $mysqli;

    ### Kontruktor
  public function __construct(MySQLi $mysqli)
    {
    $this->mysqli = $mysqli ;
  }

    public function deleteFolder($source)
    {
    if (!is_dir($source))
        return false; 
        
    $shellBefehl = "rm -Rv $source";
    exec($shellBefehl);
    return true;
    }

    ### Funktion zum Verzeichnis kopieren
    public function copyFolder($source, $destination, $recursive = true)
    {
        if (is_dir($destination)) 
        $this->deleteFolder($destination);
        else
            mkdir($destination); 

 
    $handle = @opendir($source);
    
    if(!$handle)
        return false;
    
    while ($file = @readdir ($handle))
    {
        if (eregi("^\.{1,2}$",$file))
      {
          continue;
      }
        
      if(!$recursive && $source != $source.$file."/")
      {
          if(is_dir($source.$file))
            continue;
      }
        
      if(is_dir($source.$file))
      {
          copyFolder($source.$file."/", $destination.$file."/", $recursive);
      }
      else
      {
          copy($source.$file, $destination.$file);
      }
    }
    @closedir($handle);    
    }

}
### Cronjob ausführen
$mysqli = new MySQLi('localhost','deinusername','deinpasswort','deinedatenbank');
$cronjob  = new Cronjob($mysqli);
$cronjob = $cronjob->copyFolder('deinquellverzeichnis','deinzielverzeichnis');
?>

Da der Cronjob im Hintergrund läuft verzichte ich immer auf eine echo-Ausgabe einer Success- oder Errormeldung. Redaxo loggt ja mit und dort ist dann einsehbar, ob der Cronjob erfolgreich lief oder nicht ;)

Die Funktion ist rekursiv, kopiert also auch alle Unterverzeichnisse mit. Für Redaxo würde demnach als $source "/redaxo" reichen, dann kopiert es KOMPLETT alle Inhalte nach $destination "/redaxo_backup"... Das Verzeichnis $destination wird dabei überschrieben, wenn es existiert. Du kannst dir das aber noch anpassen, z.B. eine Laufzeitvariable einbringen, die in immer neue Verzeichnisse schreibt. Oder $recursive auf false setzen, dann kopiert es nur die Dateien des Ordners, aber keine Unterverzeichnisse... Wie gesagt, alles ist möglich :D

Wie gesagt, der Code ist nicht getestet. Kannst ja mal schreiben, ob du es hinbekommen hast :)

EDIT: Die MySQLi-Codezeilen kannst du theoretisch noch rausnehmen, dass brauchst du für dein Vorhaben nicht. Ich habs aber mal drin gelassen, weil es für andere Zwecke durchaus nützlich sein kann und ich Universalskripte sehr mag :D

Gruß und MfG,
Stefan / dpf_dd