Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 458
» Foren-Beiträge: 635
Komplettstatistiken
|
Benutzer Online |
Momentan sind 11 Benutzer online » 0 Mitglieder » 6 Gäste AhrefsBot, Bytespider, DotBot, Google, bot
|
|
|
Error-Reporting |
Geschrieben von: Joopi - 07-01-2023, 11:03 - Forum: Programmieren
- Keine Antworten
|
|
Wenn man ein PHP-Skript erstellt, dann kommt es unweigerlich zu Problemen, weil der Programmcode nicht korrekt ist. Nach meinem Verständnis gibt es drei Kategorien von Meldungen, die PHP ausgibt:
- PHP Notice
- PHP Warning
- PHP Error
Während der Entwicklungsphase macht es Sinn, die Meldung ausgeben zu lassen, um schnell auf Fehler im Programmcode oder -logik reagieren zu können.
Aber auch während der Entwicklungsphase kann es sinnvoll sein, das Error-Reporting einzuschränken oder gar zu unterbinden. Das muss dann jeder Programmierer mit sich selber ausmachen.
Es gibt nun mehrere Möglichkeiten, die ich nutzen könnte. Will ich z.B. zu einer Codezeile verhindern, dass eine PHP-Meldung ausgegeben wird, so kann dies über das **@**-Zeichen gesteuert werden.
PHP-Code: <?php $parts = @$structure->parts; ?>
Mit dem @-Zeichen wird die Ausgabe einer möglichen Meldung verhindert, sollte z.B. in der Struktur gar kein Element *parts* enthalten und für den kompletten Programmablauf nicht hinderlich sein.
Um im gesamten Programm wirklich alle Fehlermeldungen zu unterbinden, sollte in der ersten Zeile des PHP-Skripts folgendes stehen:
PHP-Code: <?php error_reporting(0); ?>
Das ist natürlich nicht gut, denn sollte es Fehler geben, die sich wirklich, und vor allem negativ, auf den Programmablauf auswirken, ist man mit
PHP-Code: <?php error_reporting(E_ALL & ~E_NOTICE); ?>
besser bedient.
Wie gesagt, in der Entwicklung eines PHP-Skripts sind Meldungen wichtig für den Programmierer. Sobald das Tool fertig und produktiv gehen kann, sollten auf jeden Fall die Meldungen unterbunden werden. Was geht es dem gemeinen Internet-User an, welche Meldungen ein Skript aus welchen Gründen auch immer verursacht.
|
|
|
Eingebettetes Thumbnail extrahieren |
Geschrieben von: Joopi - 07-01-2023, 11:00 - Forum: Programmieren
- Keine Antworten
|
|
Durch meine Fotografie habe ich viel mit Fotos zu tun. Ich möchte gerne meine eigene Galerie programmieren und benötige dafür auch Informationen aus den EXIF-Daten der erzeugten Dateien. Nicht alle Dateien haben diese Daten, aber die, die ich mit meinen Fotokameras mache, haben sie.
In diesen Daten sind auch die Quelldaten für ein Thumbnail, also für eine Miniaturansicht, enthalten. Man kann sie auf verschiedene Art und Weise Thumbnails extrahieren, um diese auf der Webseite anzuzeigen, die dann wieder auf die echten Fotos verlinken. Das spart auf jeden Fall Ressourcen beim Laden der Webseite.
Wiederum gibt es zwei Möglichkeiten, um die eingebetteten Thumbnails zu extrahieren. Entweder man erzeugt sie zur Laufzeit und gibt sie direkt auf der Webseite aus oder man erzeugt diese Thumbnails physisch und bindet sie dann über den IMG-Tag ein.
Nachfolgend ist ein Script aufgeführt, welches ich heute mit Hilfe einiger Quellen, meist php.net, zusammengestellt habe. Für mein Vorhaben reicht das im Moment und kann durchaus durch andere genutzt werden, wenn die individuellen Parameter angepasst werden.
PHP-Code: <?php
$pfad = "/home/tuennes/help/help5/"; $bildbig = "jpg_big.jpg"; $thumbnail = "thumb_jpg_big.jpg";
// Das ist die Quelle mit dem normelen großen Bild, welches das Thumbnail beinhalten kann $picture = $pfad.$bildbig;
// Das ist das resultierende Thumbnail, sofern das normale Bild ein Thumbnail beinhaltet $output_file = $pfad.$thumbnail;
// Den Quellcode aus dem großen Foto für ein etwaig eingebettetes Thumbnail ausfindig machen $image = exif_thumbnail($picture, $width, $height, $type);
// Sofern ein Thumbnail enthalten ist, wird dieser genutzt und ein Bild erstellt. if ($image!==false) { header('Content-type: ' .image_type_to_mime_type($type));
// Die Datei wird zum Schreiben geöffnet $fp = fopen($output_file, "w+");
// write the data in image file // Wichtig ist, dass die Variable $image nur den Quellcode des Thumbnails beinhaltet. Dieser Quell wird über base64_encode zunächst in Base64 kodiert, // muss aber für die Erzeugung eines physischen Bildes dann wieder mittels base64_decode decodiert werden. fwrite($fp, base64_decode(base64_encode($image)));
// close an open file pointer fclose($fp);
// Ob das Bild erstellt wurde, wird sofort geprüft if (file_exists($output_file)) { echo "Die Datei wurde erstellt.\n"; } else { echo "Die Datei wurde nicht gefunden, daher wurde sie nicht estellt.\n"; } } // Enthielt das große Bild kein eingebettetes Thumbnail, wird eine entsprechende Meldung ausgegeben. else { // kein Miniaturbild vorhanden. Fehler wird hier verarbeitet echo "Kein Miniaturbild verfügbar\n"; }
?>
Für meine Ideen ist diese einfache Art und Weise der Thumbnailerstellung sehr gut geeigent. Meine eigenen Bilder sollten alle ein Thumbnail enthalten, da ich die EXIF-Daten auf keinen Fall lösche und für meine Galerie nutzen möchte.
Die andere Variante mit der Erstellung der Thumbnails zur Laufzeit habe ich noch nicht ausprobiert.
|
|
|
Eingabefeld prüfen |
Geschrieben von: Joopi - 07-01-2023, 10:58 - Forum: Programmieren
- Keine Antworten
|
|
Auf dem lokalen Rechner habe ich einige Webseiten mit PHP und MySQL erstellt. Über diese Seiten werden Daten mittels HTML-Formulare in Datenbanken bzw. Tabellen geschrieben. Da ich alleine mit diesen Formularen arbeite, ist eine absolute Sicherheit für eine vernünftige Erfassung nicht in meinem Fokus gewesen.
Allein meine Faulheit, leere Einträge in den Tabellen korrigieren zu müssen, haben mich veranlasst, die Formular sicherer zu machen. Nun werden die Inhalte der jeweilige Formularfelder geprüft. Wenn ein Feld leer ist, dann wird der Insert-Befehl nicht ausgeführt.
Die Prüfung sieht z.B. so aus:
PHP-Code: <?php if (empty($_REQUEST["n_mailaddi"])) {
echo "Das Feld ist leer. Bitte eine Mailadresse eingeben.";
echo "<a href=\"some_form_mailadressen.php\">"; echo "<button type=\"button\">Mail eingeben</button>"; echo "</a>"; } ?>
Nun wird es keine Tabelleneinträge mehr geben, die mit leeren Feldern für die Mailadresse aufwarten.
Ich habe jetzt natürlich dieses Prinzip auf alles meine Formulare angewendet. Eigentlich sollte es bei der Erstellung von Formularen ein Standard sein, aber ich hatte das nicht so im Fokus vor 10 Jahren.
Es noch andere, weil auch bessere Methode. Es wäre sinnvoll, ID-/Namenfelder einzufügen und darüber die Prüfung ablaufen zu lassen.
|
|
|
JSON-Datei auslesen |
Geschrieben von: Joopi - 07-01-2023, 10:54 - Forum: Programmieren
- Keine Antworten
|
|
Mit json-Dateien arbeite ich im Grunde genommen nie. Zumindest nicht im privaten Bereich. Im beruflichen Umfeld muss ich nun mit json-Datei, die als Konfigurationsdateien dienen, arbeiten.
Generell, so habe ich es verstanden, dienen json-Dateien zum Datenaustausche. Das bedeutet, dass man in der Lage sein muss, die Inhalte einer json-Datei auszulesen und zu verwerten.
Die einfachste Art, um eine json-Datei auszulesen, ist folgende:
PHP-Code: <?php $JsonParser = file_get_contents("test_json.json"); var_dump($JsonParser); ?>
Hierbei wird der komplette Inhalt der Datei ausgegeben. Man kann die Daten aber so nicht direkt verarbeiten. Es muss also anders angegangen werden.
Das Zauberwort ist mal wieder array verbunden mit json_decode.
PHP-Code: <?php $Json = file_get_contents("test_json.json"); // Converts to an array $myarray = json_decode($Json, true); var_dump($myarray); // prints array ?>
Da eine json-Datei sturkturiert aufgebaut ist, ist es auch wohl relativ simpel diese Struktur in ein Array zu übernehmen. Die Verarbeitung von Arrays finde ich immer recht spektakulär, wenn ich ehrlich bin.
Die von mir genutzte Datei hat folgenden Inhalt (die Altersangabe habe ich dazugefummelt):
Zitat:[
{
"id": "01",
"name": "Olivia Mason",
"designation": "System Architect",
"alter":
{
"jahre": 56
}
},
{
"id": "02",
"name": "Jennifer Laurence",
"designation": "Senior Programmer",
"alter":
{
"jahre": 41
}
},
{
"id": "03",
"name": "Medona Oliver",
"designation": "Office Manager",
"alter":
{
"jahre": 27
}
}
]
Eine einfache Auswertung bzw. Ausgabe könnte die zeilenweise Darstellung der 3 Datensätze sein und wird wie folgt erzeugt:
PHP-Code: <?php foreach($myarray AS $value) { echo $value["id"] . " " . $value["name"] . " " . $value["designation"] . " " . $value["alter"]["jahre"] . "\n"; } ?>
Damit werden alle drei Datensätze ausgegeben. Das Array hat quasi zwei Ebenen. Die Altersangabe ist eben auch auszugeben und muss entsprechend angepackt werden.
Will man nur bestimmte Datensätze sehen, so kann via IF-Abfrage eine Ausgabemenge zu steuern:
PHP-Code: <?php foreach($myarray AS $value) { if ($value["id"] == "02") { echo $value["id"] . " " . $value["name"] . " " . $value["designation"] . " " . $value["alter"]["jahre"] . "\n"; } } ?>
In diesem Fall wird nur der Datensatz ausgegeben, der im Feld ID den Wert 02 stehen hat.
Ob ich jemals etwas mit json-Dateien machen werde, kann ich nicht sagen. Eine Anwwendung hätte ich im Bereich der Hugo-Installationen, denn via json-Dateien kann man Datenbankanwendungen darstellen und Tabellen ausgeben.
|
|
|
Der Huddel mit den Zeichensätzen |
Geschrieben von: Joopi - 07-01-2023, 10:50 - Forum: Programmieren
- Keine Antworten
|
|
Der Huddel mit den Zeichensätzen ist nicht immer einfach zu bewerkstelligen.
Ein Datenbankeintrag in meiner lokalen Umgebung sieht wie folgt aus:
Zitat:I'm
Auf meinem Webspace sieht er aber so aus:
Zitat:I�m
Nach meiner bisherigen Recherche ist hier eine Vermischung von einem ISO-8859-1-Zeichen in einer UTF-8-Umgebung für die Darstellung verantwortlich.
Folgende Erklärung habe ich hier gefunden:
Zitat:Ein Beispiel für das Wort _Höhe_:
UTF-8-Text in ISO-8859-1/9/13-16-Umgebung
_Höhe_ → _Höhe_.
ISO-8859-1-Text in UTF-8-Umgebung
_Höhe_ → _H_�_he_ bzw. Fehlermeldung mit Abbruch. Ein Byte mit dem Hexadezimalwert _F6_ ist in UTF-8 nicht zulässig. Es ist üblich, für nicht konvertierbare Zeichen das [url=https://de.wikipedia.org/wiki/Ersetzungszeichen "Ersetzungszeichen"]Ersetzungszeiche[/url]n (U+FFFD) einzufügen.
Eine Lösung habe ich insofern gefunden, als das oftmals ein Zeichensatz falsch deklariert wird. Bedeutet, es gibt Verwechslungen zwischen windows-1252 und ISO-8859-1.
Die Lösung meines Problems war folgende Zeile im PHP-Script:
PHP-Code: <?php //$mailtext_neu = mb_convert_encoding($mailtext_neu, "UTF-8", "windows-1252"); $mailtext_neu = iconv('windows-1252', 'UTF-8', $mailtext_neu); ?>
Beide Varianten funktionieren und konvertieren den scheinbar nicht in UTF-8 vorliegenden Text korrekt um.
Gefunden habe ich die Lösung hier:
PHP: Problems converting "’" character from ISO-8859-1 to UTF-8
|
|
|
DB-Abfragen in Funktionen auslagern |
Geschrieben von: Joopi - 07-01-2023, 10:44 - Forum: Programmieren
- Keine Antworten
|
|
Endlich habe ich es nicht nur geschafft, dass ich Datenbankabfragen in externe Scripte auslagere, sondern ich habe es zudem auch endlich mal begriffen.
Bislang schreibe ich immer alles in ein PHP-Script. Nur die Zugangsdaten für die Datenbankabfrage habe ich bereits vor Jahren ausgelagert und greife über eine include-Anweisung darauf zu.
Nun habe ich zwei weitere Scripte, neben dem DB-Include, erstellt. Im ersten Script wird die Datenbankverbindung aufgebaut, im zweiten Script werden die Datenbankabfragen innerhalb von Funktionen durchgeführt.
Die Funktionsergebnisse kann ich dann im Hauptscript nutzen. Dadurch wird das Hauptscript übersichtlicher.
Mein Vorgehen kommt aus der prozdualen Ecke. Die liegt mir mehr als die objektorientierte Methode. Mir liegt es nicht an Geschwindigkeit, sondern eher am einfachen Erstellen weiterer Script in anderen Projekten.
Und ich bin mir sicher, dass ich noch mehr auslagern kann und der geneigte Fachmann mal wieder einen Schenkelklopfer loslässt. Das ist mir aber egal. Ich habe endlich das, was ich seit langer Zeit brauche. Erweiterungen und Verfeinerungen können irgendwann angeflanscht werden.
Insgesamt gibt es also 4 Scriptdateien:
Datenbankzugangsparameter
PHP-Code: <?php /* Zugangsparameter */ $host = "localhost"; $user = "user"; $pwd = "passwort"; /* Datenbanken */ $dbname001="datenbank"; /* Tabellen */ $tblname001="user"; $tblname002="userdetail"; $tblname003="session"; ?>
Datenbankverbindungsaufbau
PHP-Code: <?php include("db_connect.inc.php");
$db = mysqli_connect($host, $user, $pwd, $dbname004);
if(!$db) { exit("Verbindungsfehler: ".mysqli_connect_error()); } ?>
Datenbankfunktionen
PHP-Code: <?php // Der spätere Aufruf ist: php php_test_funktion_slave.php
$query_vg = 0;
// Definition der Funktion, wobei die DB-Verbindung ausgelagert wurde. function vorgang($db){ include("php_test_funktion_db.php"); $query_vg = mysqli_query($db, "SELECT id, mailadresse, vorname FROM $tblname021 WHERE id >= 35"); return $query_vg; } ?>
Mainscript mit Nutzung der Funktionsergebnissen
PHP-Code: <?php error_reporting(E_ALL);
include("php_test_dbfunktion.php");
// Aufnahme des Funktionsergebnisses $result_vg = vorgang($query_vg);
// Ausgabe des Funktionsergebnisses while($row_vg = mysqli_fetch_row($result_vg)) { echo "<p>Das ist die ID: " . $row_vg[0] . "</p>\n"; } ?>
Ich bin derzeit sehr zufrieden, dass ich nun endlich die Datenbeschaffung und die Datenverwendung trennen kann. Immer alles in einem Script abzuhandeln ist besonders bei umfangreichen Projekten und Scripten sehr anstrengend. Hier kann ich nun sehr viel Übersicht gewinnen und die Pflege des Programmcodes optimieren.
Diese Funktionen setze ich nur auf dem lokalen Rechner ein. Auf meinen externen Webspaces habe ich Datenbanken und damit verbundene Abfragen auf ein Minimum reduziert. Das Umschreiben dieser Script spare ich mir derzeit, bis ich mehr weiß und mehr Sicherheit im Umgang mit derartigem Vorgehen habe.
|
|
|
Auswertung von stdClass |
Geschrieben von: Joopi - 07-01-2023, 10:36 - Forum: Programmieren
- Keine Antworten
|
|
Über eine foreach-Schleife ist es relativ einfach ein assoziatives Array auszugeben. Standardmäßig könnte es so aussehen:
PHP-Code: <?php // Aufnahme der Daten einer IMAP-Verbindung in eine Variable, die ein assoziatives Array speichert $imap = imap_check($mbox);
// Ausgabe des assoziativen Array mit seinen Properties für key und value foreach ($imap as $detailkey => $detailwert) { echo $detailkey .": " . $detailwert . "\n"; } ?>
Die Ausgabe von var_dump() sieht so aus:
Zitat:object(stdClass)#1 (5) {
["Date"]=>
string(37) "Tue, 11 Jan 2022 16:36:02 +0100 (CET)"
["Driver"]=>
string(4) "imap"
["Mailbox"]=>
string(94) "{das sind die Verbindungsinformationen und daher nicht für die Öffentlichkeit bestimmt}INBOX"
["Nmsgs"]=>
int(10)
["Recent"]=>
int(0)
}
Mein Problem war nun, dass mich im Grunde genommen nur die Anzahl der im Postfach vorhandenen Mails interessiert hat. Kann man auf anderem Wege ebenfalls ermitteln, aber mit imap_check wollte ich es einfach versuchen. Das Schlüsselfeld dazu ist: Nmsgs
Es hat einige Zeit gedauert, bis mir klar war, wie ich diesen einen Wert herausholen kann, ohne alle anderen Werte auch aufzulisten oder zu erhalten. Die Anzahl der Mails brauche ich für eine for-Schleife, also muss ich diesen Wert separieren. Das ganze Array nützt mir nichts und ist hinderlich.
Letztlich ist es recht einfach, wenn man weiß, mit was man es zu tun hat. Die Codezeile, die mir den gewünschten Wert präsentiert, ist.
PHP-Code: <?php echo "Das ist die Anzahl der enthaltenen Mails: " . $imap->Nmsgs . "\n"; ?>
Da es sich, soweit ich das verstanden habe, bei stdClass um ein Objekt handelt, muss ich hier anders vorgehen als ich es eigentlich gewohnt bin. Objekte sind auch in anderer Hinsicht und in anderen Vorhaben noch nicht meine Freunde - es wird aber so langsam.
Als Ergebnis der obigen Codezeile wird dann folgendes ausgegeben.
Zitat:Das ist die Anzahl der enthaltenen Mails: 10
Und damit ist der Wert für die Anzahl der Mails im Postfach ermittelt und kann im nachfolgenden Programmcode genutzt werden. Die Übernahme in eine Variable ist dann auch für mich recht einfach.
|
|
|
PHP auf Konsole ausführen |
Geschrieben von: Joopi - 07-01-2023, 10:32 - Forum: Programmieren
- Keine Antworten
|
|
Es ist mögich, ein PHP-Script (oder eine PHP-Befehlszeile) auf der Konsole bzw. in einem Shellscript auszuführen.
Das ist der Inhalt des PHP-Scripts:
PHP-Code: <?php echo "Hallo Welt auf der Konsole!\n"; ?>
Folgender Befehl auf der Konsole führt ein PHP-Script aus:
Code: php hallo_welt_konsole.php
Das Ergebnis ist wie folgt (steht so im PHP-Script):
Zitat:Hallo Welt auf der Konsole!
|
|
|
Array ausgeben |
Geschrieben von: Joopi - 07-01-2023, 10:31 - Forum: Programmieren
- Keine Antworten
|
|
Wer sich mit der Programmierung beschäftigt, kommt über kurz oder lang mit dem Datentyp ARRAY in Berührung. Egal in welcher Programmiersprache man unterwegs ist, das Array ist ein sehr wichtiges Instrument. Und ich tue mich damit von Anbeginn an schwer - also seit Jahrzehnten.
Ich habe immer Arrays genutzt, aber nie wirklich verstanden und einfach nur aus Vorlagen abgeschrieben. Oftmals musste ich lange daran herumfummeln, um die Syntax für mich gängig zu machen und ein brauchbares sowie richtiges Ergebnis zu erzielen.
Nun habe ich in PHP ein bisschen probiert. Dieses Ausprobieren hat nicht im Browser stattgefunden, sondern ich habe kleine PHP-Scripte geschrieben und diese auf der Konsole ausführen lassen. Somit musste ich mich nicht mit der Ausgabe via PHP-/HTML-Auszeichnungen befassen, sondern konnte mich auf die reine Syntax und die selbstgestellte Aufgabe konzentrieren.
Als erstes ist es wichtig zu wissen, in welcher Schreibweise ein bereits gefülltes Array im Programmcode zu nutzen ist. Es gibt verschiedene Möglichkeiten, um ein Array zu deklarieren und mit Werten zu füllen bzw. hart programmiert zu füllen.
Da ich die Werte im Array später weiter nutzen möchte, habe ich das Array in eine Variable übernommen:
PHP-Code: <?php $vornamen = array("Hans", "Dieter", "Horst"); ?>
Auf dieses Array kann ich dann zugreifen, indem ich die Variable sowie ein Element aus dem Array in der Konsole ausgeben lasse:
PHP-Code: <?php echo "Das ist der Vorname im ersten Element des Arrays: " . $vornamen[0] . "\n"; ?>
Das ist die Ausgabe in der Konsole dazu:
Zitat:Das ist der Vorname im ersten Element des Arrays: Hans
Möchte ich alle Elemente eines Arrays verarbeiten, z.B. in der Konsole ausgeben lassen, dann komme ich nicht um eine Schleife umhin. Mit einer foreach-Schleife ist die Ausgabe in der Konsole (oder später auch in einer Datei oder Datenbank) machbar:
PHP-Code: <?php foreach($vornamen as $vorname) { echo $vorname ."\n"; } ?>
Das ist die Ausgabe in der Konsole dazu:
Zitat:Hans
Dieter
Horst
Für meine Vorhaben brauche ich später die Anzahl der im Array enthaltenen Elemente. Es gibt viele Lösungsansätze. Aber der wohl einfachste geht über die count-Funktion, ohne das weitere Zählschleifen oder ähnliches programmiert werden müssen.
PHP-Code: <?php echo "Das ist die Anzahl der Elemente im Array der Vornamen: " . count($vornamen) . "\n"; ?>
Das ist die Ausgabe in der Konsole dazu:
Zitat:Das ist die Anzahl der Elemente im Array der Vornamen: 3
Für mich ist es sehr verwunderlich, dass ich das Prinzip des Array zwar immer verstanden habe, aber nie wirklich anwenden konnte. Wenn ich mir die obigen Programmzeilen ansehe, dann muss ich mir an den Kopf fassen. Es ist eigentlich in den Grundfunktion sehr einfach.
Die von mir angedachten Programmteile zur Nutzung von Arrays haben künftig damit zu tun, dass ich eine unbekannte Anzahl Dateien in einem Verzeichnis verarbeiten und spezielle Inhalte aus den Dateien in eine Datenbanktabelle einfügen möchte. Hier ist ein Array auf jeden Fall von Nöten. Und das natürlich kombiniert mit Schleifen. Im Gegensatz zum obigen Beispiel muss ich dann während der Programmlaufzeit das Array füllen. Auch das habe ich getestet. Dazu schreibe ich noch einen anderen Artikel. Denn das ist aufwendiger und spezieller. Hier wollte ich nur die Grundfunktion beschrieben wissen.
Ein assoziatives Array hat einen Schlüssel (Key) und einen Wert (Value). Wenn ein solches Array durchlaufen wird, wird normalerweise der Wert ausgegeben. Das könnte wie folge aussehen.
PHP-Code: <?php foreach ($imap as $detail) { echo $detail . "\n"; } ?>
Die Ausgabe.
Zitat:Sun, 9 Jan 2022 17:11:08 +0100 (CET)
imap
{domain.zzz:993/imap/notls/ssl/novalidate-cert/user="xxx@yyy.zzz"}INBOX
9
0
Bei dieser Art der Ausgabe weiß man aber nicht immer direkt, was mit dem Wert gemeint ist. Also macht es Sinn, den Schlüssel mitzugeben, denn dieser ist für gewöhnlich lesbar und zeigt, um was es sich bei dem Wert handelt. Das sieht dann so aus.
PHP-Code: <?php foreach ($imap as $detailkey => $detailwert) { echo $detailkey .": " . $detailwert . "\n"; } ?>
Die Ausgabe.
Zitat:Date: Sun, 9 Jan 2022 17:17:44 +0100 (CET)
Driver: imap
Mailbox: {domain.zzz:993/imap/notls/ssl/novalidate-cert/user="xxx@yyy.zzz"}INBOX
Nmsgs: 9
Recent: 0
Nun ist ziemlich klar, dass es sich hier um Informationen zu einem IMAP-Konto handelt. Jeder fachkundige Dritte kann also mit dem Ergebnis etwas anfangen bzw. dieses interpretieren.
Oh, Schleifen!
Tja, wann wende ich *While*- und wann wende ich *For*-Schleifen an? Noch so eine Sache, die ich nie wirklich verstanden habe.
|
|
|
MySQLDump - nur neue Daten abfragen |
Geschrieben von: Joopi - 07-01-2023, 10:21 - Forum: Programmieren
- Keine Antworten
|
|
Ich stand vor dem Problem, dass ich eine relativ große Datenbank habe und diese vom lokalen Rechner regelmäßig auf einen externen Webspace transportiert und dort in die Datenbank eingespielt werden muss.
Realisiert habe ich bislang dieses Aufgabe mit mysqldump. Das bedeutet aber, wenn man keine Optionen mitgibt, dass mit der Dumpdatei zunächst alle Tabellen gelöscht werden (drop table), um sie anschließend wieder zu erstellen (create table). Danach werden alle Daten in die Tabelle bzw. Tabellen eingefügt (insert).
Und irgendwann kommt man an einem Punkt, an dem die Datei, auch wenn sie gezippt ist, sehr groß wird und der Import mehr als 30 Minuten dauert.
Also musste eine Lösung her, dass aus der Quelldatenbank des lokalen Rechners nur die ab einem bestimmt Zeitpunkt neu hinzugekommenen Datensätze abfragt werden sowie das Löschen und Erstellen der betroffenen Tabelle unterlassen wird. Es dürfen einfach nur die neuen Datensätze ab Zeitpunkt **X** in die bestehenden Tabellen eingefügt werden.
Und es gibt eine Lösung dazu. Ich habe mich dazu entschieden, diese Lösung mittels Erfassungsdatum, dass in allen Tabellen ein Standardfeld ist, zu versuchen.
Nach einigen Versuchen hatte ich dann die richtige Syntax gefunden, die wie folgt aussieht:
Code: mysqldump --no-create-info --user=user --password="password" datenbank tabelle --where="erfasst>='2022-02-11 19:19:48'" > test.sql
Mit der Option --no-create-info wird sowohl das Löschen als auch das Erstellen von Tabellen verhindert. Ansonsten ist der Befehl zum normalen Befehl von mysqldump nur noch dahingehend abweichend, dass hinter dem Tabellennamen angegeben werden muss, welches Feld und welcher Wert abgefragt werden sollen - --where="erfasst>='2022-02-11 19:19:48'".
Dieser Befehl funktioniert auch mit mehreren Tabellen, die natürlich alle das entsprechend Feld erfasst haben müssen.
Code: mysqldump --no-create-info --user=user --password="password" datenbank tabelle1 tabelle2 tabelle3 --where="erfasst>='2022-02-11 19:19:48'" > test.sql
Und nun geht das Updaten der Datenbank auf dem externen Webspace in Sekundenschnelle. Über diese Lösung habe ich mich riesig gefreut, denn sie bietet mir für andere Sachverhalte viel mehr Spielraum.
|
|
|
|