Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 11 Text
  gp 11.1 Text_Password
  gp 11.2 Text_CAPTCHA
  gp 11.3 Text_Wiki
  gp 11.4 Text_Highlighter
  gp 11.5 Text_Diff


Rheinwerk Computing

11.2 Text_CAPTCHA  toptop


Besprochene Version: 0.1.1 Lizenz: PHP-Lizenz
Klassendatei(en): Text/CAPTCHA.php

Die Abkürzung CAPTCHA steht für Completely Automated Public Turing-Test to Tell Computers and Humans Apart. Es handelt sich also um ein automatisiertes Testverfahren, das von Allan Turing [Alan Turing wurde am 23. Juni 1912 in London geboren und starb am 7. Juni 1954 in Wilmslow. Er war ein britischer Mathematiker und gilt als einer der Urväter des Computers. ] ersonnen wurde und das es ermöglichen soll, Menschen von Computern zu unterscheiden. Sie finden CAPTCHAs z. B. häufig bei Anmeldeformularen für Freemail-Accounts, Gewinnspielen oder Suchmaschineneintragsformularen. Meist werden CAPTCHAs so umgesetzt, dass ein Text verfremdet und als Grafik ausgegeben wird. Dieser Text kann maschinell nicht analysiert werden, so dass nur ein Mensch ihn lesen und in ein Formularfeld eingeben kann. Text_CAPTCHA erstellt eine entsprechende Grafik für Sie, so dass Sie sich nur noch um das HTML-Formular für die Eingabe kümmern müssen.

Bevor ich die eigentliche Funktionalität erläutere, noch ein Hinweis: Das Paket benötigt eine PHP-Installation mit einer funktionierenden GD-Bbliothek. Des Weiteren müssen Text_Image und Text_Password installiert sein und funktionieren. Ist das nicht der Fall, kann es sein, dass Sie sehr lange nach einem Fehler suchen, da Fehlermeldungen, die eventuell generiert wurden, unter Umständen nicht ausgegeben werden. Sie landen eventuell in der Datei, die eigentlich die Grafik werden sollte. Somit passiert es schon mal, dass alles aussieht, als würde es funktionieren, dass aber nur eine Fehlermeldung generiert wird, die in der »Grafik-Datei« zu finden ist.

Die Klasse unterstützt zurzeit nur CAPTCHAs auf Basis von Grafiken, wobei durchaus auch andere CAPTCHAS denkbar sind. Die Idee ist folgende: Beim ersten Aufruf wird ein neuer Turing-String erzeugt, der einerseits auf der Grafik dargestellt und andererseits in einer Session-Variable abgespeichert wird. Die Grafik und ein Formular werden dargestellt, und der Benutzer kann den dargestellten Text eingeben und zurück zum Server schicken. Serverseitig werden dann der eingegebene Text und der String, der sich in der Session-Variable befindet, miteinander verglichen. Sind sie identisch, kann der Benutzer »passieren«.

Zum Ableiten eines neuen Objekts gibt es eine Factory-Methode. Diese bekommt die Information übergeben, welcher Treiber oder – mit anderen Worten – welche Art von CAPTCHA genutzt werden soll. Übergeben Sie ihr 'Image', so wird ein Text_CAPTCHA_Driver_Image-Objekt generiert. Diese Vorgehensweise legt nahe, dass auch andere Formate unterstützt werden. Zurzeit ist allerdings nur die Klasse Text_CAPTCHA_Driver_Image vorhanden.

Die Größe der CAPTCHA-Grafik und andere Spezifikationen werden mithilfe von init() definiert. Diese Methode unterstützt bis zu vier Parameter. Mit den ersten beiden geben Sie die Größe, sprich die Breite und die Höhe, an. Standard ist eine Breite von 200 Pixeln und eine Höhe von 80 Pixeln. Als dritten Parameter können Sie einen String übergeben, der dann auf der Grafik Verwendung findet. Geben Sie null an oder lassen Sie den Parameter ganz wegfallen, so generiert das Paket selbstständig einen String.

