Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?PHP

session_start();

if (strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false ) {  print '<div><center><h1>Es liegt keine Berechtigung vor!</h1></center></div>'; exit; }

/*
 * AUTO-INSTALLER für den Event-Kalender - auto-installer.php (utf-8)
 * © RaHa
 *

 * !!!!!!!!!!     
 * Speichern im Ordner tools!     
 * !!!!!!!!!!     

  Mit dem Script AUTO-INSTALLER wird die automatische Installation eines neunen Updates des Event-Kalenders ausgeführt.
  Der Script wird gestartet in der verbindung.php über die Modifikation "Versionsüberprüfung wenn der User Admin ist",
  siehe meine verbindung.php am Ende. Gibt es eine neue Version des Event-Kalenders wird dies angezeigt mit einem Link
  "Neue Version automatisch installieren". Klickt man diesen läuft die Installation automatisch ab. Der Script prüft, ob
  die erforderlichen Scripte vorhanden sind, macht danach eine Datensicherung, lädt dann die neue event-kalender.zip auf
  den Server, entpackt diese, prüft ob eine neue Datenbankstruktur vorhanden ist, modifiziert entsprechend den Script
  verbindung.php, macht zum Schluss den Import in die neue bzw. alte Datenbanktabelle und löscht ggf. die alte
  Datenbanktabelle.

  Dieses Script legt zur Sicherheit alle seit dem letzten Update geänderten Dateien im Ordner
  Zeitstempel_VersionInst_update ab.
  
  Diese Dateien dienen zum Abgleich mit den neu installierten Dateien.

  Die Sicherungsdatei der Datenbank liegt mit Zeitstempel im Ordner export. Ggf. sind alte nicht mehr benötigte
  Sicherungsdateien auch mal dort zu löschen.

  Dieses Script läuft unter UNIX und verwendet die Systemprogramme find, rm und unzip. Ggf. müssen diese Aufrufe
  entsprechend der Betriebssystemversion modifiziert werden.

  Der Script setzt einen Cookie von 24 Stunden Gültigkeit, somit erfolgt der Abruf auf eine neue Version alle
  24 Stunden wenn der Admin den Event-Kalender aufruft.

  Um der DS-GVO gerecht zu werden, wird darauf hingewiesen, dass
  
  - die Benutzung von AUTO-INSTALLER einen Cookie von jeweils 24 Stunden Gültigkeit im aufrufenden Browser setzt
  
  - die Benutzung von AUTO-INSTALLER in den Log-Dateien des Servers auf dem die PHP-Scripte von AUTO-INSTALLER
  arbeiten die IP-Adresse des aufrufenden Browsers und alle Informationen, die dieser preisgibt hinterlässt.
  Solltest Du damit nicht einverstanden sein, verwende den AUTO-INSTALLER nicht.
  
  - die Benutzung von AUTO-INSTALLER in den Log-Dateien des Servers werner-zenk.de die IP-Adresse des aufrufenden
  Servers auf dem die PHP-Scripte von AUTO-INSTALLER arbeiten und alle Informationen, die dieser preisgibt hinterlässt.
  Solltest Du Sie damit nicht einverstanden sein, verwende den AUTO-INSTALLER nicht.

  - bei Verwendung von AUTO-INSTALLER solltest Du auf der Webseite entsprechende Hinweise im Sinne der DS-GVO veröffentlichen.

   
  Ich wünsche viel Spass!


  Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
  ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
  Weitere Informationen finden Sie in der GNU General Public License.
  Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html

  Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.

 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
  */

$eol = "<br>";

function returnto() {
     global $eol;
     if (!isset($argv[0])) {
     print $eol.$eol.'<center><h2><a href="'.$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'" target="_self">Zurück zum Event-Kalender</a></h2></center>'.$eol.$eol;
     }     
     exit;
}

function setthecookie() {
     $options = ["expires" => strtotime(date("Y-m-d", (time()+(3600*24)))." 00:00:00"),"path" => '/',"secure" =>      true,"httponly" => false,"samesite" => "Strict"];
   
     setcookie("auto-installer","true",$options);
}

