Was Sie von PHP 5.5 erwarten dürfen

Das erste PHP 5.5 alpha wurde veröffentlicht. Nachdem wir etwas Zeit zum Testen und Experimentieren hatten, können wir Ihnen jetzt einen umfassenden Überblick darüber geben, worauf Sie sich freuen können!


Installation

Wenn Sie diesen Artikel mitverfolgen möchten, müssen Sie PHP 5.5 selbst installieren. Den Link zum Quellpaket finden Sie hier. Wenn Sie die Windows-Binärdatei benötigen, können Sie sie auch von derselben Seite herunterladen.

Wenn Sie den Quellcode heruntergeladen haben, extrahieren Sie alles in einen Ordner und navigieren Sie mit Ihrem bevorzugten Terminalprogramm zu ihm. Sie können PHP an einem beliebigen Ort installieren, aber aus Gründen der Bequemlichkeit erstellen Sie im Stammverzeichnis meines Laufwerks ein Verzeichnis mit dem Namen PHP5.5. Geben Sie Folgendes in Ihr Terminal ein, um einen neuen Ordner zu erstellen und den Benutzer dann zum Besitzer des Ordners zu machen:

 sudo mkdir /PHP5.5 sudo chown Benutzername /PHP5.5

Als Nächstes müssen Sie entscheiden, welche Erweiterungen und Funktionen mit Ihrer PHP-Kopie installiert werden sollen. Da es sich um eine Alpha-Version handelt, die nur für Tests gedacht ist, muss ich mir keine Sorgen machen, dass sie voll funktionsfähig ist. Für dieses Tutorial werde ich nur cURL installieren, aber es gibt noch andere Dinge, die Sie hinzufügen möchten, z. B. MySQL oder ZIP-Unterstützung. Um eine vollständige Liste der Konfigurationsoptionen anzuzeigen, führen Sie Folgendes aus:

 ./ configure -h

Neben der Option zur Installation von cURL müssen zwei weitere Eigenschaften festgelegt werden: die Präfix und mit-config-file-pfad Möglichkeit. Diese beiden Eigenschaften bestimmen den Speicherort der PHP-Installation und der .ini Datei. Geben Sie im Terminal Folgendes ein:

 ./ configure --prefix = / PHP5.5 --with-config-file-path = / PHP5.5 --with-curl = ext / curl make make install

Die erste Zeile konfiguriert PHP mit cURL und setzt den Speicherort auf den Ordner, den wir zuvor erstellt haben. Die nächsten beiden Zeilen erstellen PHP und verschieben die Dateien in das angegebene Verzeichnis. Der nächste Schritt ist das Kopieren der Probe php.ini Datei in den PHP-Ordner. Führen Sie dazu Folgendes aus:

 cp php.ini-development /PHP5.5/php.ini

Sie sollten jetzt alles richtig installiert haben. Die einfachste Möglichkeit, diese neue Version zu testen, besteht darin, den integrierten Webserver auszuführen. Navigieren Sie zu Behälter Ordner in der PHP5.5 Verzeichnis (cd /PHP5.5/bin) und Typ ./ php -t / Pfad / Nach / Verzeichnis -S 0.0.0.0:4444.

  • Das -t Mit dieser Option wird das Stammverzeichnis des Servers festgelegt (d. h. der Ort, an dem Sie Ihre PHP-Dateien ablegen).
  • Das -S Diese Eigenschaft legt die IP-Adresse und die Portnummer fest, an die der Server gebunden werden soll. Verwenden 0,0,0,0 für die IP-Adresse weist den Server an, alle IP-Adressen abzuhören (z. B. localhost, 127.0.0.1, 192.168.0.100 usw.).

Wenn alles gut geht, sollten Sie mit einer Meldung darüber informiert werden, dass der Server die angegebene IP-Adresse / den angegebenen Port überwacht, und es wird Ihnen das Dokumentstammverzeichnis angezeigt, von dem aus es bedient wird. Wir können jetzt mit den neuen Funktionen spielen!