Als vierter Parameter wird ein Array unterstützt, mit dem Sie die Größe und die Art der Schrift definieren können. Das assoziative Array kann die Schlüssel font_size, font_path und font_file enthalten. Mit dem ersten geben Sie die Größe des Textes in Pixeln an (Default: 24), der zweite definiert, in welchem Verzeichnis die Schriftart-Datei zu finden ist (Default: ./), und der dritte und letzte legt den Namen der Schriftart-Datei fest (Default: COUR.TTF), die genutzt werden soll.

session_start(); // Session starten 
 
// Wurde das Forumular abgeschickt? 
if (false==isset($_POST['eingabe'])) 
{ 
   // Nein, Formular wurde nicht abgeschickt 
   // => CAPTCHA ausgeben 
   require_once 'Text/CAPTCHA.php'; 
 
   $width =250; // Breite der Grafik 
   $height=100; // Hoehe der Grafik 
   $options = array ( 
               'font_size' => 20, // Schriftgroesse 
               'font_path' => './', // Verzeichnis 
               'font_file' => 'arial.ttf' //Schriftdatei 
              ); 
 
   echo "Bitte geben Sie den dargestellten Text ein!<br />"; 
 
   // Factory-Methode zum Instanziieren 
   $captcha = Text_CAPTCHA::factory('Image'); 
   // Initialisieren 
   $captcha->init($width, $height, null, $options); 
 
   // Auslesen und Speichern des generierten Textes 
   $_SESSION["turing"] = $captcha->getPhrase(); 
 
   // Generierte Grafik als PNG auslesen 
   $png=$captcha->getCAPTCHAAsPNG(); 
   // Session-ID auslesen, um sie fuer den Dateinamen zu nutzen 
   $sid=session_id(); 
   // Grafik auf der Festplatte speichern 
   file_put_contents("$sid.png", $png); 
 
   // Tag zum Einbinden der Grafik 
   echo "<img src=\"$sid.png?". time() ."\" /><br />" ; 
 
   //Formular zur Eingabe des Strings 
   echo "<form method=\"POST\" action=\"$_SERVER[PHP_SELF]\"> 
     Eingabe <input type=\"text\" name=\"eingabe\" /><br /> 
     <input type=\"button\" value=\"Ich kann das nicht lesen\" 
          onClick=\"javascript: window.location.reload()\" /> 
     <input type=\"submit\" value=\"Absenden\" /></form>"; 
} 
else 
{ 
   //Stimmen die Eingabe und der String aus der Session ueberein? 
   if ($_SESSION['turing'] != $_POST['eingabe']) 
   { 
      echo "Ihre Eingabe war falsch!<br />"; 
      echo "<a href=\"$_SERVER[PHP_SELF]\">Neuer Versuch</a>"; 
   } 
   else 
   { 
      // Grafikdatei loeschen 
      if (true==file_exists(session_id().".png")) 
      { 
         unlink (session_id().".png"); 
      } 
      echo "OK, Sie haben die Daten richtig eingegeben!"; 
   } 
}

Listing 11.2 Nutzung von Text_CAPTCHA

Nach der Initialisierung können Sie mit der Methode getPhrase() den generierten String auslesen (wenn Sie denn keinen String vorgegeben haben) und in einer Session-Variable speichern. Des Weiteren benötigen Sie natürlich die Grafik, um sie darstellen zu können. Diese können Sie mit getCAPTCHAAsPNG() oder mit getCAPTCHAAsJPEG() auslesen. Die erste Methode liefert die Daten im PNG-Format zurück, wohingegen die zweite einen JPEG-Datenstrom generiert. Die Daten werden dann als Datei auf der Festplatte abgelegt, wobei die Session-ID als Dateiname genutzt wird. Das hat den Vorteil, dass die Datei immer einer Session eindeutig zugeordnet wird. Beim Einbinden der Grafik in das Formular wird der aktuelle Timestamp an die URL der Datei angehängt, um sicherzustellen, dass keine Grafik aus dem Cache geladen wird.

Bei einem grafischen Turing-Test kann es nicht schaden, wenn Sie in dem Formular eine Funktion vorsehen, um die Seite neu zu laden. Es kann bei diesem Verfahren immer mal passieren, dass der Benutzer den Text nicht lesen kann, so dass eine solche Funktion sehr hilfreich sein kann.

Wie Listing 11.2 im Browser dargestellt wird, sehen Sie in Abbildung 11.1.

Abbildung 11.1 Darstellung eines CAPTCHAs

 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern