RSS

  • YouTube
  • LinkedIn
  • Google

Servidor de Email –; Teil 3 ; Taubenschlag

Dies ist der dritte Teil des Prozesses der Erstellung des Mail-Servers auf einem CentOS 8. Wenn Sie durch Zufall hierher gekommen, Lesen Sie zuerst die vorherigen Publikationen

Teil 1 ; Installation von Paketen

Teil 2 ; Konfigurieren von MariaDB

Dovecot ist ein MDA (Mail Delivery Agent) Das ist ein Mittel, das Nachrichten von Postfix an virtuellen Meldungsfelder trägt. In diesem Abschnitt konfigurieren wir die Dovecot-Installation zu zwingen Sie Benutzer, SSL zu verwenden, wenn sie eine Verbindung herstellen, auf diese Weise niemals Passwörter im Klartext-Modus senden.

Ich habe gerne immer die originalen-Dateien von jeder Definition für zu halten, wenn ich am Ende immer die Einstellungen verloren. Ich kann sagen, dass dieser Schritt nicht erforderlich ist, wenn Sie dieses Tutorial vollständig durchführen, Jedoch, Wenn Sie bereits eine vorherige Konfiguration und es nur benutzt, um es zu verbessern empfehle ich Sie Kopien Ihrer Dateien erstellen.

In unserem Fall, die Konfigurationsdateien werden im /etc/dovecot/CONF.d/. Wir machen dann die Kopie mit dem Befehl:



Lesen Sie weiter >>

Servidor de Email –; Teil 2 ; MariaDB

Dies ist der zweite Teil des Prozesses der Erstellung des Mail-Servers in einem CentOS 8. Wenn Sie durch Zufall hierher gekommen, besser lesen Sie den vorherigen Beitrag zuerst auf der Installation von Paketen

Warum MariaDB/MySQL verwenden?

Zuallererst muss ich klarstellen, dass ich es vorziehe, PostgreSQL zum Nachteil von MariaDB/MySQL aus vielen Gründen zu verwenden., Jedoch, Es gibt eine, die schwer gegen die Verwendung von PostgreSQL auf einem einheitlichen Server mit WordPress und E-Mail-Dienste wiegt, was die einfache Tatsache ist, dass WP keine native Unterstützung für PostgreSQL hat. Weitere Informationen hierzu finden Sie in der offiziellen WordPress-Dokumentation in diesem Link. Wie ich auf persönlichen Erfahrungen, um dieses Dokument zu schreiben und auch für kleine Dienstleistungen, ich verwende, was häufiger und erschwinglicher ist. Wenn die Verwendung von PostgreSQL für Sie von Interesse ist, Sie können dieses Dokument später lesen, wo ich Ihnen zeigen werde, wie Sie von MariaDB zu PostgreSQL migrieren.

Konfigurieren von MariaDB/MySQL

Angenommen, Sie folgen in den Fußstapfen dieses Handbuchs, Sie haben eine MariaDB-Installation noch nicht konfiguriert. Wenn Sie bereits über eine funktionale Installation verfügen, kann zum nächster Schritt.



Lesen Sie weiter >>

DataTables + HTML 5 Export-Buttons + Laravel-Mix (Webpack)

In den letzten Tagen, Ich habe ein Problem versucht, verwenden Sie erlebt. DataTables und Bootstrap 4 mit Unterstützung für den Export der Ergebnisse Excel und PDF-DATEI mit Hilfe Laravel-Mix. Nach Stunden und Stunden damit, alle Skripte zur Zusammenarbeit zu setzen, Ich Gewinne schließlich. Also, Ich beschließe, dieses kleine schreiben So wird es gemacht für diejenigen mit derselben Art von Schwierigkeiten.



Lesen Sie weiter >>

J5 Links

Hier sind einige nützliche Links zu Handy Samsung J5.

Google-Konto Überprüfung Bypass

Odin herunterladen 3

Odin können Sie Ihre Android-Firmware ohne viel Aufhebens zu aktualisieren.

Odin3 ist eine kostenlose PC (Windows) Anwendung der Blitz kann (und die Wurzel) einige Android-basierte Handys.

Mit Odin3, Sie können Flash-Roms in Ihrem Samsung-Handy. Sie können unterstützte Version des Android-Betriebssystems auf Ihrem Smartphone installieren, bevor Ihrem Handyhersteller hat ein Update veröffentlicht, setzen Sie auf die bleeding Edge Software. Sobald Ihr Telefon verwurzelt worden

