From ecf17a180b788ad92c58348e1705db77e6f0a57b Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Fri, 27 Apr 2018 16:00:12 +0200 Subject: [PATCH] Neues File system_check_sql MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn im Ordner system/sql .sql-Files vorhanden sind, werden diese Ausgeführt und das Ergebnis per Mail an den Administrator geschickt. Dies soll als Check für systemkritische Abfragen, Checks, Inkonsistenzen, etc. dienen --- system/system_check_sql.php | 149 ++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 system/system_check_sql.php diff --git a/system/system_check_sql.php b/system/system_check_sql.php new file mode 100644 index 000000000..423d81d97 --- /dev/null +++ b/system/system_check_sql.php @@ -0,0 +1,149 @@ + + */ + +/* + * Dieses Skript durchläuft alle Dateien vom Typ .sql im Ordner system/sql. + * Wenn von diesen SQLs Datensätze retourniert werden oder Fehler auftreten, werden diese in ein Mail gepackt und an MAIL_ADMIN geschickt. + */ + +require_once('../config/global.config.inc.php'); +require_once('../config/vilesci.config.inc.php'); +require_once('../include/functions.inc.php'); +require_once('../include/benutzerberechtigung.class.php'); +require_once('../include/mail.class.php'); + +// Datenbankverbindung herstellen +if (! $db = new basis_db ()) + die ( 'Es konnte keine Verbindung zum Server aufgebaut werden.' ); + +$slq_import_path = DOC_ROOT.'system/sql'; +$mailcontent = ''; +$mailheader = ' + '; + +// Wenn das Script ueber die Kommandozeile aufgerufen wird, erfolgt keine Authentifizierung +if (php_sapi_name() != 'cli') +{ + $uid = get_uid(); + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + + if(!$rechte->isBerechtigt('admin')) + { + exit($rechte->errormsg); + } +} +$files = glob($slq_import_path.'/*.sql'); +$filename = ''; +$db_row = ''; + +if (($files = glob($slq_import_path.'/*.sql')) != false) +{ + foreach ($files as $file) + { + $filename = (basename($file)); + $sql = file_get_contents($file); + + // Checken, ob letztes Zeichen ; ist, wenn nicht, hinzufügen + if (substr($sql, -1, 1) != ';') + $sql = $sql .= '; '; + + // Wenn Fehler auftritt, diesen ins Mail schreiben + if (! $result = $db->db_query ($sql)) + { + $mailcontent .= '

Die Abfrage der Datei "'.$filename.'" hat folgenden Fehler geliefert:

'; + $mailcontent .= ''.$db->db_last_error () . '
'; + continue; + } + + // Wenn rows vom SQL zurückkommen, diese ins Mail schreiben + if ($db->db_num_rows($result) > 0) + { + $mailcontent .= '

Die Abfrage der Datei "'.$filename.'" hat folgendes Ergebnis geliefert:

'; + // Wenn zu viele Datensätze retourniert werden, abbrechen und Meldung ausgeben + if ($db->db_num_rows($result) > 1000) + $mailcontent .= 'ACHTUNG! Es wurden mehr als 1000 Datensätze zurückgegeben
'; + + $mailcontent .= ''; + foreach($db->db_fetch_object($result) AS $key => $value) + { + $mailcontent .= ''; + continue; + } + $mailcontent .= ''; + $counter = 0; // Wenn mehr als 1000 Datensätze retourniert werden, abbrechen + while($row = $db->db_fetch_object($result)) + { + if ($counter == 1000) + break; + + $mailcontent .= ''; + foreach ($row AS $column) + { + $mailcontent .= ''; + } + $mailcontent .= ''; + $counter++; + } + $mailcontent .= '
'.$key.'
'.($column === 'f' ? 'false' : ($column === 't' ? 'true' : $column)).'
'; + } + } +} +else + $mailcontent = ''; + +// Wenn Mailcontent nicht leer ist, Mail senden +if ($mailcontent != '') +{ + $mailcontent = $mailheader.$mailcontent; + echo $mailcontent; + + $mail = new mail(MAIL_ADMIN, 'no-reply', 'Fehler in System Check "addons/bewerbung/cronjobs/system_check.php"', 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Inhalt vollständig darzustellen.'); + $mail->setHTMLContent($mailcontent); + $mail->send(); +} +else + echo 'Es sind keine Fehler aufgetreten'; + +