Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 500
» Foren-Beiträge: 696
Komplettstatistiken
|
Benutzer Online |
Momentan sind 14 Benutzer online » 0 Mitglieder » 10 Gäste AhrefsBot, Crawl, DotBot, bot
|
|
|
Datenbanken sichern |
Geschrieben von: Joopi - 07-01-2023, 11:16 - Forum: Programmieren
- Keine Antworten
|
|
Die Sicherung von Datenbank, MyIsam und/oder InnoDB, ist wichtig. MyIsam-Datenbanken können über deren Dateien gesichert werden, die (unter Debian) in /var/lib/mysql abgelegt werden. Das gilt nicht für InnoDB-Datenbanken.
Darum ist es sehr wichtig, dass von den Datenbanken sogannte Dumps gemacht werden. Dumps sind im Prinzip Sicherungen als Textdatei im sql-Format. Diese können bei Bedarf genauso wieder eingelesen werden.
Es gibt verschiedene Möglichkeiten der Sicherungsstrategie. Man kann einen Gesamtdump machen oder vielleicht eine Gruppe von Datenbanken zusammenfassen oder eben nur einzelne Datenbanken sichern. Die Befehle dazu, die über die Konsole abgesetzt oder in einem Script hinterlegt werden, sind nachfolgend beschrieben.
Sicherung einer einzelnen Datenbank mit Mitgabe des Passwortes:
Code: user@rechner:~$ mysqldump -u user -h localhost --password="pwd" datenbank > one_database.sql
Sicherung mehrerer Datenbanken mit Mitgabe des Passwortes:
Code: user@rechner:~$ mysqldump -u user -h localhost --password="pwd" --databases datenbank1 datenbank2 datenbank3 > several_databases.sql
Sicherung aller Datenbanken mit Mitgabe des Passwortes:
Code: user@rechner:~$ mysqldump -u user -h localhost --password="pwd" --all-databases --events > all_databases.sql
Ich lasse jeden Abend über einen Cronjob von jeder Datenbank einen Dump erstellen, der dann als ZIP-Datei auf die Backup-Festplatte mit Datumsangabe im Dateinamen verschoben wird. Eine Sicherung in meiner Cloud werde ich mir noch überlegen, da ich auch eine Methode finden muss, wie ich ältere Sicherungen automatisiert löschen kann. Ansonsten mülle ich mir nach und nach die Cloud mit unnötigen Dateien voll.
|
|
|
Shellscript aufrufen |
Geschrieben von: Joopi - 07-01-2023, 11:13 - Forum: Programmieren
- Keine Antworten
|
|
Innerhalb eines PHP-Codes kann ein ausführbares Shellscript ausgeführt werden. Das geht mit shell_exec.
PHP-Code: <?php $user = shell_exec("id"); echo "$user"; $berechtigung = shell_exec("ls -l mache_irgendwas.script"); //funktioniert nur so (ohne ls -l): $berechtigung = shell_exec("mache_irgendwas.script"); echo "$berechtigung"; ?>
In einem Shellscript habe ich Funktionen eingebaut, die Bilder renamen und resizen. Zwar bestehen diese Möglichkeiten auch innerhalb von PHP, aber ich benötige das Shellscript auch zu anderen Gelegenheiten. Daher wollte ich das Rad nicht neu erfinden.
Es mag sein, dass der geneigte PHP-Coder kurz vor einem Herzklabaster steht. Ich nutze das aber ausschließlich auf dem lokalen Rechner. Mir genügt es so und ich bin froh zu wissen, dass man überhaupt Shellscripte im PHP-Code integrieren kann.
|
|
|
Primäre Angaben zu Pfad und Datei |
Geschrieben von: Joopi - 07-01-2023, 11:12 - Forum: Programmieren
- Keine Antworten
|
|
Um Informationen zu einem Pfad und/oder einer Datei zu erhalten, wird in PHP die Funktion PATHINFO benutzt. In meinen Lernbeispielen habe ich bislang zwei verschiedene Arten der Anwendung gefunden. Die eine erzeugt ein Array, die andere nutzt eine Variable, die einen String auf nimmt und dann ein Array daraus macht. Oder so ähnlich. Besser kann ich es nicht erklären.
Das erste Beispiel erzeugt ein Array mit 4 Elementen:
PHP-Code: <?php $dateiteile = pathinfo("/media/work_bilder_decode/zz_temp/105b34dd5.jpg");
echo "Das ist der erste Teil der Ausgabe:\n\n";
echo "Pfad ohne Datei: " . $dateiteile['dirname'], "\n"; echo "Dateiname komplett: " . $dateiteile['basename'], "\n"; echo "Extension: " . $dateiteile['extension'], "\n"; echo "Dateiname ohne Extension: " . $dateiteile['filename'], "\n"; ?>
Die Ausgabe hier ist:
Zitat:Das ist der erste Teil der Ausgabe:
Pfad ohne Datei: /media/work_bilder_decode/zz_temp
Dateiname komplett: 105b34dd5.jpg
Extension: jpg
Dateiname ohne Extension: 105b34dd5
Das zweite Beispiel nimmt die Pfad-/Dateiangabe in eine String-Variable auf und wird erst später bei der Übernahme der 4 Bestandteile mit der **PATHINFO**-Funktion bestückt. Der Code sieht dann wie folgt aus:
PHP-Code: <?php $dateiteile2 = "/media/work_bilder_decode/zz_temp/105b34dd5.jpg";
$dir = pathinfo($dateiteile2, PATHINFO_DIRNAME); $base = pathinfo($dateiteile2, PATHINFO_BASENAME); $ext = pathinfo($dateiteile2, PATHINFO_EXTENSION); $datei = pathinfo($dateiteile2, PATHINFO_FILENAME);
echo "Das ist der zweite Teil der Ausgabe:\n\n";
echo "Pfad ohne Datei: " . $dir . "\n"; echo "Dateiname komplett: " . $base . "\n"; echo "Extension: " . $ext . "\n"; echo "Dateiname ohne Extension: " . $datei . "\n"; ?>
Die Ausgabe zu dieser Codierung sieht dann so aus (nicht anders als oben).
Zitat:Das ist der zweite Teil der Ausgabe:
Pfad ohne Datei: /media/work_bilder_decode/zz_temp
Dateiname komplett: 105b34dd5.jpg
Extension: jpg
Dateiname ohne Extension: 105b34dd5
Welche Art der Codierung später mal genutzt werden soll oder muss, hängt wohl davon ab, was man eigentlich erreichen möchte. Da beides zum gleichen Ergebnis führt, ist es vielleicht egal. Das wird sich später mal herausstellen müssen.
Im Moment bin ich froh, dass ich das endlich verstanden habe und nun auch anwenden kann. In Verbindung mit Dateilisten, die mittels Array bearbeitet werden, könnte diese neue Erkenntnis für meine Programmiervorhaben sehr von Vorteil sein.
Die einfache Anwendung von Arrays habe ich mitterweile auch einigermaßen gut verstanden.
|
|
|
mehrere Dateien löschen |
Geschrieben von: Joopi - 07-01-2023, 11:09 - Forum: Programmieren
- Keine Antworten
|
|
Das Löschen von Dateien in der Konsole kann relativ einfach mit rm erfolgen. Dieser Befehl steht für remove.
Will man mehrere Dateien löschen, die z.B. alle die Extension txt haben, so ist der Befehl rm *.txt anwendbar.
In einem PHP-Skript ist der Befehl unlink zum Löschen einer Datei aufzurufen. Allerdings kann man nicht, wie es in der Konsole möglich ist, einfach mehrere Dateien löschen, indem man so vorgeht wie beim Shellbefehl.
Um in einem Ordner mehrere Dateien zu löschen, die z.B. alle die Extension .md haben, ist folgende Codezeile im Skript notwendig:
PHP-Code: <?php array_map('unlink', glob( "/home/tuennes/*.md")); ?>
Damit werden alle Dateien in dem vorgegebenen Ordner gelöscht, die die Extension .md haben.
Zitat:glob — Findet Dateinamen, die mit einem Muster übereinstimmen
|
|
|
Formularfeld trimmen |
Geschrieben von: Joopi - 07-01-2023, 11:06 - Forum: Programmieren
- Keine Antworten
|
|
Dann und wann schleichen sich beim Eingeben von Werten gerne mal Leerzeichen am Beginn oder Ende ein. Besonders dann, wenn man diese Werte aus anderen Texten oder Webseiten kopiert und in die Zwischenablage eingügt. Die Leerzeichen werden dann mit in die Datenbank geschrieben und führen oftmals dazu, dass später diese Werte bei Suchabfragen nicht im Ergebnis auftauchen.
Hier hilft die Funktion trim.
PHP-Code: <?php trim($_REQUEST['n_ipdec_von']); ?>
PHP-Code: <?php $n_ipdec_von = trim($_REQUEST["n_ipdec_von"]); ?>
Analog zur Prüfung, ob ein Formularfeld überhaupt gefüllt ist, ist das Trimmen m.E. eine unverzichtbare Maßnahme, um eben keine falschen Werte in die Tabellen zu erfassen.
|
|
|
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
|
|
|
|