if (isset($_REQUEST['NO'])) {
     setthecookie();
     print '<div><center><h2>Erneute Versionsabfrage erfolgt in 24 Stunden!</h2></center></div>';
     returnto();
}

/*
Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
ggf. Zeilen auskommentieren!

Ist nicht bedingt erforderlich!

Jedoch all meine Scripte, die nur bestimmte Personen/Rechner/Mobilteile ausführen dürfen, sichere/steuere ich damit. Jeder, der das Script ausführen soll oder/und dem zusätzliche Scriptteile angezeigt werden sollen, hat eine eigene DYNDNS-Adresse, die ich in $dynsallow[] eintrage. Um den Aufwand gering zu halten, wird entweder dieser Codeschnipsel in meinen anderen Scripten aus verschiedenen Allow-Dateien included oder die DYNDNS und die Erlaubnis werden aus einer MySQL-Datenbank abgefragt. 

Wer eine remote-xxx.dyndns.checkip.net und mobile-xxx.dyndns.checkip.net möchte, kann diese gerne von mir bekommen oder holt sich eine bei den gängigen anderen DYNDNS-Diensten.
*/

if (!isset($argv[0])) {
     $dynsallow['1']="remote-xxx.dyndns.checkip.net";
     $dynsallow['2']="mobile-xxx.dyndns.checkip.net";
     
     $i = 0;
     $doaction=false;     
     foreach ($dynsallow as $dynallow) {
          $i++;
          $ipremote=$_SERVER["REMOTE_ADDR"];
          $hostip=gethostbyname($dynallow);
          if ($ipremote==$hostip) { $doaction=true; }
     }
     if ($doaction === false) { print "NO"; returnto(); }
}


function get_copyfiles($dir) {
     $flag = 0;
     unset($output);
     $do = "find ".$dir."/* -type f ";
     exec($do, $output, $flag);
     if (!isset($output[0])) { $output[0] = "FIND FEHLER"; return $output; }
     if ($flag !== 0) { $output[0] = "FIND FEHLER"; return $output; }
     return $output;;
}

function backup_changedfiles($files) {
     foreach($files as $key => $value) {
          if (is_file($value)) {
               $filedate = filemtime( $value );
               $filedate = date("d.m.Y", $filedate);
               if ($filedate !== $_SESSION["version_inst"]) {
                    $backupfile = $_SESSION["update"].'/'.basename($value);
                    if (!copy($value, $backupfile)) { return $value.' '.$backupfile; };
               }
          }          
     }
     return "";
}

function copy_all_files($sourcefiles, $destfiles) {
     foreach($sourcefiles as $key => $value) {
          if (strpos($value, "installation.php") > 0) { continue; }
          if (strpos($value, "verbindung.php") > 0) { continue; }
          if (!rename($sourcefiles[$key], $destfiles[$key])) { return $sourcefiles[$key].' '.$destfiles[$key]; };
     }
     return "";
}

function touch_all_files($files) {
    sscanf($_SESSION["version"], "%2s.%2s.%4s", $startTag, $startMonat, $startJahr);
     $newtime = $startMonat.'/'.$startTag.'/'.$startJahr.' 00:00:00';
     $newtime = strtotime($newtime);
     foreach($files as $key => $value) {
          if (!touch($value, $newtime)) { return $value; }     
     }
     return "";
}

function check_version_ai() {
     $instversion = filemtime($_SESSION["tools"]."/auto-installer.php");
     $aktversion = file_get_contents("https://event-kalender.checkip.net/show/show-ver-auto-installer.php");
     
     $instversion = date("Y-m-d"). "00:00:00";
     $aktversion = date("Y-m-d"). "00:00:00";

     $instversion = strtotime($instversion);
     $aktversion = strtotime($aktversion);

     If (intval($aktversion) > intval($instversion)) { print "<br><br>Vom AUTO-INSTALLER gibt es die neue Version vom ". Date("d.m.Y", $aktversion)."<br><br><br>"; }
}