Lesen Sie weiter >>

Verwendung von jQueryMask Plugin in Format Datumsangaben in verschiedenen Mustern

jQuery Plugin Maske ist eine große Javascript-Bibliothek, Formatfelder für Präsentation und/oder eine richtig Eingabe Erzwingen von Benutzern.

Hier, Ich zeige, wie Eingaben können oder eine andere HTML-Element anzuzeigende Daten wann die Quelle hat eines anderen Format als Zielelement.

Beispiel:

  • Wir haben eine Datetime mit Jahr-Monat-Tag-Stunde:Minute:Sekunden und müssen nur die Jahr/Monat/Tag Teil.
  • Wir haben da Datum in Jahr-Monat-Tag und Notwendigkeit zu formatieren Tag/Monat/Jahr.

jQueryMask ist sehr einfach zu bedienen. Sie brauchen nicht zu viel zu verbergen, was Sie brauchen. Schauen Sie sich Beispiele auf seiner website.

Benötigen Sie ein einfaches Datum-Feld formatieren (auch in einem nicht-Input-element), benutzen Sie einfach den Code unten.

jQuery('[Daten-Rolle ="Datum"]).Maske("TC99/M9/D9", {
        Platzhalter: "____/__/__",
        Übersetzung: {
            "D": {Muster: /[0-3]/, optional: falsch, rekursive: wahr},
            "M": {Muster: /[01]/, optional: falsch, rekursive: wahr},
            "T": {Muster: /[12]/, optional: falsch, rekursive: wahr},
            "(C)": {Muster: /[09]/, optional: falsch, rekursive: wahr}
        }
    });

Der obige Code kann Maske und Termine im Pre zu validieren JAHR/MONAT/TAG Format.

Mit einem Eingang wie

<;input Type ="Text" Daten-Rolle ="Datum" Wert ="2018-06-11 15:47" />;

würde zu seinem Wert geändert werden 2018/06/11.

Wenn Sie versuchen, ein anderes Datum eingeben (nach löschen, Natürlich) Sie können nicht mit einer Zahl anders beginnen. 1 oder 2. Dieser Grund ist, dass unsere Maske eine Übersetzung erfolgen wenn Zeichen zulassen. Wenn das Muster nicht übereinstimmt, der Char wird gelöscht.

The meaning of “;TC99/M9/D9; Maske ist:

  • Muss beginnen mit 1 oder 2 (Übersetzung T: /[12]/ ; Benutzerdefiniertes format)
  • Nummer muss 0 oder 9 (Übersetzung C: /[09]/ ; Benutzerdefiniertes format)
  • Müssen eine Nummer haben (Alle) (Übersetzung 9 ; MaskPlugin Kern-format)
  • Müssen eine Nummer haben (Alle) (Übersetzung 9 ; MaskPlugin Kern-format)
  • Ein Schrägstrich wird automatisch hinzugefügt ( / )
  • Nummer muss 0 oder 1 (Übersetzung M: /[01]/ ; Benutzerdefiniertes format)
  • Müssen eine Nummer haben (Alle) (Übersetzung 9: MaskPlugin Kern-format)
  • Ein Schrägstrich wird automatisch hinzugefügt ( / )
  • Nummer muss 0, 1, 2 oder 3 (Übersetzung D: /[0-3]/ ; Benutzerdefiniertes format)
  • Müssen eine Nummer haben (Alle) (Übersetzung 9: MaskPlugin Kern-format)

Natürlich, Es gibt keine echte Validierung. You can type “;2999/19/39; und das ist kein gültiges Datum, aber ist fast fertig.

Also, auf andere Weise formatieren, Ändern Sie einfach Maske Parameterreihenfolge.

Aber, Wenn die Quelle-Datum in ein anderes Muster ist, wie Monat/Tag/Jahr, die Maske funktionieren nicht. The date output for “;06/11/2018 15:40; will be weird “;1018/15/0;.

Anderes Datum behandeln werden Formate mehr als einfache Maske benötigt. Brauchen wir eine Funktion.

Suchen Sie den folgenden code

        Var MaskBehaviorDateTime = Funktion (Val, und, Feld) { // Diese Funktion muss eine Maske Var Msk zurück = "TC99/M9/D9"; // Unser gewünschtes Format Var V = field.is('input') ? Field.Val() : Field.Text(); // ist eine Eingabe oder eine andere HTML-element??
                    V = v.replace(/\D/g, ''); // Streifen nicht stellen, wenn (v != '') { // hat Wert?
                        if ((/^[01]\d[0-3]\dd{4}$/).Test(v)) { //Testen, ob Muster Monat/Tag/Jahr nur V = v.replace(/^(\d{4})(\d{2})(\d{2})$/, "$3 / $2 / $1");
                        } elseif ((/^[01]\d[0-3]\dd{4}[012]\d[0-5]\d$ /).Test(v)) { //Testen Sie, ob Muster Monat/Tag/Jahr Stunde:Minute V = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, "$3 / $2 / $1");
                            // Wenn wir, Stunde und Minute zeigen müssen, zurückgegebene Maske muss auch geändert werden
                            // V = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, "$3 / $2 / $1 $4:$5');
                            // MSK = "TC99/M9/D9 h9:M9 "; // h und m muss existiert in Übersetzungsoptionen
                        }
                        Field.is('input') ? Field.Val(v) : Field.Text(v);
                    }
                    Msk zurück;
                },
                OptionsDateTime = {
                    Platzhalter: "____/__/__",
                    Übersetzung: {
                        "D": {Muster: /[0-3]/, optional: falsch, rekursive: wahr},
                        "M": {Muster: /[01]/, optional: falsch, rekursive: wahr},
                        "T": {Muster: /[12]/, optional: falsch, rekursive: wahr},
                        "(C)": {Muster: /[09]/, optional: falsch, rekursive: wahr},
                        "h": {Muster: /[0-2]/, optional: wahr, rekursive: wahr},
                        "m": {Muster: /[0-5]/, optional: wahr, rekursive: wahr}
                    }
                };
        jQuery('[Daten-Rolle ="Datum"]').Maske(maskBehaviorDateTime,  optionsDateTime);

Jetzt haben wir zwei weitere Übersetzung Muster (h und m). h bedeutet, dass die n-Indexposition zahlen müssen 0, 1 oder 2 und m Zahlen zwischen 0 und 5. Halten Sie im Verstand, was Fall zählt.

Mit dem obigen code, Wir können formatieren und Datum auf verschiedene Weise anzeigen. Ändern Sie einfach .Test() und .Ersetzen() Muster, Ihre gewünschte Muster zu füllen.

Dies ist der Code, den ich verwende, um Datenbank Datetime Felder mit Jahr-Monat-Tag Stunden formatieren:MINUTE:Zweiter in HTML-Elementen mit Tag/Jahr/Monat-Stunde:MINUTE

    Var MaskBehaviorDateTime = Funktion (Val, und, Feld) {
            // Wenn bereits ein Wert vorhanden ist, die Formate in der standard tt/mm/jjjj mit der optionalen hh:mm:SS-Var-Msk = "TC99/M9/D9 h9:M9:S9";
            if (Attr-Feld.("Original Datumswert") == undefined) {
                Var o = field.is('input') ? Field.Val() : Field.Text();
            } anderes {
                Var Attr = Feld.("Original Datumswert");
            }
            V = die. ersetzen(/\D/g, '');
            if (v != '') {
                Attr-Feld.("Original Datumswert") == undefined &;&; Attr-Feld.("Original Datumswert", die);
                if ((/^[12][09]\d{2}[01]\d[0123]\d$ /).Test(v)) { // Jahr/Monat/Tag V = v.replace(/^(\d{4})(\d{2})(\d{2})$/, "$3 / $2 / $1");
                    MSK = "D9/M9/TC99";
                } elseif ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d$ /).Test(v)) { // Jahr/Monat/Tag Stunde:Minute V = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/, "$3 / $2 / $1 $4:$5');
                    MSK = "D9/M9/TC99 h9:M9";
                } elseif ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d[0-5]\d$ /).Test(v)) { // Jahr/Monat/Tag Stunde:Minute:zweite V = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, "$3 / $2 / $1 $4:$5:$6');
                    MSK = "D9/M9/TC99 h9:M9:S9";
                }
                Field.is('input') ? Field.Val(v) : Field.Text(v);
            }

            Msk zurück;
        },
        OptionsDateTime = {
            Platzhalter: "__/__/____",
            Übersetzung: {
                "D": {Muster: /[0-3]/, optional: falsch, rekursive: wahr},
                "M": {Muster: /[01]/, optional: falsch, rekursive: wahr},
                "T": {Muster: /[12]/, optional: falsch, rekursive: wahr},
                "(C)": {Muster: /[09]/, optional: falsch, rekursive: wahr},
                "h": {Muster: /[0-2]/, optional: wahr, rekursive: wahr},
                "m": {Muster: /[0-5]/, optional: wahr, rekursive: wahr},
                "s": {Muster: /[0-5]/, optional: wahr, rekursive: wahr}
            },
        };
    jQuery('[Daten-Rolle ="Datum"]').Maske(maskBehaviorDateTime,  optionsDateTime);