Generatoren

Mit Generatoren können Sie benutzerdefinierte Funktionen erstellen, die den Status zwischen den Läufen beibehalten.

Die größte Ergänzung zu PHP 5.5 muss Generatoren sein. Mit Generatoren können Sie benutzerdefinierte Funktionen erstellen, die den Status zwischen den Läufen beibehalten. Es funktioniert ein neues Schlüsselwort, genannt Ausbeute, die in einer Funktion sowohl zur Eingabe als auch zur Ausgabe von Daten verwendet werden kann.

Wenn die Funktion zu einer Zeile gelangt, die den Fließbefehl enthält, wird PHP die Ausführung der Funktion einfrieren und den Rest Ihres Programms ausführen. Wenn Sie die Funktion aufrufen, um fortzufahren, entweder durch Weiterleiten oder durch das Senden von Daten, kehrt PHP zur Funktion zurück und sucht dort weiter, wo sie aufgehört hat, und behält die Werte aller bis dahin definierten lokalen Variablen bei.

Das klingt auf den ersten Blick vielleicht etwas kühl, aber wenn Sie darüber nachdenken, eröffnet dies viele interessante Gestaltungsmöglichkeiten. Zum einen werden die Auswirkungen anderer Programmiersprachen simuliert, die "Lazy Evaluation" haben, wie Haskell. Nur so können Sie unendliche Datensätze definieren und mathematische Funktionen nach ihrer eigentlichen Definition modellieren. Abgesehen davon müssen Sie nicht so viele globale Variablen erstellen. Wenn eine Variable nur für eine bestimmte Funktion gedacht ist, können Sie sie in einen Generator einschließen. Dinge wie Zähler werden automatisch vom Generator selbst in Form des Schlüssels des zurückgegebenen Objekts ausgeführt.

Nun, das ist genug Theorie für jetzt; Lassen Sie uns einen Generator in Aktion betrachten. Um zu beginnen, navigieren Sie zu dem Dokumentstamm, den Sie beim Ausführen des PHP-Servers definiert haben, und erstellen Sie eine Datei mit dem Namen "index.php". Öffnen Sie nun die Datei und geben Sie Folgendes ein:

 Funktion fibonacci () $ a = 0; $ b = 1; while (wahr) $ a = $ a + $ b; $ b = $ a - $ b; ergeben $ a; 

Dies ist die "Hello World" -Funktion von unendlichen Datensätzen. Diese Funktion gibt alle Fibonacci-Zahlen aus. Um den Generator zu verwenden, müssen Sie nur Folgendes eingeben:

 $ fib = Fibonacci (); $ fib-> current (); $ fib-> next (); $ fib-> current (); //… 

Was hier passiert ist, wir machen $ fib ein Generatorobjekt, und dann haben Sie Zugriff auf die darunter liegenden Befehle, wie z aktuell() und Nächster(). Das aktuell() Funktion gibt den aktuellen Wert des Generators zurück; Dies ist der Wert dessen, was Sie in der Funktion erzielt haben - in unserem Fall, $ a. Sie können diese Funktion mehrmals aufrufen und erhalten immer denselben Wert, da die aktuell() Die Funktion weist den Generator nicht an, den Code weiterhin auszuwerten. Dort ist das Nächster() Funktion kommt herein; Nächster() wird verwendet, um den Iterator aufzufrieren und mit der Funktion fortzufahren. Da unsere Funktion in einem Unendlichen liegt während Schleife, wird es bei der nächsten gerade wieder einfrieren Ausbeute Befehl, und wir können den nächsten Wert mit einem weiteren Aufruf an aktuell().

Generatoren haben den Vorteil, dass die lokalen Variablen persistent sind.

Wenn Sie in der Vergangenheit so etwas erreichen mussten, müssten Sie eine Art von setzen zum Schleife, die die Werte in ein Array vorberechnet und nach einer bestimmten Anzahl von Iterationen (z. B. 100) stoppt, um PHP nicht zu überlasten. Der Vorteil für Generatoren ist, dass die lokalen Variablen persistent sind und Sie einfach schreiben können, was die Funktion tun soll, je nachdem, wie sie es tun soll. Ich meine damit, dass Sie einfach die Aufgabe schreiben und sich keine Gedanken über globale Variablen machen und wie viele Iterationen ausgeführt werden sollen.

Der andere Weg Ausbeute kann verwendet werden, um Daten zu empfangen. Es funktioniert auf die gleiche Weise wie zuvor: wenn die Funktion mit der Zeile zu einer Zeile kommt Ausbeute Stichwort, wird es aufhören, aber anstatt Daten mit zu lesen aktuell(), wir geben ihm Daten mit der senden() Funktion. Hier ist ein Beispiel dafür in Aktion:

 function Logger () $ log_num = 1; while (wahr) $ f = Ertrag; Echo "Log #". $ log_num ++. ":". $ f;  $ logger = Logger (); für ($ i = 0; $ i<10; $i++) $logger->senden ($ i * 2); 

Dies ist ein einfacher Generator zum Anzeigen einer Protokollnachricht. Alle Generatoren starten pausiert; ein Anruf an senden (oder auch aktuell) startet den Generator und fährt fort, bis a erscheint Ausbeute Befehl. Das senden Der Befehl gibt dann die gesendeten Daten ein und verarbeitet die Funktion weiter, bis sie zum nächsten kommt Ausbeute. Jeder nachfolgende Anruf an senden wird eine Schleife verarbeiten; Die gesendeten Daten werden in eingegeben $ f, und dann weiter, bis es wieder zum nächsten zurückkehrt Ausbeute.

Warum sollte man das nicht einfach in eine reguläre Funktion bringen? Nun, Sie könnten dies tun, aber Sie benötigen entweder eine separate globale Variable, um die Protokollnummer zu verfolgen, oder Sie müssen eine benutzerdefinierte Klasse erstellen.

Stellen Sie sich Generatoren nicht als eine Möglichkeit vor, etwas zu tun, das niemals möglich war, sondern eher als Werkzeug, um Dinge schneller und effizienter zu erledigen.

Sogar unendliche Mengen waren möglich, aber es müsste die Liste jedes Mal von Anfang an erneut verarbeitet werden (d. H. Die Mathematik durchlaufen, bis sie zum aktuellen Index kommt) oder alle ihre Daten in globalen Variablen speichern. Mit Generatoren ist Ihr Code viel sauberer und präziser.


Listen in für jeden Aussagen

Das nächste Update, das ich als sehr hilfreich empfunden habe, ist die Möglichkeit, ein verschachteltes Array in eine lokale Variable in a aufzuteilen für jeden Aussage. Das Liste Konstrukt gibt es schon eine Weile (seit PHP4); Es ordnet eine Liste von Variablen einem Array zu. Also, anstatt etwas zu schreiben:

 $ data = Array ("John", "Smith", "032-234-4923"); $ fName = $ data [0]; $ lName = $ data [1]; $ cell = $ data [2];

Sie könnten einfach schreiben:

 $ data = Array ("John", "Smith", "032-234-4923"); Liste ($ fName, $ lName, $ cell) = $ data;

Das einzige Problem bestand darin, dass Sie, wenn Sie ein Array von Arrays (ein verschachteltes Array) mit Informationen haben, die Sie zuordnen möchten, diese nicht mit einem durchgehen können für jeden Schleife. Stattdessen müssten Sie das zuweisen für jeden Ergebnis in eine lokale Variable und ordnen Sie es dann mit einem Liste Konstruiere nur innerhalb der Schleife.

Ab Version 5.5 können Sie den Middle Man ausschneiden und Ihren Code bereinigen. Hier ist ein Beispiel für den alten Weg im Vergleich zum Neuen:

 // - Alte Methode - // foreach ($ parentArr als $ childArr) list ($ one, $ two) = $ childArr; // Weiter mit Schleife // - Neue Methode - // foreach ($ parentArr as list ($ one, $ two)) // Mit Schleife fortfahren