if (!isset($_SESSION["version"])) { print "Übergabe Parameter fehlt! (version)"; returnto(); }
if (!isset($_SESSION["version_inst"])) { print "Übergabe Parameter fehlt! (version_inst)"; returnto(); }
if (!isset($_SESSION["dir"])) { print "Übergabe Parameter fehlt! (dir)"; returnto(); }

if (!isset($_SESSION["start"])) { $_SESSION["start"] = date("Ymdhis"); }

$_SESSION["download"] = $_SESSION["dir"].'/tmp_tools';
$_SESSION["tools"] = $_SESSION["dir"].'/tools';
$_SESSION["zip"] = $_SESSION["download"].'/event-kalender';
$_SESSION["update"] = $_SESSION["dir"].'/'.str_replace(".", "-", $_SESSION["start"])."_".str_replace(".", "-", $_SESSION["version"]).'_update';

if (!is_dir($_SESSION["update"])) { mkdir($_SESSION["update"], 0700); }

// Prüfung, ob alle Scripte vorhanden
$scripte = [
$_SESSION["dir"]."/lies_mich.txt",
$_SESSION["dir"]."/verbindung.php"
];
foreach ($scripte AS $script) { if (!is_file($script)) { print "Script ". $script. " nicht vorhanden"; returnto();} }
unset ($sripte, $script);

// Parameter erstellen
$LAST_DATUM = date("YmdHms").'_';
$DB_WORK_DIR = $_SESSION["dir"].'/export';
$DB_WORK_SQL_FILE_KALENDER = $DB_WORK_DIR.'/'.$LAST_DATUM.'event-kalender_kalender.sql';
$DB_WORK_SQL_FILE_DETAILS = $DB_WORK_DIR.'/'.$LAST_DATUM.'event-kalender_details.sql';
$DB_WORK_LAST_FILE = $DB_WORK_DIR.'/lastexport.inc.php';
$DB_WORK_TMP_FILE = $DB_WORK_DIR.'/tmp_import_'.TIME();

if (!is_dir($DB_WORK_DIR)) { mkdir($DB_WORK_DIR, 0700); }

// include 
if (is_file($_SESSION["dir"]."/dbinfo.inc.php")) {
     require_once $_SESSION["dir"]."/dbinfo.inc.php";
} else {
     require_once $_SESSION["dir"]."/verbindung.php";
}

$pos=strpos($DB_HOST, ":");
if ($pos > 0) { $DB_HOST = substr($DB_HOST, 0, $pos); };


// Erstmal den Export der Datenbank Tabelle _kalender
$flag = 0;
unset($output);
$command='mysqldump --user='.$DB_BENUTZER.' --password='.$DB_PASSWORT.' --skip-add-drop-table --no-create-info --complete-insert --host='.$DB_HOST.' '.$DB_NAME.' '.$TABLE_PREFIX.'_kalender > '.$DB_WORK_SQL_FILE_KALENDER;
exec($command,$output,$flag);

if ($flag == 0) {
     // Sichern PHP-Variablen
     $IntFileOpenHandle = fopen($DB_WORK_LAST_FILE, "w");
     $StrOutput = '<?php $TABLE_PREFIX_ALT = "'.$TABLE_PREFIX.'"; $LAST_DATUM = "'.$LAST_DATUM.'"; ?>';
     fputs($IntFileOpenHandle, $StrOutput);
     fclose($IntFileOpenHandle);
} else {
     print 'Es ist ein Fehler aufgetreten beim Exportieren von '.$TABLE_PREFIX.'_kalender nach '.$DB_WORK_SQL_FILE_KALENDER;
     returnto();
}

// Jetzt den Export der Datenbank Tabelle _details
$flag = 0;
unset($output);
$command='mysqldump --user='.$DB_BENUTZER.' --password='.$DB_PASSWORT.' --skip-add-drop-table --no-create-info --complete-insert --host='.$DB_HOST.' '.$DB_NAME.' '.$TABLE_PREFIX.'_details > '.$DB_WORK_SQL_FILE_DETAILS;
exec($command,$output,$flag);