Mit einem Eingang wie

<;input Type ="Text" Daten-Rolle ="Datum" Wert ="2018-06-11 15:40">;

Die Ausgabe wird

11/06/2018 15:40

Hope this helfen Sie!

Mehrere Werte verbindlich in PDO-SQL-Anweisung (PDOStatement)

Manchmal müssen wir einen einzelnen Wert über mehrere Spalten suchen, beim Erstellen von SQL-Anweisungen.

Nehmen wir an der folgenden Tabelle

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Wir benötigen einen einzelnen Wert auf Spalten suchen B,D und E Wir werden die folgende Anweisung verwenden, müssen

ID AUSWÄHLEN, COLUMN_A,(...Spalten..), COLUMN_E 
FROM ENTITY_ONE WHERE COLUMN_B LIKE '%search_value%' OR COLUMN_D LIKE '%search_value%' OR COLUMN_E LIKE '%search_value%';

Wir können in PHP-code

$q = '%search_value%';
$sql = "Auswählen * VON ENTITY_ONE WO COLUMN_B LIKE '$q' ODER COLUMN_D LIKE '$q' ODER COLUMN_E LIKE '$q'; 
$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Abfrage($Sql);

Gut, this can work but we know that isn’;t der beste Ansatz. Wir brauchen verbindliche Werte verwenden, um SQL-Injection und andere schädlichen Leckereien zu vermeiden.

Also, der Code kann geändert werden

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE ? ODER COLUMN_D LIKE ? ODER COLUMN_E LIKE ?; 
$args = [$Q, $Q, $Q]; // Wir brauchen je einen Eintrag "?" on instruction
$pdo = new PDO($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql);
$stmt->;Ausführen($Args);

Viel besser, aber, beim Bau von komplexen SQL-Anweisung, things can be confusing with lots of arguments and don’;Vergessen Sie nicht: BESTELLEN FRAGEN.

Glücklich kann PDO binden Werte in unterschiedlicher Reihenfolge wenn Bindungen mit benannt werden..

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE :First_arg oder COLUMN_D wie :Second_arg oder COLUMN_E wie :third_arg; 

$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql); 
// Eine Möglichkeit $args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Wir brauchen je einen Eintrag ":Name" on instruction 
$stmt->;Ausführen($Args); 
// Another way
$stmt->;bindValue(':Third_arg ". $Q);
$stmt->;bindValue(':First_arg ", $Q); 
$stmt->;bindValue(':Second_arg ", $Q);

$stmt->;Ausführen(); 

Hmm, seems that this isn’;t gut genug. Wir ändern nur die Verwendung von 1-indizierte Platzhalter um eine :benannten Platzhalter. There’;s kein Gewinn jenseits der Code lesbar und die Möglichkeit, in beliebiger Reihenfolge zu binden.

Ja, aber jetzt können wir die beste Vorgehensweise tun, wenn Sie einen einzigartigen Suchbegriff in mehrere Spalten verwenden. Wir können nur eine Bindung an eine oder mehrere :named placeholders ’;PDO ist smart und clever. Schauen Sie unsere endgültige Code hier.

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE :unique_arg ODER COLUMN_D LIKE :unique_arg ODER COLUMN_E LIKE :unique_arg; 
$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql); 
// One way 
$args = [':unique_arg' =>; $Q]; // Wir können alle binden :name with only one term 
$stmt->;Ausführen($Args); 
// Another way 
$stmt->;bindValue(':Unique_arg ", $Q); 
$stmt->;Ausführen(); 

Erspart eine Menge Tipparbeit beim Schreiben viele SQL-Anweisung mit demselben argument.