Der alte Weg scheint nicht zu viel Mühe zu sein, aber er ist unübersichtlich und macht den Code weniger lesbar.


Einfache Passwort-API

Auf der in meinem Mac integrierten Grafikkarte konnte ich pro Sekunde über 200 Millionen Hashes durchlaufen!

Nun, dies erfordert ein wenig Wissen über Hashes und Verschlüsselung, um sich voll einschätzen zu können.

Der einfachste Weg, ein Passwort in PHP zu hassen, war die Verwendung von MD5 oder eines SHA-Algorithmus. Das Problem mit Hash-Funktionen wie diesen ist, dass sie unglaublich einfach zu berechnen sind. Sie sind nicht mehr nützlich für die Sicherheit. Heutzutage sollten sie nur zur Überprüfung der Integrität einer Datei verwendet werden. Ich habe einen GPU-Hasher auf meinem Computer installiert, um diese Behauptung zu testen. Auf der in meinem Mac integrierten Grafikkarte konnte ich pro Sekunde über 200 Millionen Hashes durchlaufen! Wenn Sie engagiert waren und in ein erstklassiges Multi-Grafikkarten-Setup investiert haben, könnten Sie möglicherweise eine Milliarde Hashes durchlaufen.

Die Technologie für diese Methoden sollte nicht von Dauer sein.

Wie können Sie dieses Problem beheben? Die Antwort ist, dass Sie dem Algorithmus eine einstellbare Belastung auferlegen. Was ich damit meine, ist, dass Sie es schwer zu verarbeiten machen. Nicht, dass es einige Sekunden pro Hash dauern sollte, da dies die Benutzererfahrung ruinieren würde. Stellen Sie sich jedoch vor, Sie hätten eine halbe Sekunde für die Generierung benötigt. Dann würde ein Benutzer die Verzögerung wahrscheinlich nicht einmal bemerken, aber jemand, der versucht, brutal zu handeln, müsste Millionen von Versuchen durchlaufen - wenn nicht mehr -, und alle halben Sekunden würden sich auf Jahrzehnte und Jahrhunderte summieren. Was ist mit dem Problem, dass Computer im Laufe der Zeit schneller werden? Hier kommt der "verstellbare" Teil ins Spiel: Von Zeit zu Zeit würden Sie die Komplexität erhöhen, um einen Hash zu generieren. Auf diese Weise können Sie sicherstellen, dass immer dieselbe Zeit benötigt wird. Dies ist, was die Entwickler von PHP versuchen, die Menschen dazu zu ermutigen.

Die neue PHP-Bibliothek ist ein Hashing-Workflow, in dem Benutzer Hashes und ihre jeweiligen Komplexitäten im Laufe der Zeit leicht verschlüsseln, überprüfen und aktualisieren können. Derzeit wird nur der bcrypt-Algorithmus ausgeliefert. Das PHP-Team hat jedoch eine Option namens default hinzugefügt, die Sie verwenden können. Ihre Hashes werden automatisch auf den sichersten Algorithmus aktualisiert, wenn neue hinzugefügt werden.

Bcrypt funktioniert so, dass es Ihr Passwort durch Blowfish-Verschlüsselung ausführt x Wenn Sie jedoch Blowfish mit einem Schlüssel verwenden, um ihn später umzukehren, wird der vorherige Lauf als Schlüssel für die nächste Iteration übergeben. Laut Wikipedia läuft Ihr Passwort durch 2 zum x Menge. Das ist der Teil, den Sie anpassen könnten. Angenommen, Sie möchten jetzt eine Kostenstufe von 5 verwenden: bcrypt führt Ihren Hash aus 2 zum 5, oder 32 mal. Dies kann wie eine niedrige Zahl erscheinen, aber da der Parameter cost die Funktion exponentiell anpasst, wenn Sie ihn auf 15 ändern, führt die Funktion 32768-mal durch. Die Standardkostenhöhe beträgt 10, diese ist jedoch im Quellcode konfigurierbar.