if ($flag != 0) {
     print 'Es ist ein Fehler aufgetreten beim Exportieren von '.$TABLE_PREFIX.'_details nach '.$DB_WORK_SQL_FILE_DETAILS;
     returnto();
}

// Wert vom aktuellen TABLEPREFIX holen
require_once $DB_WORK_LAST_FILE;
// $TABLE_PREFIX_ALT $LAST_DATUM

// Ordner download estellen
if (!is_dir($_SESSION["download"])) { mkdir($_SESSION["download"]); }
if (!is_dir($_SESSION["download"])) { print "Fehler beim Erstennen des Ordners ".$_SESSION["download"]; returnto(); }

// sichern von aktueller verbindung.php, kalenderstyle.css, kalenderscript.js
$alte_verbindung = $_SESSION["update"]."/alte_verbindung.php";
if (!copy ($_SESSION["dir"]."/verbindung.php" , $alte_verbindung)) { print "verbindung.php konnte nicht kopiert werden!"; returnto();}

// wenn vorhanden den Ordner event-kalender löschen
if (is_dir($_SESSION["zip"])) {
     $flag = 0;
     unset($output);
     $do = "rm -Rfv ".$_SESSION["zip"];
     exec($do, $output, $flag);
     if (strpos($output[0], "event-kalender") === false) { print "Fehler beim Löschen der ZIP-Ordners!".$eol; print_r($output); returnto(); }
     if ($flag !== 0) { print "Fehler beim Löschen der ZIP-Ordners! (flag)"; returnto(); }
}

chdir($_SESSION["download"]);
// holen wir die neue Version von Werner Zenk
// ggf. vorhandene ZIP-Datei löschen
$zipfile = $_SESSION["download"]."/event-kalender.zip";
if (is_file($zipfile)) { unlink ( $zipfile ); }
// jetzt holen wir die id für den Download
$webinput = file_get_contents("https://werner-zenk.de/archiv/event-kalender.php");
$webinput=html_entity_decode($webinput);
$id_pos = strpos($webinput, "../intern/dl.php?dl=")+strlen("../intern/dl.php?dl=");
$id_pos_end = strpos($webinput, ".zip", $id_pos);
$id_pos_end = strpos($webinput, ".zip", $id_pos_end+4)+4;
$id = substr($webinput, $id_pos, $id_pos_end-$id_pos);
$input=file_get_contents('https://werner-zenk.de/intern/dl.php?dl='.$id);
file_put_contents ($zipfile, $input);
if (!is_file($zipfile)) { print "Fehler beim Download von ".$zipfile; returnto();}
unset($webinput,$id_pos,$id_pos_end,$input);

// ZIP-Datei entpacken in den Ordner event-kalender
$flag = 0;
unset($output);
$do = "unzip event-kalender.zip";
exec($do, $output, $flag);
if (strpos($output[0], "event-kalender") === false) { print "Fehler beim Entpacken der ZIP-Datei!".$eol; print_r($output); returnto(); }
if ($flag !== 0) { print "Fehler beim Entpacken der ZIP-Datei! (flag)"; returnto(); }
if (is_file($zipfile)) { unlink ( $zipfile ); }

$output=get_copyfiles($_SESSION["zip"]);
if ($output[0] == "FIND FEHLER") { print "Fehler in get_copyfiles"; returnto();}

$sourcefiles = array();
$destfiles = array();
foreach ($output AS $key => $value) {
     $sourcefiles[$key] = $value;
     $value = str_replace($_SESSION["zip"].'/', "", $value);
     $destfiles[$key] = $_SESSION["dir"].'/'.$value;
}

$return=backup_changedfiles($destfiles);
if ($return !== "") { print "Fehler in backup_copyfiles"; returnto();}
unset($flag,$output,$do,$zipfile,$value,$return);

chdir($_SESSION["tools"]);

// aus der neuen verbindung.php den neuen TABLEPREFIX holen
$instfile = $_SESSION["zip"]."/verbindung.php";
$input = file_get_contents($instfile);
$table_pos = strpos($input, '$TABLE_PREFIX = "')+strlen('$TABLE_PREFIX = "');
$table_pos_end = strpos($input, '"', $table_pos);
$TABLE_PREFIX_NEU = substr($input, $table_pos, $table_pos_end-$table_pos);

// Kopieren wir die neue verbindung.php
$neue_verbindung = $_SESSION["update"]."/neue_verbindung.php";
if (!copy ($instfile , $neue_verbindung)) { print "Neue verbindung.php konnte nicht kopiert werden!"; returnto();}
if (is_file($neue_verbindung)) { unlink ( $instfile ); }

// wenn neue Tabelle _kalender erforderlich den Scriptteil holen und modifizieren und Tabellen erstellen
If ($TABLE_PREFIX_NEU !== $TABLE_PREFIX_ALT) {

     // neues TAEBLEPREFIX setzen
     $instfile = $_SESSION["dir"]."/verbindung.php";
     $input = file_get_contents($instfile);
     $input = str_replace('"'.$TABLE_PREFIX_ALT.'"', '"'.$TABLE_PREFIX_NEU.'"', $input);
     file_put_contents ($instfile, $input);
     $instfile = $_SESSION["dir"]."/dbinfo.inc.php";
     if (is_file($instfile)) {
          $input = file_get_contents($instfile);
          $input = str_replace('"'.$TABLE_PREFIX_ALT.'"', '"'.$TABLE_PREFIX_NEU.'"', $input);
          file_put_contents ($instfile, $input);
     }

     // jetzt benötigen wir CREATE TABLE _kalender aus der neuen installtion.php
     $instfile = $_SESSION["zip"]."/installation.php";
     $input = file_get_contents($instfile);
     $table_pos = strpos($input, "// Tabelle \"_kalender\" anlegen");
     $table_pos_end = strpos($input, "{", $table_pos)+1;
     $tablecreate = "<?php".chr(10).substr($input, $table_pos, $table_pos_end-$table_pos).chr(10)."?>";
     $tablecreate = str_replace(['$db->query', '{', chr(13)], ['!$db->query','{ print "Fehler bei der Datenbankerstellung!"; exit; }',''], $tablecreate);

     $tablecreatefile = $_SESSION["download"]."/inc.autoinstall_kalender.php";
     file_put_contents ($tablecreatefile, $tablecreate);
     if (!is_file($tablecreatefile)) { print "Fehler beim Schreiben von ".$tablecreatefile; returnto(); }
     
     // erstellen der neuen Tabelle
     $TABLE_PREFIX = $TABLE_PREFIX_NEU;
     require_once $tablecreatefile;
     
     if (is_file($tablecreatefile)) { unlink ( $tablecreatefile ); }

     unset($instfile,$input,$table_pos,$table_pos_end,$tablecreate,$tablecreatefile);

     // spielen wir die Sicherung in die Datenbank Tabelle _kalender ein
     if (!is_file($DB_WORK_SQL_FILE_KALENDER)) { print 'Importdatei '.$DB_WORK_SQL_FILE_KALENDER.' nicht vorhanden'; returnto(); }

     $command='cp -f '.$DB_WORK_SQL_FILE_KALENDER.' '.$DB_WORK_TMP_FILE;
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag > 0) { print 'Es ist ein Fehler beim Kopieren der Datei '.$DB_WORK_SQL_FILE_KALENDER.' aufgetreten'; returnto(); }

     if (!is_file($DB_WORK_TMP_FILE)) { print 'Importdatei '.$DB_WORK_TMP_FILE.' nicht vorhanden'; returnto(); }

     if ($TABLE_PREFIX_ALT !== $TABLE_PREFIX) {
          // Ersetzen Table-Prefix
          $command='sed -i \'s/'.$TABLE_PREFIX_ALT.'_kalender/'.$TABLE_PREFIX.'_kalender/g\' '.$DB_WORK_TMP_FILE;
          $flag = 0;
          unset($output);
          exec($command,$output,$flag);
          if ($flag > 0) { print 'Es ist ein Fehler beim Verändern der Datei '.$DB_WORK_TMP_FILE.' aufgetreten (TABLEPREFIX)';  returnto(); }
     }

     // Hinzufuegen Tabelle leeren
     $finde = 'WRITE;';
     $ersetze = 'WRITE;\nDELETE FROM `'.$TABLE_PREFIX.'_kalender`;';
     $command = 'sed -i \'s/'.$finde.'/'.$ersetze.'/g\' '.$DB_WORK_TMP_FILE;
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag > 0) { print 'Es ist ein Fehler beim Verändern der Datei '.$DB_WORK_TMP_FILE.' aufgetreten (WRITE)'; returnto(); }

     // import der Tabelle _kalender
     $command='mysql --user='.$DB_BENUTZER.' --password='.$DB_PASSWORT.' --host='.$DB_HOST.' '.$DB_NAME.' < '.$DB_WORK_TMP_FILE;
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag == 0) {
          if ($TABLE_PREFIX_ALT !== $TABLE_PREFIX) {
               $DB_WORK_DROP_FILE = $DB_WORK_DIR.'tmp_drop_'.TIME();
               $command='print DROP TABLE IF EXISTS '.$TABLE_PREFIX_ALT.'_kalender > ' .$DB_WORK_DROP_FILE;
               $flag = 0;
               unset($output);
               exec($command,$output,$flag);
               if ($flag > 0) { print 'Fehler beim Schreiben der Datei '.$DB_WORK_DROP_FILE; returnto(); }
     
               $command='mysql --user='.$DB_BENUTZER.' --password='.$DB_PASSWORT.' --host='.$DB_HOST.' '.$DB_NAME.' < '.$DB_WORK_DROP_FILE;
               $flag = 0;
               unset($output);
               exec($command,$output,$flag);
               if ($flag > 0) { print 'Fehler beim Löschen der Tabelle '.$TABLE_PREFIX_ALT.'_kalender'; }
          }
     } else {
          print 'Fehler '.$flag.' beim Import der Tabelle '.$DB_WORK_TMP_FILE.$eol;
          print_r($output);
          returnto();
     }     

     // jetzt benötigen wir CREATE TABLE _details aus der neuen installtion.php
     $instfile = $_SESSION["zip"]."/installation.php";
     $input = file_get_contents($instfile);
     $table_pos = strpos($input, "// Tabelle \"_details\" anlegen");
     $table_pos_end = strpos($input, "{", $table_pos)+1;
     $tablecreate = "<?php".chr(10).substr($input, $table_pos, $table_pos_end-$table_pos).chr(10)."?>";
     $tablecreate = str_replace(['$db->query', '{', chr(13)], ['!$db->query','{ print "Fehler bei der Datenbankerstellung!"; exit; }',''], $tablecreate);

     $tablecreatefile = $_SESSION["download"]."/inc.autoinstall_details.php";
     file_put_contents ($tablecreatefile, $tablecreate);
     if (!is_file($tablecreatefile)) { print "Fehler beim Schreiben von ".$tablecreatefile; returnto(); }
     
     // erstellen der neuen Tabelle
     $TABLE_PREFIX = $TABLE_PREFIX_NEU;
     require_once $tablecreatefile;
     
     if (is_file($tablecreatefile)) { unlink ( $tablecreatefile ); }

     unset($instfile,$input,$table_pos,$table_pos_end,$tablecreate,$tablecreatefile);

     // spielen wir die Sicherung in die Datenbank Tabelle _klander ein
     if (!is_file($DB_WORK_SQL_FILE_DETAILS)) { print 'Importdatei '.$DB_WORK_SQL_FILE_DETAILS.' nicht vorhanden'; returnto(); }

     $command='cp -f '.$DB_WORK_SQL_FILE_DETAILS.' '.$DB_WORK_TMP_FILE;
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag > 0) { print 'Es ist ein Fehler beim Kopieren der Datei '.$DB_WORK_SQL_FILE_DETAILS.' aufgetreten'; returnto(); }

     if (!is_file($DB_WORK_TMP_FILE)) { print 'Importdatei '.$DB_WORK_TMP_FILE.' nicht vorhanden'; returnto(); }

     if ($TABLE_PREFIX_ALT !== $TABLE_PREFIX) {
          // Ersetzen Table-Prefix
          $command='sed -i \'s/'.$TABLE_PREFIX_ALT.'_details/'.$TABLE_PREFIX.'_details/g\' '.$DB_WORK_TMP_FILE;
          $flag = 0;
          unset($output);
          exec($command,$output,$flag);
          if ($flag > 0) { print 'Es ist ein Fehler beim Verändern der Datei '.$DB_WORK_TMP_FILE.' aufgetreten (TABLEPREFIX)';  returnto(); }
     }

     // Hinzufuegen Tabelle leeren
     $finde = 'WRITE;';
     $ersetze = 'WRITE;\nDELETE FROM `'.$TABLE_PREFIX.'_details`;';
     $command = 'sed -i \'s/'.$finde.'/'.$ersetze.'/g\' '.$DB_WORK_TMP_FILE;
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag > 0) { print 'Es ist ein Fehler beim Verändern der Datei '.$DB_WORK_TMP_FILE.' aufgetreten (WRITE)'; returnto(); }

     // import der Tabelle _details
     $command='mysql --user='.$DB_BENUTZER.' --password='.$DB_PASSWORT.' --host='.$DB_HOST.' '.$DB_NAME.' < '.$DB_WORK_TMP_FILE;
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag == 0) {
          if ($TABLE_PREFIX_ALT !== $TABLE_PREFIX) {
               $DB_WORK_DROP_FILE = $DB_WORK_DIR.'tmp_drop_'.TIME();
               $command='print DROP TABLE IF EXISTS '.$TABLE_PREFIX_ALT.'_details > ' .$DB_WORK_DROP_FILE;
               $flag = 0;
               unset($output);
               exec($command,$output,$flag);
               if ($flag > 0) { print 'Fehler beim Schreiben der Datei '.$DB_WORK_DROP_FILE; returnto(); }
     
               $command='mysql --user='.$DB_BENUTZER.' --password='.$DB_PASSWORT.' --host='.$DB_HOST.' '.$DB_NAME.' < '.$DB_WORK_DROP_FILE;
               $flag = 0;
               unset($output);
               exec($command,$output,$flag);
               if ($flag > 0) { print 'Fehler beim Löschen der Tabelle '.$TABLE_PREFIX_ALT.'_details'; }
          }
     } else {
          print 'Fehler '.$flag.' beim Import der Tabelle '.$DB_WORK_TMP_FILE.$eol;
          print_r($output);
          returnto();
     }     
}

$command='rm -f '.$DB_WORK_DIR.'/tmp*';
$flag = 0;
unset($output);
exec($command,$output,$flag);
if ($flag > 0) { print 'Fehler beim Löschen der TMP-Dateien'; returnto(); }

chdir($_SESSION["dir"]);
// alle neuen Dateien aus event-kalender (ZIP) ins Hauptverzeichnis
$return = copy_all_files($sourcefiles, $destfiles);
if ($return !== "") { print "Fehler in copy_all_files. Dateien: ".$return; returnto(); }


// Ordner DOWNLOAD löschen
if (is_dir($_SESSION["download"])) {
     $flag = 0;
     unset($output);
     $do = "rm -Rfv ".$_SESSION["download"];
     exec($do, $output, $flag);
     if (strpos($output[0], "tools") === false) { print "Fehler beim Löschen des Downloadordners!<br>"; print_r($output); returnto(); }
     if ($flag !== 0) { print "Fehler beim Löschen des Downloadordners! (flag)"; returnto(); }
}


// jetzt noch die Zeit bei allen Dateien auf Datum von Version setzen
$retrun=touch_all_files($destfiles);
if ($return !== "") { print "Fehler in touch_all_files. Datei: ".$return; returnto(); }


// prüfen ob Version lies_mich.txt mit title übereinstimmt;
$fileinput = file_get_contents("lies_mich.txt", FALSE, NULL, 0, 100);
$version_inst_pos = strpos($fileinput, "Version vom:") + 13;
$_SESSION["version_inst"] = trim(substr($fileinput, $version_inst_pos, 10));
if ($_SESSION["version_inst"] !== $_SESSION["version"]) {
     $finde = $_SESSION["version_inst"];
     $ersetze = $_SESSION["version"].'   ORG: '.$_SESSION["version_inst"];
     $command = 'sed -i \'s/'.$finde.'/'.$ersetze.'/g\' lies_mich.txt';
     $flag = 0;
     unset($output);
     exec($command,$output,$flag);
     if ($flag > 0) { print 'Es ist ein Fehler beim Verändern der Datei lies_mich.txt aufgetreten (WRITE)'; returnto(); }
}