Betrachten wir die Theorie aus dem Weg und betrachten wir ein vollständiges Beispiel.

 $ pass = "Secret_Password"; $ hash = password_hash ($ pass, PASSWORD_BCRYPT, array ('cost' => 12, 'salt' => "twenty.two.letter.salt")); if (password_verify ($ pass, $ hash)) if (password_needs_rehash ($ hash, PASSWORD_DEFAULT, array ('cost' => 15))) $ hash = password_hash ($ pass, PASSWORD_DEFAULT, array ('cost' =>.) fünfzehn));  // Hier etwas mit Hash machen. 

Das password_hash Die Funktion akzeptiert drei Parameter: das zu hashende Wort, eine Konstante für den Hash-Algorithmus und eine optionale Liste von Einstellungen, zu denen der Salt und die Kosten gehören. Die nächste Funktion, password_verify, stellt sicher, dass eine Zeichenfolge mit dem Hash nach der Verschlüsselung übereinstimmt, und schließlich der password_needs_rehash Funktion stellt sicher, dass ein Hash den angegebenen Parametern folgt. In unserem Fall setzen wir beispielsweise die Hash-Kosten auf zwölf, aber hier geben wir fünfzehn an, sodass die Funktion zurückkehrt wahr, was bedeutet, dass es erneut gewaschen werden muss.

Sie haben das vielleicht schon bemerkt password_verify und password_needs_rehash Funktionen müssen Sie nicht die verwendete Hashmethode, das Salz oder die Kosten angeben. Dies liegt daran, dass diese Details der Hash-Zeichenfolge vorangestellt werden.

Salze werden verwendet, um zu verhindern, dass Hashes in den Regenbogentisch vorberechnet werden.

Der Grund, warum es in Ordnung ist, die Kosten und das Salz zusammen mit dem Hash zu bündeln und nicht geheim zu halten, liegt daran, wie das System seine Stärken zusammenbringt. Die Kosten müssen kein Geheimnis sein, da es sich um eine Zahl handelt, die den Server ausreichend belastet. Was ich damit meine, ist, dass selbst wenn jemand Ihren Hashwert erhält und feststellt, dass Ihr Kostenniveau eine halbe Sekunde für die Berechnung benötigt, er weiß, auf welchem ​​Niveau er sich aufhalten muss, aber es dauert zu lange, um zu knacken (zB Jahrzehnte) ).

Salze werden verwendet, um zu verhindern, dass Hashes in einen Regenbogentisch vorberechnet werden.

Ein Regenbogentisch ist im Grunde ein Schlüsselwertspeicher mit einem "Wörterbuch" von Wörtern mit den entsprechenden Hashwerten als Schlüssel.

Alles, was jemand tun muss, ist, genug gebräuchliche Wörter - oder, noch schlimmer, alle Möglichkeiten der Zeichenkette - vorzuberechnen, und dann kann das Wort sofort nach einem bestimmten Hash gesucht werden. Hier ein Beispiel, wie Salze helfen können: Nehmen wir an, Ihr Passwort ist das Wort "Passwort". Normalerweise ist dies ein ziemlich geläufiges Wort. Es würde wahrscheinlich in ihrem Regenbogentisch sein. Was ein Salt tut, ist, dass er Ihrem Passwort eine zufällige Zeichenkette hinzufügt. Anstatt "Passwort" zu hashen, ist es wirklich ein Hash "passwordRandomSalt524% # $ &." Es ist wesentlich weniger wahrscheinlich, dass es vorberechnet wird.

Warum werden Salze normalerweise als private Informationen betrachtet? In der Regel können MD5 und ähnliche Personen, sobald jemand Ihr Salz kennt, seine Bruteforce-Techniken anwenden, es sei denn, Sie fügen Ihr Salz zum Schluss hinzu. Das bedeutet, dass Sie Ihre Zufallskennwort-Zeichenkette nicht brutal erzwingen möchten, sondern dass sie ein viel kürzeres Standardkennwort verwenden und nur das Salt hinzufügen. Aber zum Glück, da wir den Kostenfaktor eingerichtet haben, würde es zu lange dauern, jeden Hash mit dem neuen Salt zu berechnen.

Um es zusammenzufassen: Salze stellen sicher, dass die Vorberechnung eines Hashes nicht erneut für einen anderen Hash verwendet werden kann, und der Parameter Cost stellt sicher, dass es nicht möglich ist, jeden Hash von Grund auf zu berechnen. Beides wird benötigt, aber keines muss geheim sein.

Deshalb fügt die Funktion sie dem Hash hinzu.

Denken Sie daran, es ist egal, was Ihr Salz ist, solange es einzigartig ist.

Wenn Sie nun verstanden haben, was das Salz tut, sollten Sie wissen, dass es besser ist, die Funktion zufällig zu erzeugen, als Ihr eigenes Wort einzugeben. Obwohl diese Funktion bereitgestellt wird, möchten Sie nicht, dass alle Ihre Hashes dasselbe Salt haben. Wenn dies der Fall ist, müssen Sie die Tabelle nur einmal berechnen, wenn jemand in Ihre Datenbank eindringen konnte. Da sie das Salz- und Kostenniveau haben, kann es eine Weile dauern, aber wenn genug Computer vorhanden sind, werden sie alle Hashes freigeschaltet, sobald sie es verarbeitet haben. Daher ist es viel besser, keinen zuzuweisen, sondern PHP zufällig einen zu erzeugen.


cURL-Zusätze

Bisher gab es keine einfache Möglichkeit, E-Mails über SMTP zu versenden.

cURL ist ein weiterer Bereich, in dem das PHP-Team einige aufregende Ergänzungen und Updates hinzugefügt hat. Ab Version 5.5 unterstützen wir nun die FTP-Anweisungen, Anweisungen zum Setzen von Cookies, Richtlinien für SSL und Konten sowie Anweisungen für die Protokolle SMTP und RTSP. Es würde zu lange dauern, um alle zu besprechen, aber um die vollständige Liste anzuzeigen, können Sie die Seite NEWS aufrufen.

Ich möchte jedoch über einen Satz sprechen, der mich am meisten interessiert: die SMTP-Richtlinien. Bisher gab es keine einfache Möglichkeit, E-Mails über SMTP zu versenden. Sie müssen entweder das Sendmail-Programm Ihres Servers ändern, um Nachrichten über einen SMTP-Server zu senden, oder Sie müssen eine Bibliothek eines Drittanbieters herunterladen. Keine davon ist die beste Option. Mit den neuen CURL-Direktiven können Sie in nur wenigen Zeilen direkt mit einem SMTP-Server wie Google Mail kommunizieren.

Um besser zu verstehen, wie der Code funktioniert, sollten Sie sich mit dem SMTP-Protokoll vertraut machen. Was passiert, ist, Ihr Skript stellt eine Verbindung zum Mail-Server her, der Mail-Server bestätigt Ihre Verbindung und gibt Ihnen die Informationen (z. B. Domäne, Software) zurück. Sie müssen dann dem Server mit Ihrer Adresse antworten. Da SMTP ein gesprächiges (aber höfliches) Protokoll ist, werden Sie begrüßt, so dass Sie wissen, dass es empfangen wurde.

An diesem Punkt können Sie Befehle senden. Die benötigten Befehle sind die MAIL VON und das RCPT TO; diese karten direkt zu den cURL-richtlinien, CURLOPT_MAIL_FROM und CURLOPT_MAIL_RCPT, beziehungsweise. Du hast nur einen von Adresse, aber Sie können mehrere angeben zu Adressen. Sobald dies geschehen ist, können Sie den Befehl einfach aufrufen, DATEN, und beginnen Sie mit dem Senden der eigentlichen Nachricht und der Nachrichtenköpfe. Um die Übertragung zu beenden, müssen Sie eine leere Zeile, gefolgt von einem Punkt, gefolgt von einer weiteren leeren Zeile, senden. Diese letzten beiden Teile (d. H. DATA-Befehl und die Endsequenz) werden von cURL erledigt, sodass wir uns nicht darum kümmern müssen.

In PHP müssen wir also nur die E-Mail angeben von und zu Direktiven, und senden Sie dann die eigentliche Nachricht - alles innerhalb von cURL. Um die Dinge wirklich einfach zu machen, werde ich eine Klasse erstellen, genannt Google Mail, Sie akzeptiert einen Benutzernamen / ein Passwort und die Nachrichtendetails und sendet E-Mails über Ihr Google Mail-Konto.

Ich füge die gesamte Klasse unten ein, und dann gehen wir Zeile für Zeile durch, da das meiste davon Boilerplate ist.

 Klasse Google Mail private $ mail; private $ email; privater $ pass; öffentliche Funktion __construct ($ email, $ pass) $ this-> email = $ email; $ this-> pass = $ pass;  private Funktion mailGen () $ from = yield; $ to = Rendite; $ subject = Rendite; $ body = Ertrag; ergeben "FROM: <" . $from . ">\ n "; Ertrag" An: <" . $to . ">\ n "; Ergebnis" Datum: ". Datum (" r ")." \ n "; Ergebnis" Betreff: ". $ subject." \ n "; Ergebnis" \ n "; Ergebnis $ body; Ergebnis" ";  public function getLine () $ resp = $ this-> mail-> current (); $ this-> mail-> next (); $ zurückgeben; public function send ($ an, $ subject, $ body) $ this-> mail = $ this-> mailGen (); $ this-> mail-> send ($ this-> email); $ this-> mail-> send ($ to); $ this-> mail- > send ($ subject); $ this-> mail-> send ($ body); $ ch = curl_init ("smtps: //smtp.gmail.com: 465"); curl_setopt ($ ch, CURLOPT_MAIL_FROM, "<" . $this->Email . ">"); curl_setopt ($ ch, CURLOPT_MAIL_RCPT, Array ("<" . $to . ">")); curl_setopt ($ ch, CURLOPT_USERNAME, $ this-> email); curl_setopt ($ ch, CURLOPT_PASSWORD, $ this-> pass); curl_setopt ($ ch, CURLOPT_USE_SSL, CURLUSESSL_ALL); true); optional, wenn Sie die Transaktion curl_setopt sehen möchten ($ ch, CURLOPT_READFUNCTION, array ($ this, "getLine")); return curl_exec ($ ch);

Hoffentlich war Ihre Reaktion auf diesen Code so etwas wie "Wow, kurz für eine vollständige SMTP-Implementierung!" Für den Fall, dass es kompliziert erscheint, gehen wir es durch. Wir definieren zunächst drei private Variablen: eine für den Nachrichtengenerator, eine zum Speichern der E-Mail des Benutzers und eine zum Speichern seines Passworts. Als nächstes haben wir den Konstruktor, der die E-Mail und das Passwort für später speichert. Auf diese Weise können wir mehrere E-Mails senden, ohne dies jedes Mal erneut eingeben zu müssen. Das mailGen function ist ein PHP 5.5-Generator, mit dem die Nachricht gemäß dem E-Mail-Protokoll direkt in cURL ausgegeben wird. Der Grund dafür ist, dass der Befehl, der in cURL zur Eingabe der Daten verwendet wird, zeilenweise aus einer Datei gelesen werden soll. Anstatt also eine zusätzliche Variable zu haben, um mich zu erinnern, an welche Linie wir uns gewöhnten, habe ich einen Generator verwendet, der seine Position speichert.

Die nächste Funktion dient zum Durchlaufen des Generators. Wir können den Generator nicht direkt in cURL eingeben. Wir brauchen einen Vermittler. cURL ruft diese Funktion weiter auf, bis es zu einer leeren Zeile kommt. Deshalb gibt die letzte Zeile im Generator eine leere Zeichenfolge zurück.

Die letzte Funktion in der Klasse ist die, die alles miteinander verbindet. Zuerst initialisieren wir den Generator auf die zuvor definierte private Variable. Als nächstes senden wir dem Generator alle erforderlichen Informationen und erstellen eine neue cURL-Variable. Wir haben schon diskutiert CURLOPT_MAIL_FROM und CURLOPT_MAIL_RCPT; Sie entsprechen den entsprechenden SMTP-Befehlen. CURLOPT_MAIL_RCPT ist ein Array, so dass Sie mehrere Adressen eingeben können. Als Nächstes müssen wir die Anmeldeinformationen hinzufügen, um sich bei GMail anzumelden. Ich habe die verbose Option dort gelassen; Kommentieren Sie es, wenn Sie die gesamte SMTP-Transaktion anzeigen möchten. In den letzten beiden Zeilen wird nur die Funktion festgelegt, von der CURL die Daten für die Nachricht abrufen soll, und dann werden die Ergebnisse zurückgegeben.

Es sind ein paar Zeilen, aber nichts übermäßig kompliziert. Erstellen Sie zur Verwendung dieser Funktion eine neue Instanz dieser Klasse, und rufen Sie die Sendefunktion auf. Hier ist ein Beispiel für das Versenden von zwei E-Mails:

 $ gmail = new Gmail ("[email protected]", "Kennwort"); $ gmail-> send ("[email protected]", "Betreff der E-Mail", "Hallo Kerl, \ n Was ist los?"); $ gmail-> send ("[email protected]", "Anderer Betreff", "Wichtige Nachricht"));

Kleinigkeiten

Um diesen Artikel abzuschließen, werde ich einige der kleineren Updates von PHP 5.5 betrachten.

Eine ziemlich coole Sache ist die zusätzliche Unterstützung für die Dereferenzierung von Strings / Strings. Dies bedeutet, dass Sie auf einzelne Zeichen in einer statischen Zeichenfolge zugreifen können, als ob die Zeichenfolge ein Array von Zeichen wäre. Ein schnelles Beispiel dafür ist folgendes:

 Echo "Hello World" [1]; // Diese Zeile wird als Echo ausgegeben "e" Echo ["Eins", "Zwei", "Drei"] [2]; // dieses Echos "drei"

Als nächstes haben wir die endlich Stichwort. Dies wird an das Ende eines try / catch-Blocks angehängt. was es tut ist PHP anzuweisen, dass, egal ob das try oder catch aufgerufen wurde, Sie das verarbeiten wollen endlich Sektion. Dies ist für Situationen nützlich, in denen Sie das Ergebnis einer try / catch-Anweisung behandeln möchten. Anstatt den Code in beiden zu wiederholen, können Sie einfach den "riskanten" Teil in den try / catch-Block und die gesamte Verarbeitung in den finally-Block einfügen.

Eine andere Verwendung, die vom Ersteller als bewährte Methode vorgeschlagen wurde, besteht darin, den gesamten Bereinigungscode in den finally-Block einzufügen. Dadurch wird sichergestellt, dass Sie beispielsweise nicht versuchen, denselben Stream mehrmals zu schließen (z. B. ist Ihr Code abgestürzt und nach dem Schließen bereits in den catch-Block gegangen und Sie versuchen, ihn erneut zu schließen.).

Als letztes erwähnenswert ist, wie die MySQL-Erweiterung in dieser neuen Version nicht mehr unterstützt wird. Sie sollten Ihren Code in eine der beiden konvertieren Mysqli oder PDO stattdessen Erweiterungen. Obwohl es seit langem als Anti-Pattern gilt, ist es schön, dass das PHP-Team es offiziell ablehnt.

Zwar gibt es sicherlich noch mehr Updates, aber die Elemente in diesem Artikel repräsentieren das, was mir am wichtigsten und aufregend ist.


Fazit

Danke fürs Lesen; Ich hoffe du hast ein bisschen gelernt! Wenn Sie Kommentare oder Fragen haben, springen Sie wie unten beschrieben in das Gespräch und lassen Sie uns darüber reden!