// Cookie 24 Stunden setzen!
$domain=$_SERVER['SERVER_NAME'];
setthecookie();

print "<br><br>Die neue verbindung.php befindet sich in der Datei: ".$neue_verbindung.$eol;

print "Die Kopie der alten verbindung.php befindet sich in der Datei: ".$alte_verbindung.$eol.$eol;

print "Es wird noch die alte verbindung.php genutzt, dies kann ggf. zu Problemen führen".$eol.$eol;

print "Im Ordner ".$_SESSION["update"]." befinden sich die nach dem letzen Update geänderten Dateien".$eol.$eol;

print "Gleichen Sie die Dateien ab! Danach können die Dateien ggf. löschen.".$eol.$eol.$eol;

check_version_ai();

returnto();

?>


Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


Scriptteil in verbindung.php am Ende einfügen.

// modify RaHa ->
// Versionsüberprüfung wenn der User Admin ist
// Voraussetzung ist, dass lies_micht.txt nicht verändert wurde
if (!isset($_COOKIE["auto-installer"])) {
     if (isset($_SESSION["name"])) {
          if ($_SESSION["name"] == $NAME) {
               $webinput = file_get_contents("https://werner-zenk.de/archiv/event-kalender.php");
               $webinput=html_entity_decode($webinput);
               $version_pos = strpos($webinput, "Version vom:") + 13;
               $_SESSION["version"] = trim(substr($webinput, $version_pos, 10));
               $version_nr_pos = $version_pos + 10;
               $_SESSION["version_nr"] = intval(trim(str_replace([chr(10), "Da", "#"], ["", "", ""], substr($webinput, $version_nr_pos, 3))));

                 $fileinput = file_get_contents("lies_mich.txt", FALSE, NULL, 0, 100);
                 $version_inst_pos = strpos($fileinput, "Version vom:") + 13;
                 $_SESSION["version_inst"] = trim(substr($fileinput, $version_inst_pos, 10));

               if ($_SESSION["version_nr"] > 0) { $_SESSION["version"] = $_SESSION["version"]."-".$_SESSION["version_nr"]; }

                 unset($webinput, $version_pos, $version_nr_pos, $fileinput, $version_inst_pos);
      
                 if (isset($_SESSION["version"]) AND isset($_SESSION["version_inst"])) {
                    if ($_SESSION["version"] !== $_SESSION["version_inst"]) { echo '<br />Neue Version vom '.$_SESSION["version"].' vorhanden! <br />Installierte Version ist vom '.$_SESSION["version_inst"].'.<br /><br />'; 
                         // hier startet der automatische Update-Prozess mit Backup und Import.
                         $_SESSION["dir"] = getcwd();
                         if (is_file($_SESSION["dir"]."/tools/auto-installer.php")) {
                    echo '[&#160;<a href="'.$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'/tools/auto-installer.php" target="_self">Neue Version installieren</a>&#160;]&#160;&#160;&#160;&#160;[&#160;<a href="'.$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'/tools/auto-installer.php?NO" target="_self">Jetzt nicht!</a>&#160;]<br /><br />';
                         }
                    } else {
                         $options = ["expires" => strtotime(date("Y-m-d", (time()+(3600*24)))." 00:00:00"),"path" => '/',"secure" => true,"httponly" => false,"samesite" => "Strict"];   
                         setcookie("auto-installer","true",$options);
                         unset($options);
                    }
               }
          }
     }
}
// <- modify RaHa
?>