style=\"background-color:#ddd; <\/span>\"<\/span><\/span>><\/span>\n<\/span>\n <\/span> create_image();\n<\/span><\/span> display();\n<\/span><\/span> \/***** definition of functions *****\/\n<\/span><\/span> function display()\n<\/span><\/span> {\n<\/span><\/span> ?><\/span>\n<\/span>\n style=\"text-align:center;<\/span>\"<\/span><\/span>><\/span>\n<\/span> ><\/span>TYPE THE TEXT YOU SEE IN THE IMAGE<\/h3<\/span>><\/span>\n<\/span> ><\/span>This is just to check if you are a robot<\/b<\/span>><\/span>\n<\/span>\n style=\"display:block;margin-bottom:20px;margin-top:20px;<\/span>\"<\/span><\/span>><\/span>\n<\/span> src=\"image.png\"<\/span>><\/span>\n<\/span> <\/div<\/span>><\/span>\n<\/span> \/\/div1 ends\n <\/div<\/span>><\/span> \/\/div2 ends\n<\/span>\n <\/span> }\n<\/span><\/span>\n<\/span> function create_image()\n<\/span><\/span> {\n<\/span><\/span> $image = imagecreatetruecolor(200, 50);\n<\/span><\/span> imagepng($image, \"image.png\");\n<\/span><\/span> }\n<\/span><\/span>\n<\/span> ?><\/span>\n<\/span> <\/body<\/span>><\/span>\n<\/span><\/span>?><\/span><\/span><\/pre> Die erste Zeile gibt den Beginn der Benutzersitzung auf unserer Seite an.

\n<\/p> Die Funktion display () hat nichts anderes als einen normalen HTML -Code, der ein Bild im Browser anzeigt. Davon abgesehen wird nur ein Styling durchgeführt, damit die Ausgabe pr?sentierbar aussieht.

<\/p>\n

In der Funktion create_image () wird eine Variable verwendet, um das von der ImageCrreatReEcolor () -Funktion zurückgegebene Bild zu verweisen, das die Breite und L?nge des Bildes als Argumente nimmt. ImagePng () erstellt ein PNG -Bild des angegebenen Namens und Pfades (im selben Verzeichnis). <\/p>\n

Ein schwarzes Bild ist die Ausgabe nach unserem ersten Schritt. <\/p>\n

\"Einfache <\/p>\n

Beachten Sie, dass das Funktionsbildpng () die letzte Zeile unserer Funktion ist und alle folgenden Schritte nur vor diesem Funktionsaufruf in die Funktion create_image () eingefügt werden sollen, sonst würden sie nicht wirksam werden. <\/p>\n

Erstellen Sie eine Form <\/h3>\n

Jede Form kann für die Captcha ausgew?hlt werden. Wir w?hlen ein Rechteck mit der von Funktionsage gefüllten Funktion () aus. Es dauert fünf Argumente-Bildreferenz, Start X-Pos, Start von Y-Pos, Ende X-Pos, enden Y-Pos und die Hintergrundfarbe. Sie k?nnen die entsprechende Funktion für eine Ellipse zur Erzeugung von elliptischen Captcha verwenden. <\/p>\n

Die Funktion von ImageColorAlleCocce () verteilt eine Farbe einer Variablen, da sie die RGB -Kombination der Farbe als Argumente nimmt. Der folgende Code ist in der Funktion create () hinzugefügt. <\/p>\n

<\/span>session_start();\n<\/span><\/span>?><\/span>\n<\/span>\n    ><\/span>demo.php<\/title<\/span>><\/span>\n<\/span>    

国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

style=\"background-color:#ddd; <\/span>\"<\/span><\/span>><\/span>\n<\/span>\n <\/span> create_image();\n<\/span><\/span> display();\n<\/span><\/span> \/***** definition of functions *****\/\n<\/span><\/span> function display()\n<\/span><\/span> {\n<\/span><\/span> ?><\/span>\n<\/span>\n style=\"text-align:center;<\/span>\"<\/span><\/span>><\/span>\n<\/span> ><\/span>TYPE THE TEXT YOU SEE IN THE IMAGE<\/h3<\/span>><\/span>\n<\/span> ><\/span>This is just to check if you are a robot<\/b<\/span>><\/span>\n<\/span>\n style=\"display:block;margin-bottom:20px;margin-top:20px;<\/span>\"<\/span><\/span>><\/span>\n<\/span> src=\"image.png\"<\/span>><\/span>\n<\/span> <\/div<\/span>><\/span>\n<\/span> \/\/div1 ends\n <\/div<\/span>><\/span> \/\/div2 ends\n<\/span>\n <\/span> }\n<\/span><\/span>\n<\/span> function create_image()\n<\/span><\/span> {\n<\/span><\/span> $image = imagecreatetruecolor(200, 50);\n<\/span><\/span> imagepng($image, \"image.png\");\n<\/span><\/span> }\n<\/span><\/span>\n<\/span> ?><\/span>\n<\/span> <\/body<\/span>><\/span>\n<\/span><\/span>?><\/span><\/span><\/pre>\n

Das vorherige Bild ist nach diesem Schritt wei?. <\/p>\n

\"Einfache <\/p>\n

erzeugen zuf?llige Zeilen. <\/h3>\n

Jetzt beginnen wir tats?chlich damit, den Verzerrungsteil des Captcha zu machen. In PHP werden die Linien vom Startpunkt (x1, y1) bis zum Endpunkt (x2, y2) erzeugt. Wenn wir m?chten, dass unsere Linien beide Enden der Box berühren, werden wir die Koordinaten als beibehalten, d. H. Die vollst?ndige Breite unserer Box. Die Koordinaten werden zuf?llig generiert. Dies erzeugt nur eine zuf?llige Zeile. Wir werden mehrere Zeilen erzeugen, indem wir diese Funktionalit?t in eine für die Schleife einfügen. <\/y1><\/x1><\/p>\n

$background_color = imagecolorallocate($image, 255, 255, 255);  \n<\/span>imagefilledrectangle($image,0,0,200,50,$background_color);<\/span><\/pre>\n

Die Funktion \"ImageLine () nimmt in dieser Reihenfolge die Koordinaten X1, X2, Y1, Y2 als Argumente ab, abgesehen von der Bildreferenz und Farbe der Linie. Die Linienfarbe wurde genauso zugewiesen, als die Hintergrundfarbe im vorherigen Schritt zugewiesen wurde. <\/p>\n

Das y-Koordinate wird als Rand ()*P angegeben, da dies die H?he unserer Box ist und immer einen Wert unter 50 zurückgibt. Sie k?nnen alternativ Rand (0,50) verwenden. Sie ergeben den gleichen Ausgangsbereich. <\/p>\n

\"Einfache <\/p>\n\n

erzeugen zuf?llige Punkte. <\/h3>\n

zuf?llige Punkte werden genauso generiert wie zuf?llige Zeilen. Die verwendete Funktion ist Imagesetpixel (). Diese Funktion nimmt den Wert der Koordinaten auf, bei denen der Punkt in die Box platziert wird. <\/p>\n

$line_color = imagecolorallocate($image, 64,64,64); \n<\/span>for($i=0;$i<10;$i++) {\n<\/span>    imageline($image,0,rand()%50,200,rand()%50,$line_color);\n<\/span>}<\/span><\/pre>\n

Das X-Koordinate wird zuf?llig mit Rand ()* 0 generiert, da dies die Breite unserer Box ist und dies immer einen Wert unter 200 zurückgibt. Sie k?nnen alternativ Rand (0.200) verwenden. Sie ergeben den gleichen Ausgangsbereich. Die Y -Koordinate wird wie in den Zeilen Schritt erzeugt. <\/p>\n

\"Einfache <\/p>\n

Generieren Sie zuf?lligen Text <\/h3>\n

Wir verweisen zuf?llig auf eine Position in der Zeichenfolge (die das Alphabet sowohl im unteren als auch im oberen Fall enth?lt) und weisen die Variable $ bild <\/p> zu\n

<\/span>session_start();\n<\/span><\/span>?><\/span>\n<\/span>\n    ><\/span>demo.php<\/title<\/span>><\/span>\n<\/span>     style=\"background-color:#ddd; <\/span>\"<\/span><\/span>><\/span>\n<\/span>\n    <\/span>    create_image();\n<\/span><\/span>    display();\n<\/span><\/span>    \/***** definition of functions *****\/\n<\/span><\/span>    function display()\n<\/span><\/span>    {\n<\/span><\/span>        ?><\/span>\n<\/span>\n         style=\"text-align:center;<\/span>\"<\/span><\/span>><\/span>\n<\/span>            ><\/span>TYPE THE TEXT YOU SEE IN THE IMAGE<\/h3<\/span>><\/span>\n<\/span>            ><\/span>This is just to check if you are a robot<\/b<\/span>><\/span>\n<\/span>\n             style=\"display:block;margin-bottom:20px;margin-top:20px;<\/span>\"<\/span><\/span>><\/span>\n<\/span>                 src=\"image.png\"<\/span>><\/span>\n<\/span>            <\/div<\/span>><\/span>\n<\/span>            \/\/div1 ends\n        <\/div<\/span>><\/span>                          \/\/div2 ends\n<\/span>\n    <\/span>    }\n<\/span><\/span>\n<\/span>    function  create_image()\n<\/span><\/span>    {\n<\/span><\/span>        $image = imagecreatetruecolor(200, 50);\n<\/span><\/span>        imagepng($image, \"image.png\");\n<\/span><\/span>    }\n<\/span><\/span>\n<\/span>    ?><\/span>\n<\/span>    <\/body<\/span>><\/span>\n<\/span><\/span>?><\/span><\/span><\/pre>\n

Wenn es in eine Schleife gelegt wird, sieht es so aus-<\/p>\n

$background_color = imagecolorallocate($image, 255, 255, 255);  \n<\/span>imagefilledrectangle($image,0,0,200,50,$background_color);<\/span><\/pre>\n

Wir werden die Zeilen <\/p> erkl?ren\n

$line_color = imagecolorallocate($image, 64,64,64); \n<\/span>for($i=0;$i<10;$i++) {\n<\/span>    imageline($image,0,rand()%50,200,rand()%50,$line_color);\n<\/span>}<\/span><\/pre>\n

im n?chsten Abschnitt. <\/p>\n

Die Funktion Imagestring () schreibt den Text in unserem Bild. Es hat 6 Argumente: <\/p>\n

    \n
  1. Bildreferenz. <\/li>\n
  2. Schriftgr??e des Textes (es kann h?chstens 5 sein). <\/li>\n
  3. x-Koordinate (sich proportional für jedes Alphabet ver?ndern). <\/li>\n
  4. y-koordinate (hielt gleich, obwohl wir dies auch zuf?llig ?ndern konnten). <\/li>\n
  5. tats?chliche Zeichenfolge zu schreiben. <\/li>\n
  6. Schriftfarbe des Textes. <\/li>\n<\/ol>\n

    Sie k?nnen auch den Funktionsfunktionsettftext () verwenden, wenn Sie eine gr??ere Schriftart und einen anderen Schriftart -Stil haben m?chten. Es braucht 2 zus?tzliche Argumente für den Winkel- und Schriftstil des Textes. <\/p>\n

    Berechnung der X-Koordinaten erfolgt durch Inspektion. Ungef?hr 35 Pixel (5 ($ I*30)) sind die Buchstaben, wobei $ i = 0,1,2,3,4,5,6 $ i = 0,1,2,3,4,5,6 ist. Dies liegt daran, dass wenn wir diesen Wert etwa 15-20px gehalten h?tten, es eine M?glichkeit gegeben h?tte, dass sich zwei Buchstaben überlappten. Wenn der Wert mehr als 40px gewesen w?re, h?tten die Buchstaben insgesamt nicht in die Box gepasst. <\/p>\n

    Dies erzeugt einen 6 Alphabet Captcha -Text. Wir k?nnen immer mehr Zuf?lligkeit schaffen, indem wir die Aspekte ?ndern, die aufgrund der Einfachheit, wie Farbe, Y-Koordinaten usw. konstant gehalten wurden\n<\/p> Die letzte Captcha sieht so aus

    \n<\/p>

    \"Einfache\n<\/p> Der im Captcha geschriebene Text ?ndert sich jedes Mal, wenn Sie die Seite aktualisieren.

    \nMehr Zuf?lligkeit kann erreicht werden, indem Designs mit den Pixeln erstellt oder die Farbe oder Gr??e ge?ndert werden.
    \n<\/p> validieren

    \n<\/h2> hier wird die Antwort des Benutzers erstellt und nach der Verarbeitung erh?lt er\/sie eine Antwort. Zun?chst wird ein einfaches Formular mit einem Eingabetialbox und einer Senden -Schaltfl?che erstellt. Es kann viele M?glichkeiten geben, eine CAPTCHA gem?? den Anforderungen komplexer Webanwendungen zu verarbeiten. Wenn wir es jedoch für dieses Beispiel einfach halten, werden wir es auf derselben Seite verarbeiten.

    \n<\/p> Die beiden Zeilen, die in den vorherigen Code -Snippets ungekl?rt sind, kommen jetzt ins Spiel:

    \n<\/p>\n

      $ word. = $ Bild; - Der Verkettungsoperator. wird verwendet, um alle einzelnen Buchstaben nacheinander anzuh?ngen und das 6-Buchstaben-Wort zu generieren.
    1. \n<\/li> $ _ Session ['captcha_string'] = $ Word; Unsere Captcha -Zeichenfolge wird in einer Sitzungsvariablen gespeichert, die für Validierungszwecke verwendet wird.
    2. \n<\/li>\n<\/ol> wir ?ndern die Definition von Display (), um eine form?hnliche Struktur hinzuzufügen.

      \n<\/p> Es werden zwei Einreichungsschaltfl?chen verwendet, eine zum Senden der Zeichenfolge und eine andere, um die Seite zu aktualisieren.

      \n<\/p> Die folgenden Zeilen werden zwischen den beiden Abschluss -Div -Tags hinzugefügt (siehe Kommentare in der vorherigen Anzeige ())

      <\/p>\n

      <\/span>session_start();\n<\/span><\/span>?><\/span>\n<\/span>\n    ><\/span>demo.php<\/title<\/span>><\/span>\n<\/span>     style=\"background-color:#ddd; <\/span>\"<\/span><\/span>><\/span>\n<\/span>\n    <\/span>    create_image();\n<\/span><\/span>    display();\n<\/span><\/span>    \/***** definition of functions *****\/\n<\/span><\/span>    function display()\n<\/span><\/span>    {\n<\/span><\/span>        ?><\/span>\n<\/span>\n         style=\"text-align:center;<\/span>\"<\/span><\/span>><\/span>\n<\/span>            ><\/span>TYPE THE TEXT YOU SEE IN THE IMAGE<\/h3<\/span>><\/span>\n<\/span>            ><\/span>This is just to check if you are a robot<\/b<\/span>><\/span>\n<\/span>\n             style=\"display:block;margin-bottom:20px;margin-top:20px;<\/span>\"<\/span><\/span>><\/span>\n<\/span>                 src=\"image.png\"<\/span>><\/span>\n<\/span>            <\/div<\/span>><\/span>\n<\/span>            \/\/div1 ends\n        <\/div<\/span>><\/span>                          \/\/div2 ends\n<\/span>\n    <\/span>    }\n<\/span><\/span>\n<\/span>    function  create_image()\n<\/span><\/span>    {\n<\/span><\/span>        $image = imagecreatetruecolor(200, 50);\n<\/span><\/span>        imagepng($image, \"image.png\");\n<\/span><\/span>    }\n<\/span><\/span>\n<\/span>    ?><\/span>\n<\/span>    <\/body<\/span>><\/span>\n<\/span><\/span>?><\/span><\/span><\/pre>\n

      Bevor Sie sich weiter bewegen, müssen wir wissen, wann wir angezeigt werden müssen und wann das Eingabefeld nicht angezeigt werden soll. Es wird nur <\/p> angezeigt\n

        \n
      1. Wenn die Seite gerade geladen ist. <\/li>\n
      2. Wenn die Antwort des Benutzers falsch war. <\/li>\n<\/ol>\n\n

        Die erste Bedingung wird durch die Verwendung eines $ -Flags erfüllt, das bei jedem Klicken auf \"1\" auf \"1\" eingestellt ist. Anfangs wurde es auf einen anderen Wert eingestellt. Die zweite Bedingung wird erreicht, indem überprüft wird, ob der in unserer Sitzungsvariablen gespeicherte Wert mit der Benutzereingabe übereinstimmt (siehe Code unten). <\/p>\n

        Um dies zu erreichen, werden wir die folgenden Zeilen unseres Startschritts zu Beginn des Artikels ersetzen: <\/p>\n

        $background_color = imagecolorallocate($image, 255, 255, 255);  \n<\/span>imagefilledrectangle($image,0,0,200,50,$background_color);<\/span><\/pre>\n

        mit: <\/p>\n

        $line_color = imagecolorallocate($image, 64,64,64); \n<\/span>for($i=0;$i<10;$i++) {\n<\/span>    imageline($image,0,rand()%50,200,rand()%50,$line_color);\n<\/span>}<\/span><\/pre>\n

        Beachten Sie, dass die Funktionen create_image () und display () nur gem?? den 2 oben diskutierten Bedingungen aufgerufen werden. <\/p>\n

        Wir ben?tigen die Sitzungsvariable von der vorherigen Seite, sodass die Sitzung hier nicht zerst?rt wird. Die Sitzung wird automatisch zerst?rt, sobald das Browserfenster geschlossen ist. <\/p>\n

        Die Captcha sieht so aus-<\/p>\n

        \"Einfache <\/p>\n

        Wenn die Eingabe falsch ist, wird der Benutzer erneut aufgefordert. <\/p>\n

        \"Einfache <\/p>\n

        Wenn die Eingabe korrekt ist, wird der Benutzer eine Nachricht angezeigt. <\/p>\n

        \"Einfache <\/p>\n

        Es gibt eine geringfügige Einschr?nkung - Wenn der Benutzer die Rücktaste zurückdrückt, wird jedes im Cache des Browsers vorhandene Bild nicht neu geladen, w?hrend die Seite dies tut. In einer Postanforderung wird die Browser -Back -Schaltfl?che eine Seite \"Dokument abgelaufen\" angezeigt. Wenn die Anfrage jedoch abgerufen wird, wird das Bild nicht regeneriert. <\/p>\n

        Die L?sung ist einfach - jedes Mal eindeutige Namen von Bildern zu erstellen, damit der Browser sie nicht im Cache findet. Wir werden eine eindeutige Zeichenfolge anh?ngen, die uns durch die integrierte Time () -Funktion zum Bildnamen beim Erstellen und Anzeigen im Browser an uns zurückgegeben wird. <\/p>\n

        Fügen Sie diese Zeile direkt unten hinzu, wo Sie Ihre Sitzung gestartet haben: <\/p>\n

        $pixel_color = imagecolorallocate($image, 0,0,255);\n<\/span>for($i=0;$i<1000;$i++) {\n<\/span>    imagesetpixel($image,rand()%200,rand()%50,$pixel_color);\n<\/span>}  <\/span><\/pre>\n

        Ersetzen Sie das IMG SRC -Tag in der Funktion display () durch <\/p>\n

        $letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n<\/span>$len = strlen($letters);\n<\/span>$letter = $letters[rand(0, $len-1)];\n<\/span>\n$text_color = imagecolorallocate($image, 0,0,0);<\/span><\/pre>\n

        und der Teil, in dem wir das PNG -Bild in create_image () erstellt haben, werden ebenfalls durch <\/p> ersetzt\n

        for ($i = 0; $i< 6;$i++) {\n<\/span>    $letter = $letters[rand(0, $len-1)];\n<\/span>    imagestring($image, 5,  5+($i*30), 20, $letter, $text_color);\n<\/span>    $word.=$letter;\n<\/span>}\n<\/span>$_SESSION['captcha_string'] = $word;<\/span><\/pre>\n

        Die Bilder werden nun so etwas wie Image39342015 genannt. In diesem Verfahren werden Bilder so oft erstellt, wie die Seite aktualisiert wird, wodurch gro?e Mengen an Speicherplatz verschwenden k?nnen. Daher werden wir sicherstellen, dass alle anderen Bilder der PNG -Erweiterung vor dem Erstellen eines Bildes gel?scht werden. Fügen Sie Folgendes hinzu, kurz bevor die Funktion von ImagePng () aufgerufen wird. <\/p>\n

        $word.=$letter;\n<\/span>$_SESSION['captcha_string'] = $word;   <\/span><\/pre>\n

        In einer Produktions -App stellen Sie einfach sicher, dass Sie den Ordner isolieren, in dem CAPTCHA -Bilder gespeichert werden, andere nützliche Bilder werden m?glicherweise ebenfalls gel?scht. <\/p>\n

        Laden Sie den vollst?ndigen Code hier herunter. <\/p>\n

        Schlussfolgerung <\/h2>\n

        Es ist sehr einfach, verschiedene Arten von Captchas in PHP zu erstellen. Dieser Artikel behandelte die drei grundlegenden Dinge, die zum Erstellen eines Standard -Captcha - Form, Verzerrung und Text - verwendet wurden. Dieser Artikel war ein Beweis für das Konzept, und der hier vorgestellte Code sollte nicht in der Produktion verwendet werden - zumal exzellente Alternativen wie Recaptcha existieren, was auch die Tonausgabe unterstützt, um Menschen mit H?rbehinderungen zu helfen. Wir hoffen, Sie haben diesen Artikel interessant gefunden. Hinterlassen Sie Ihre Kommentare und Feedback unten! <\/p>\n\n\n\n

        h?ufig gestellte Fragen (FAQs) zu einfachen Captchas mit PHP GD <\/h2>\n\n\n\n

        Wie kann ich das Erscheinungsbild meines Captcha anpassen? Sie k?nnen die Schriftart, Farbe, Gr??e und sogar den Hintergrund der Captcha ?ndern. Um die Schriftart zu ?ndern, k?nnen Sie beispielsweise die Funktion imageettftext () verwenden und die Schriftart Datei in den Parametern angeben. Um die Farbe zu ?ndern, k?nnen Sie die Funktion \"ImageColOralLaCate () verwenden und die RGB -Werte für die gewünschte Farbe angeben. Denken Sie daran, dass Ihre Captcha nicht nur ?sthetischer, sondern auch sicherer gegen Bots ist. <\/h3>

        Wie kann ich meine Captcha sicherer machen? Eine M?glichkeit besteht darin, eine Mischung aus alphanumerischen Zeichen, sowohl den oberen als auch den unteren Geh?use, zu verwenden. Dies erh?ht die Anzahl der m?glichen Kombinationen und macht es Bots schwieriger zu erraten. Sie k?nnen auch die L?nge der Captcha erh?hen. Eine andere Methode besteht darin, dem Captcha -Bild Rauschen wie Linien oder Punkte hinzuzufügen. Dies kann mit den Funktionen imageline () und imageSellipse () in php. Mehrere Gründe. Ein h?ufiger Grund ist, dass die GD -Bibliothek in Ihrer PHP -Installation nicht installiert oder aktiviert ist. Sie k?nnen dies durch die Funktion der Funktion_Exists (\"GD_Info\") überprüfen. Wenn es false zurückgibt, ist GD nicht aktiviert. Ein weiterer Grund k?nnten Fehler in Ihrem PHP -Code sein. überprüfen Sie Ihre Fehlerprotokolle auf Hinweise. Sie müssten eine JavaScript -Funktion erstellen, die eine Anforderung an den Server sendet, um eine neue Captcha zu generieren. Der Server antwortet dann mit dem neuen Captcha -Bild, das dann auf der Webseite ohne vollst?ndige Seite neu geladen wird. <\/p>

        Kann ich Captcha ohne GD -Bibliothek verwenden? Wenn Sie Captchas in PHP erstellen, ist dies nicht der einzige Weg. Sie k?nnen auch andere Bibliotheken wie Imagemagick verwenden oder sogar eine textbasierte Captcha erstellen. Diese Methoden bieten jedoch m?glicherweise nicht die gleiche Sicherheits- und Anpassungsstufe wie die GD -Bibliothek. <\/h3>\n

        Wie kann ich meinem Kontaktformular Captcha hinzufügen? In der HTML müssten Sie ein Bild -Tag für das Captcha und ein Eingabefeld hinzufügen, damit der Benutzer die Captcha eingeben kann. Im PHP müssten Sie die Captcha generieren und die Eingabe des Benutzers validieren. <\/h3>

        Warum funktioniert meine Captcha -Validierung nicht? zu mehreren Gründen. Ein h?ufiger Grund ist, dass die Sitzungsvariablen nicht korrekt festgelegt oder abgerufen werden. Stellen Sie sicher, dass Session_Start () aufgerufen wird, bevor eine Ausgabe an den Browser gesendet wird und die Sitzungsvariablen korrekt verwendet werden. Ein weiterer Grund k?nnte sein, dass die Eingabe des Benutzers nicht korrekt mit dem Captcha verglichen wird. Stellen Sie sicher Beeintr?chtigte Benutzer k?nnen eine Herausforderung sein, aber es gibt verschiedene Methoden. Eine Methode besteht darin, eine Audio -Captcha -Option bereitzustellen. Dies beinhaltet die Generierung einer Audiodatei mit den laut gesprochenen Captcha -Zeichen. Eine andere Methode ist die Verwendung eines alternativen fragbasierten Captcha, bei dem dem Benutzer eine einfache Frage gestellt wird, dass ein Bot Schwierigkeiten haben würde, zu beantworten. Sie sind so konzipiert, dass sie Bots verhindern, und sind nicht narrensicher. Erweiterte Bots k?nnen OCR (optische Charaktererkennung) verwenden, um die Captcha -Zeichen zu lesen. Indem Sie Ihr Captcha komplexer machen, z. B. eine Mischung aus Zeichen, das Hinzufügen von Ger?uschen und das regelm??ige ?ndern der Captcha, k?nnen Sie es Bots schwerer machen. ? Andere Methoden sind die Verwendung eines Honeypots, bei dem es sich um ein verstecktes Formularfeld handelt, das Bots ausfüllen wird, der Menschen jedoch nicht das Verhalten des Benutzers überprüft, z. Spam basierend auf einer Datenbank mit bekannter Spam. <\/p>"}

        Inhaltsverzeichnis
        Key Takeaways
        Zeichnen captchas
        Erstellen Sie eine Form
        erzeugen zuf?llige Zeilen.
        erzeugen zuf?llige Punkte.
        Generieren Sie zuf?lligen Text
        Schlussfolgerung
        h?ufig gestellte Fragen (FAQs) zu einfachen Captchas mit PHP GD
        Wie kann ich das Erscheinungsbild meines Captcha anpassen? Sie k?nnen die Schriftart, Farbe, Gr??e und sogar den Hintergrund der Captcha ?ndern. Um die Schriftart zu ?ndern, k?nnen Sie beispielsweise die Funktion imageettftext () verwenden und die Schriftart Datei in den Parametern angeben. Um die Farbe zu ?ndern, k?nnen Sie die Funktion "ImageColOralLaCate () verwenden und die RGB -Werte für die gewünschte Farbe angeben. Denken Sie daran, dass Ihre Captcha nicht nur ?sthetischer, sondern auch sicherer gegen Bots ist.
        Kann ich Captcha ohne GD -Bibliothek verwenden? Wenn Sie Captchas in PHP erstellen, ist dies nicht der einzige Weg. Sie k?nnen auch andere Bibliotheken wie Imagemagick verwenden oder sogar eine textbasierte Captcha erstellen. Diese Methoden bieten jedoch m?glicherweise nicht die gleiche Sicherheits- und Anpassungsstufe wie die GD -Bibliothek.
        Wie kann ich meinem Kontaktformular Captcha hinzufügen? In der HTML müssten Sie ein Bild -Tag für das Captcha und ein Eingabefeld hinzufügen, damit der Benutzer die Captcha eingeben kann. Im PHP müssten Sie die Captcha generieren und die Eingabe des Benutzers validieren.
        Heim Backend-Entwicklung PHP-Tutorial Einfache Captchas mit PHP und GD

        Einfache Captchas mit PHP und GD

        Feb 22, 2025 am 09:13 AM

        Einfache Captchas mit PHP und GD

        Einfache Captchas mit PHP und GD

        Inzwischen haben wir alle Captcha -Bilder in Online -Formularen begegnet. Captchas ist ein notwendiges übel, und dieser Artikel wird Ihnen beibringen, wie sie gemacht werden.

        Bitte beachten Sie, dass es zwar bessere automatische L?sungen von Drittanbietern für Captchas gibt, wie z. Wir werden nicht erkl?ren, was Captchas tats?chlich sind, da es als allgemein bekannt ist und an anderer Stelle bereits detaillierter behandelt wird.

        Key Takeaways

        • Die GD -Bibliothek (Graphics Draw) in PHP kann verwendet werden, um Captcha -Bilder zu erstellen, die typischerweise aus Form, Verzerrung und Text bestehen.
        • Der Captcha -Erstellungsprozess beinhaltet die Anzeige eines leeren Bildes, das Erstellen einer Form, das Erzeugen von zuf?lligen Zeilen und Punkten und das Erzeugen von zuf?lligen Text.
        • Der Captcha -Validierungsprozess beinhaltet den Vergleich der Eingabe des Benutzers mit der in einer Sitzungsvariablen gespeicherten Captcha -Zeichenfolge. Wenn die Eingabe mit der Captcha -Zeichenfolge übereinstimmt, gilt die Antwort des Benutzers als korrekt.
        • Um sicherzustellen, dass das Captcha-Bild immer aktualisiert und nicht aus dem Browser-Cache abgerufen wird, k?nnen einzigartige Namen den Bildern mit der integrierten Zeit () in Php.
        • zugeordnet werden
        • W?hrend dieses Tutorial zeigt, wie ein einfaches Captcha erstellt wird, wird empfohlen, sicherere und zug?ngliche L?sungen von Drittanbietern wie Recaptcha für Produktionsanwendungen zu verwenden.

        Zeichnen captchas

        Sie müssen die GD -Bibliothek (Graphics Draw) vor dem Fortfahren installiert haben. Diese Bibliothek erm?glicht das Zeichnen von Grafiken und Bildern durch integrierte PHP-Funktionen. Um es zu installieren, führen Sie sudo apt-Get-Installieren Sie PHP5-GD aus oder befolgen Sie die Anweisungen.

        Captchas bestehen normalerweise aus 3 Dingen - Form, Verzerrung und Text.

        Wir werden die unten genannten Schritte befolgen:

          Zeigen Sie ein leeres Bild im Browser an.
        1. Erstellen Sie eine Form.
        2. erzeugen zuf?llige Zeilen.
        3. erzeugen zuf?llige Punkte.
        4. zuf?lligen Text erzeugen.
        Der in diesem Artikel verwendete prozedurale Stil ist nur vorhanden, weil dies ein Beweis für das Konzept ist, und um die endgültige Datei so einfach wie m?glich zu halten. In einem echten Projekt würden Sie oop gehen.

        Zeigen Sie ein leeres Bild an

        Das Bild wird von HTML so behandelt, als würde ein externes Bild mit dem Tag ?IMG“ angezeigt. Es werden zwei Funktionen verwendet - eine zum Erstellen des Bildes und eines zum Anzeigen.

        <span><span><?php
        </span></span><span><span>session_start();
        </span></span><span><span>?></span>
        </span>
            <span><span><span><title</span>></span>demo.php<span><span></title</span>></span>
        </span>    <span><span><span><body</span> <span>style<span>="<span>background-color:#ddd; </span>"</span></span>></span>
        </span>
            <span><span><?php
        </span></span><span>    <span>create_image();
        </span></span><span>    <span>display();
        </span></span><span>    <span>/***** definition of functions *****/
        </span></span><span>    <span>function display()
        </span></span><span>    <span>{
        </span></span><span>        <span>?></span>
        </span>
                <span><span><span><div</span> <span>style<span>="<span>text-align:center;</span>"</span></span>></span>
        </span>            <span><span><span><h3</span>></span>TYPE THE TEXT YOU SEE IN THE IMAGE<span><span></h3</span>></span>
        </span>            <span><span><span><b</span>></span>This is just to check if you are a robot<span><span></b</span>></span>
        </span>
                    <span><span><span><div</span> <span>style<span>="<span>display:block;margin-bottom:20px;margin-top:20px;</span>"</span></span>></span>
        </span>                <span><span><span><img</span> src<span>="image.png"</span>></span>
        </span>            <span><span><span></div</span>></span>
        </span>            //div1 ends
                <span><span><span></div</span>></span>                          //div2 ends
        </span>
            <span><span><?php
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>function  create_image()
        </span></span><span>    <span>{
        </span></span><span>        <span>$image = imagecreatetruecolor(200, 50);
        </span></span><span>        <span>imagepng($image, "image.png");
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>?></span>
        </span>    <span><span><span></body</span>></span>
        </span><span><span><?php
        </span></span><span><span>?></span></span>
        Die erste Zeile gibt den Beginn der Benutzersitzung auf unserer Seite an.

        Die Funktion display () hat nichts anderes als einen normalen HTML -Code, der ein Bild im Browser anzeigt. Davon abgesehen wird nur ein Styling durchgeführt, damit die Ausgabe pr?sentierbar aussieht.

        In der Funktion create_image () wird eine Variable verwendet, um das von der ImageCrreatReEcolor () -Funktion zurückgegebene Bild zu verweisen, das die Breite und L?nge des Bildes als Argumente nimmt. ImagePng () erstellt ein PNG -Bild des angegebenen Namens und Pfades (im selben Verzeichnis).

        Ein schwarzes Bild ist die Ausgabe nach unserem ersten Schritt.

        Einfache Captchas mit PHP und GD

        Beachten Sie, dass das Funktionsbildpng () die letzte Zeile unserer Funktion ist und alle folgenden Schritte nur vor diesem Funktionsaufruf in die Funktion create_image () eingefügt werden sollen, sonst würden sie nicht wirksam werden.

        Erstellen Sie eine Form

        Jede Form kann für die Captcha ausgew?hlt werden. Wir w?hlen ein Rechteck mit der von Funktionsage gefüllten Funktion () aus. Es dauert fünf Argumente-Bildreferenz, Start X-Pos, Start von Y-Pos, Ende X-Pos, enden Y-Pos und die Hintergrundfarbe. Sie k?nnen die entsprechende Funktion für eine Ellipse zur Erzeugung von elliptischen Captcha verwenden.

        Die Funktion von ImageColorAlleCocce () verteilt eine Farbe einer Variablen, da sie die RGB -Kombination der Farbe als Argumente nimmt. Der folgende Code ist in der Funktion create () hinzugefügt.

        <span><span><?php
        </span></span><span><span>session_start();
        </span></span><span><span>?></span>
        </span>
            <span><span><span><title</span>></span>demo.php<span><span></title</span>></span>
        </span>    <span><span><span><body</span> <span>style<span>="<span>background-color:#ddd; </span>"</span></span>></span>
        </span>
            <span><span><?php
        </span></span><span>    <span>create_image();
        </span></span><span>    <span>display();
        </span></span><span>    <span>/***** definition of functions *****/
        </span></span><span>    <span>function display()
        </span></span><span>    <span>{
        </span></span><span>        <span>?></span>
        </span>
                <span><span><span><div</span> <span>style<span>="<span>text-align:center;</span>"</span></span>></span>
        </span>            <span><span><span><h3</span>></span>TYPE THE TEXT YOU SEE IN THE IMAGE<span><span></h3</span>></span>
        </span>            <span><span><span><b</span>></span>This is just to check if you are a robot<span><span></b</span>></span>
        </span>
                    <span><span><span><div</span> <span>style<span>="<span>display:block;margin-bottom:20px;margin-top:20px;</span>"</span></span>></span>
        </span>                <span><span><span><img</span> src<span>="image.png"</span>></span>
        </span>            <span><span><span></div</span>></span>
        </span>            //div1 ends
                <span><span><span></div</span>></span>                          //div2 ends
        </span>
            <span><span><?php
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>function  create_image()
        </span></span><span>    <span>{
        </span></span><span>        <span>$image = imagecreatetruecolor(200, 50);
        </span></span><span>        <span>imagepng($image, "image.png");
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>?></span>
        </span>    <span><span><span></body</span>></span>
        </span><span><span><?php
        </span></span><span><span>?></span></span>

        Das vorherige Bild ist nach diesem Schritt wei?.

        Einfache Captchas mit PHP und GD

        erzeugen zuf?llige Zeilen.

        Jetzt beginnen wir tats?chlich damit, den Verzerrungsteil des Captcha zu machen. In PHP werden die Linien vom Startpunkt (x1, y1) bis zum Endpunkt (x2, y2) erzeugt. Wenn wir m?chten, dass unsere Linien beide Enden der Box berühren, werden wir die Koordinaten als beibehalten, d. H. Die vollst?ndige Breite unserer Box. Die Koordinaten werden zuf?llig generiert. Dies erzeugt nur eine zuf?llige Zeile. Wir werden mehrere Zeilen erzeugen, indem wir diese Funktionalit?t in eine für die Schleife einfügen.

        <span>$background_color = imagecolorallocate($image, 255, 255, 255);  
        </span><span>imagefilledrectangle($image,0,0,200,50,$background_color);</span>

        Die Funktion "ImageLine () nimmt in dieser Reihenfolge die Koordinaten X1, X2, Y1, Y2 als Argumente ab, abgesehen von der Bildreferenz und Farbe der Linie. Die Linienfarbe wurde genauso zugewiesen, als die Hintergrundfarbe im vorherigen Schritt zugewiesen wurde.

        Das y-Koordinate wird als Rand ()*P angegeben, da dies die H?he unserer Box ist und immer einen Wert unter 50 zurückgibt. Sie k?nnen alternativ Rand (0,50) verwenden. Sie ergeben den gleichen Ausgangsbereich.

        Einfache Captchas mit PHP und GD

        erzeugen zuf?llige Punkte.

        zuf?llige Punkte werden genauso generiert wie zuf?llige Zeilen. Die verwendete Funktion ist Imagesetpixel (). Diese Funktion nimmt den Wert der Koordinaten auf, bei denen der Punkt in die Box platziert wird.

        <span>$line_color = imagecolorallocate($image, 64,64,64); 
        </span><span>for($i=0;$i<10;$i++) {
        </span>    <span>imageline($image,0,rand()%50,200,rand()%50,$line_color);
        </span><span>}</span>

        Das X-Koordinate wird zuf?llig mit Rand ()* 0 generiert, da dies die Breite unserer Box ist und dies immer einen Wert unter 200 zurückgibt. Sie k?nnen alternativ Rand (0.200) verwenden. Sie ergeben den gleichen Ausgangsbereich. Die Y -Koordinate wird wie in den Zeilen Schritt erzeugt.

        Einfache Captchas mit PHP und GD

        Generieren Sie zuf?lligen Text

        Wir verweisen zuf?llig auf eine Position in der Zeichenfolge (die das Alphabet sowohl im unteren als auch im oberen Fall enth?lt) und weisen die Variable $ bild

        zu
        <span><span><?php
        </span></span><span><span>session_start();
        </span></span><span><span>?></span>
        </span>
            <span><span><span><title</span>></span>demo.php<span><span></title</span>></span>
        </span>    <span><span><span><body</span> <span>style<span>="<span>background-color:#ddd; </span>"</span></span>></span>
        </span>
            <span><span><?php
        </span></span><span>    <span>create_image();
        </span></span><span>    <span>display();
        </span></span><span>    <span>/***** definition of functions *****/
        </span></span><span>    <span>function display()
        </span></span><span>    <span>{
        </span></span><span>        <span>?></span>
        </span>
                <span><span><span><div</span> <span>style<span>="<span>text-align:center;</span>"</span></span>></span>
        </span>            <span><span><span><h3</span>></span>TYPE THE TEXT YOU SEE IN THE IMAGE<span><span></h3</span>></span>
        </span>            <span><span><span><b</span>></span>This is just to check if you are a robot<span><span></b</span>></span>
        </span>
                    <span><span><span><div</span> <span>style<span>="<span>display:block;margin-bottom:20px;margin-top:20px;</span>"</span></span>></span>
        </span>                <span><span><span><img</span> src<span>="image.png"</span>></span>
        </span>            <span><span><span></div</span>></span>
        </span>            //div1 ends
                <span><span><span></div</span>></span>                          //div2 ends
        </span>
            <span><span><?php
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>function  create_image()
        </span></span><span>    <span>{
        </span></span><span>        <span>$image = imagecreatetruecolor(200, 50);
        </span></span><span>        <span>imagepng($image, "image.png");
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>?></span>
        </span>    <span><span><span></body</span>></span>
        </span><span><span><?php
        </span></span><span><span>?></span></span>

        Wenn es in eine Schleife gelegt wird, sieht es so aus-

        <span>$background_color = imagecolorallocate($image, 255, 255, 255);  
        </span><span>imagefilledrectangle($image,0,0,200,50,$background_color);</span>

        Wir werden die Zeilen

        erkl?ren
        <span>$line_color = imagecolorallocate($image, 64,64,64); 
        </span><span>for($i=0;$i<10;$i++) {
        </span>    <span>imageline($image,0,rand()%50,200,rand()%50,$line_color);
        </span><span>}</span>

        im n?chsten Abschnitt.

        Die Funktion Imagestring () schreibt den Text in unserem Bild. Es hat 6 Argumente:

        1. Bildreferenz.
        2. Schriftgr??e des Textes (es kann h?chstens 5 sein).
        3. x-Koordinate (sich proportional für jedes Alphabet ver?ndern).
        4. y-koordinate (hielt gleich, obwohl wir dies auch zuf?llig ?ndern konnten).
        5. tats?chliche Zeichenfolge zu schreiben.
        6. Schriftfarbe des Textes.

        Sie k?nnen auch den Funktionsfunktionsettftext () verwenden, wenn Sie eine gr??ere Schriftart und einen anderen Schriftart -Stil haben m?chten. Es braucht 2 zus?tzliche Argumente für den Winkel- und Schriftstil des Textes.

        Berechnung der X-Koordinaten erfolgt durch Inspektion. Ungef?hr 35 Pixel (5 ($ I*30)) sind die Buchstaben, wobei $ i = 0,1,2,3,4,5,6 $ i = 0,1,2,3,4,5,6 ist. Dies liegt daran, dass wenn wir diesen Wert etwa 15-20px gehalten h?tten, es eine M?glichkeit gegeben h?tte, dass sich zwei Buchstaben überlappten. Wenn der Wert mehr als 40px gewesen w?re, h?tten die Buchstaben insgesamt nicht in die Box gepasst.

        Dies erzeugt einen 6 Alphabet Captcha -Text. Wir k?nnen immer mehr Zuf?lligkeit schaffen, indem wir die Aspekte ?ndern, die aufgrund der Einfachheit, wie Farbe, Y-Koordinaten usw. konstant gehalten wurden

        Die letzte Captcha sieht so aus

        Einfache Captchas mit PHP und GD

        Der im Captcha geschriebene Text ?ndert sich jedes Mal, wenn Sie die Seite aktualisieren.

        Mehr Zuf?lligkeit kann erreicht werden, indem Designs mit den Pixeln erstellt oder die Farbe oder Gr??e ge?ndert werden.

        validieren

        hier wird die Antwort des Benutzers erstellt und nach der Verarbeitung erh?lt er/sie eine Antwort. Zun?chst wird ein einfaches Formular mit einem Eingabetialbox und einer Senden -Schaltfl?che erstellt. Es kann viele M?glichkeiten geben, eine CAPTCHA gem?? den Anforderungen komplexer Webanwendungen zu verarbeiten. Wenn wir es jedoch für dieses Beispiel einfach halten, werden wir es auf derselben Seite verarbeiten.

        Die beiden Zeilen, die in den vorherigen Code -Snippets ungekl?rt sind, kommen jetzt ins Spiel:

          $ word. = $ Bild; - Der Verkettungsoperator. wird verwendet, um alle einzelnen Buchstaben nacheinander anzuh?ngen und das 6-Buchstaben-Wort zu generieren.
        1. $ _ Session ['captcha_string'] = $ Word; Unsere Captcha -Zeichenfolge wird in einer Sitzungsvariablen gespeichert, die für Validierungszwecke verwendet wird.
        wir ?ndern die Definition von Display (), um eine form?hnliche Struktur hinzuzufügen.

        Es werden zwei Einreichungsschaltfl?chen verwendet, eine zum Senden der Zeichenfolge und eine andere, um die Seite zu aktualisieren.

        Die folgenden Zeilen werden zwischen den beiden Abschluss -Div -Tags hinzugefügt (siehe Kommentare in der vorherigen Anzeige ())

        <span><span><?php
        </span></span><span><span>session_start();
        </span></span><span><span>?></span>
        </span>
            <span><span><span><title</span>></span>demo.php<span><span></title</span>></span>
        </span>    <span><span><span><body</span> <span>style<span>="<span>background-color:#ddd; </span>"</span></span>></span>
        </span>
            <span><span><?php
        </span></span><span>    <span>create_image();
        </span></span><span>    <span>display();
        </span></span><span>    <span>/***** definition of functions *****/
        </span></span><span>    <span>function display()
        </span></span><span>    <span>{
        </span></span><span>        <span>?></span>
        </span>
                <span><span><span><div</span> <span>style<span>="<span>text-align:center;</span>"</span></span>></span>
        </span>            <span><span><span><h3</span>></span>TYPE THE TEXT YOU SEE IN THE IMAGE<span><span></h3</span>></span>
        </span>            <span><span><span><b</span>></span>This is just to check if you are a robot<span><span></b</span>></span>
        </span>
                    <span><span><span><div</span> <span>style<span>="<span>display:block;margin-bottom:20px;margin-top:20px;</span>"</span></span>></span>
        </span>                <span><span><span><img</span> src<span>="image.png"</span>></span>
        </span>            <span><span><span></div</span>></span>
        </span>            //div1 ends
                <span><span><span></div</span>></span>                          //div2 ends
        </span>
            <span><span><?php
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>function  create_image()
        </span></span><span>    <span>{
        </span></span><span>        <span>$image = imagecreatetruecolor(200, 50);
        </span></span><span>        <span>imagepng($image, "image.png");
        </span></span><span>    <span>}
        </span></span><span>
        </span><span>    <span>?></span>
        </span>    <span><span><span></body</span>></span>
        </span><span><span><?php
        </span></span><span><span>?></span></span>

        Bevor Sie sich weiter bewegen, müssen wir wissen, wann wir angezeigt werden müssen und wann das Eingabefeld nicht angezeigt werden soll. Es wird nur

        angezeigt
        1. Wenn die Seite gerade geladen ist.
        2. Wenn die Antwort des Benutzers falsch war.

        Die erste Bedingung wird durch die Verwendung eines $ -Flags erfüllt, das bei jedem Klicken auf "1" auf "1" eingestellt ist. Anfangs wurde es auf einen anderen Wert eingestellt. Die zweite Bedingung wird erreicht, indem überprüft wird, ob der in unserer Sitzungsvariablen gespeicherte Wert mit der Benutzereingabe übereinstimmt (siehe Code unten).

        Um dies zu erreichen, werden wir die folgenden Zeilen unseres Startschritts zu Beginn des Artikels ersetzen:

        <span>$background_color = imagecolorallocate($image, 255, 255, 255);  
        </span><span>imagefilledrectangle($image,0,0,200,50,$background_color);</span>

        mit:

        <span>$line_color = imagecolorallocate($image, 64,64,64); 
        </span><span>for($i=0;$i<10;$i++) {
        </span>    <span>imageline($image,0,rand()%50,200,rand()%50,$line_color);
        </span><span>}</span>

        Beachten Sie, dass die Funktionen create_image () und display () nur gem?? den 2 oben diskutierten Bedingungen aufgerufen werden.

        Wir ben?tigen die Sitzungsvariable von der vorherigen Seite, sodass die Sitzung hier nicht zerst?rt wird. Die Sitzung wird automatisch zerst?rt, sobald das Browserfenster geschlossen ist.

        Die Captcha sieht so aus-

        Einfache Captchas mit PHP und GD

        Wenn die Eingabe falsch ist, wird der Benutzer erneut aufgefordert.

        Einfache Captchas mit PHP und GD

        Wenn die Eingabe korrekt ist, wird der Benutzer eine Nachricht angezeigt.

        Einfache Captchas mit PHP und GD

        Es gibt eine geringfügige Einschr?nkung - Wenn der Benutzer die Rücktaste zurückdrückt, wird jedes im Cache des Browsers vorhandene Bild nicht neu geladen, w?hrend die Seite dies tut. In einer Postanforderung wird die Browser -Back -Schaltfl?che eine Seite "Dokument abgelaufen" angezeigt. Wenn die Anfrage jedoch abgerufen wird, wird das Bild nicht regeneriert.

        Die L?sung ist einfach - jedes Mal eindeutige Namen von Bildern zu erstellen, damit der Browser sie nicht im Cache findet. Wir werden eine eindeutige Zeichenfolge anh?ngen, die uns durch die integrierte Time () -Funktion zum Bildnamen beim Erstellen und Anzeigen im Browser an uns zurückgegeben wird.

        Fügen Sie diese Zeile direkt unten hinzu, wo Sie Ihre Sitzung gestartet haben:

        <span>$pixel_color = imagecolorallocate($image, 0,0,255);
        </span><span>for($i=0;$i<1000;$i++) {
        </span>    <span>imagesetpixel($image,rand()%200,rand()%50,$pixel_color);
        </span><span>}  </span>

        Ersetzen Sie das IMG SRC -Tag in der Funktion display () durch

        <span>$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        </span><span>$len = strlen($letters);
        </span><span>$letter = $letters[rand(0, $len-1)];
        </span>
        <span>$text_color = imagecolorallocate($image, 0,0,0);</span>

        und der Teil, in dem wir das PNG -Bild in create_image () erstellt haben, werden ebenfalls durch

        ersetzt
        <span>for ($i = 0; $i< 6;$i++) {
        </span>    <span>$letter = $letters[rand(0, $len-1)];
        </span>    <span>imagestring($image, 5,  5+($i*30), 20, $letter, $text_color);
        </span>    <span>$word.=$letter;
        </span><span>}
        </span><span>$_SESSION['captcha_string'] = $word;</span>

        Die Bilder werden nun so etwas wie Image39342015 genannt. In diesem Verfahren werden Bilder so oft erstellt, wie die Seite aktualisiert wird, wodurch gro?e Mengen an Speicherplatz verschwenden k?nnen. Daher werden wir sicherstellen, dass alle anderen Bilder der PNG -Erweiterung vor dem Erstellen eines Bildes gel?scht werden. Fügen Sie Folgendes hinzu, kurz bevor die Funktion von ImagePng () aufgerufen wird.

        <span>$word.=$letter;
        </span><span>$_SESSION['captcha_string'] = $word;   </span>

        In einer Produktions -App stellen Sie einfach sicher, dass Sie den Ordner isolieren, in dem CAPTCHA -Bilder gespeichert werden, andere nützliche Bilder werden m?glicherweise ebenfalls gel?scht.

        Laden Sie den vollst?ndigen Code hier herunter.

        Schlussfolgerung

        Es ist sehr einfach, verschiedene Arten von Captchas in PHP zu erstellen. Dieser Artikel behandelte die drei grundlegenden Dinge, die zum Erstellen eines Standard -Captcha - Form, Verzerrung und Text - verwendet wurden. Dieser Artikel war ein Beweis für das Konzept, und der hier vorgestellte Code sollte nicht in der Produktion verwendet werden - zumal exzellente Alternativen wie Recaptcha existieren, was auch die Tonausgabe unterstützt, um Menschen mit H?rbehinderungen zu helfen. Wir hoffen, Sie haben diesen Artikel interessant gefunden. Hinterlassen Sie Ihre Kommentare und Feedback unten!

        h?ufig gestellte Fragen (FAQs) zu einfachen Captchas mit PHP GD

        Wie kann ich das Erscheinungsbild meines Captcha anpassen? Sie k?nnen die Schriftart, Farbe, Gr??e und sogar den Hintergrund der Captcha ?ndern. Um die Schriftart zu ?ndern, k?nnen Sie beispielsweise die Funktion imageettftext () verwenden und die Schriftart Datei in den Parametern angeben. Um die Farbe zu ?ndern, k?nnen Sie die Funktion "ImageColOralLaCate () verwenden und die RGB -Werte für die gewünschte Farbe angeben. Denken Sie daran, dass Ihre Captcha nicht nur ?sthetischer, sondern auch sicherer gegen Bots ist.

        Wie kann ich meine Captcha sicherer machen? Eine M?glichkeit besteht darin, eine Mischung aus alphanumerischen Zeichen, sowohl den oberen als auch den unteren Geh?use, zu verwenden. Dies erh?ht die Anzahl der m?glichen Kombinationen und macht es Bots schwieriger zu erraten. Sie k?nnen auch die L?nge der Captcha erh?hen. Eine andere Methode besteht darin, dem Captcha -Bild Rauschen wie Linien oder Punkte hinzuzufügen. Dies kann mit den Funktionen imageline () und imageSellipse () in php. Mehrere Gründe. Ein h?ufiger Grund ist, dass die GD -Bibliothek in Ihrer PHP -Installation nicht installiert oder aktiviert ist. Sie k?nnen dies durch die Funktion der Funktion_Exists ("GD_Info") überprüfen. Wenn es false zurückgibt, ist GD nicht aktiviert. Ein weiterer Grund k?nnten Fehler in Ihrem PHP -Code sein. überprüfen Sie Ihre Fehlerprotokolle auf Hinweise. Sie müssten eine JavaScript -Funktion erstellen, die eine Anforderung an den Server sendet, um eine neue Captcha zu generieren. Der Server antwortet dann mit dem neuen Captcha -Bild, das dann auf der Webseite ohne vollst?ndige Seite neu geladen wird.

        Kann ich Captcha ohne GD -Bibliothek verwenden? Wenn Sie Captchas in PHP erstellen, ist dies nicht der einzige Weg. Sie k?nnen auch andere Bibliotheken wie Imagemagick verwenden oder sogar eine textbasierte Captcha erstellen. Diese Methoden bieten jedoch m?glicherweise nicht die gleiche Sicherheits- und Anpassungsstufe wie die GD -Bibliothek.

        Wie kann ich meinem Kontaktformular Captcha hinzufügen? In der HTML müssten Sie ein Bild -Tag für das Captcha und ein Eingabefeld hinzufügen, damit der Benutzer die Captcha eingeben kann. Im PHP müssten Sie die Captcha generieren und die Eingabe des Benutzers validieren.

        Warum funktioniert meine Captcha -Validierung nicht? zu mehreren Gründen. Ein h?ufiger Grund ist, dass die Sitzungsvariablen nicht korrekt festgelegt oder abgerufen werden. Stellen Sie sicher, dass Session_Start () aufgerufen wird, bevor eine Ausgabe an den Browser gesendet wird und die Sitzungsvariablen korrekt verwendet werden. Ein weiterer Grund k?nnte sein, dass die Eingabe des Benutzers nicht korrekt mit dem Captcha verglichen wird. Stellen Sie sicher Beeintr?chtigte Benutzer k?nnen eine Herausforderung sein, aber es gibt verschiedene Methoden. Eine Methode besteht darin, eine Audio -Captcha -Option bereitzustellen. Dies beinhaltet die Generierung einer Audiodatei mit den laut gesprochenen Captcha -Zeichen. Eine andere Methode ist die Verwendung eines alternativen fragbasierten Captcha, bei dem dem Benutzer eine einfache Frage gestellt wird, dass ein Bot Schwierigkeiten haben würde, zu beantworten. Sie sind so konzipiert, dass sie Bots verhindern, und sind nicht narrensicher. Erweiterte Bots k?nnen OCR (optische Charaktererkennung) verwenden, um die Captcha -Zeichen zu lesen. Indem Sie Ihr Captcha komplexer machen, z. B. eine Mischung aus Zeichen, das Hinzufügen von Ger?uschen und das regelm??ige ?ndern der Captcha, k?nnen Sie es Bots schwerer machen. ? Andere Methoden sind die Verwendung eines Honeypots, bei dem es sich um ein verstecktes Formularfeld handelt, das Bots ausfüllen wird, der Menschen jedoch nicht das Verhalten des Benutzers überprüft, z. Spam basierend auf einer Datenbank mit bekannter Spam.

        Das obige ist der detaillierte Inhalt vonEinfache Captchas mit PHP und GD. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

        Erkl?rung dieser Website
        Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

        Hei?e KI -Werkzeuge

        Undress AI Tool

        Undress AI Tool

        Ausziehbilder kostenlos

        Undresser.AI Undress

        Undresser.AI Undress

        KI-gestützte App zum Erstellen realistischer Aktfotos

        AI Clothes Remover

        AI Clothes Remover

        Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

        Clothoff.io

        Clothoff.io

        KI-Kleiderentferner

        Video Face Swap

        Video Face Swap

        Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

        Hei?e Werkzeuge

        Notepad++7.3.1

        Notepad++7.3.1

        Einfach zu bedienender und kostenloser Code-Editor

        SublimeText3 chinesische Version

        SublimeText3 chinesische Version

        Chinesische Version, sehr einfach zu bedienen

        Senden Sie Studio 13.0.1

        Senden Sie Studio 13.0.1

        Leistungsstarke integrierte PHP-Entwicklungsumgebung

        Dreamweaver CS6

        Dreamweaver CS6

        Visuelle Webentwicklungstools

        SublimeText3 Mac-Version

        SublimeText3 Mac-Version

        Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

        Wie implementiere ich Authentifizierung und Autorisierung in PHP? Wie implementiere ich Authentifizierung und Autorisierung in PHP? Jun 20, 2025 am 01:03 AM

        TosecurelyHandleAuthenticationAuthorizationInphp, folge theSteps: 1.Alwayshashpasswordswithpassword_hash () und password_verify (), usePreeParedStatementStopreventsQlinjapitca und StoreuserDatain $ _SessionArtelogin.2.ImplementscaChescescesc

        Wie k?nnen Sie Dateien -Uploads in PHP sicher verarbeiten? Wie k?nnen Sie Dateien -Uploads in PHP sicher verarbeiten? Jun 19, 2025 am 01:05 AM

        Um Datei -Uploads in PHP sicher zu verarbeiten, besteht der Kern darin, Dateitypen zu überprüfen, Dateien umzubenennen und die Berechtigungen zu beschr?nken. 1. Verwenden Sie Finfo_File (), um den realen MIME -Typ zu überprüfen, und nur bestimmte Typen wie Bild/JPEG sind zul?ssig. 2. Verwenden Sie Uniqid (), um zuf?llige Dateinamen zu generieren und sie im Root-Verzeichnis ohne Web zu speichern. 3.. Begrenzen Sie die Dateigr??e durch Php.ini- und HTML -Formulare und setzen Sie die Verzeichnisberechtigungen auf 0755; 4. Verwenden Sie Clamav, um Malware zu scannen, um die Sicherheit zu verbessern. Diese Schritte verhindern effektiv Sicherheitslücken und stellen sicher, dass der Upload -Prozess des Datei -Uploads sicher und zuverl?ssig ist.

        Was sind die Unterschiede zwischen == (loser Vergleich) und === (strenger Vergleich) in PHP? Was sind die Unterschiede zwischen == (loser Vergleich) und === (strenger Vergleich) in PHP? Jun 19, 2025 am 01:07 AM

        In PHP ist der Hauptunterschied zwischen == und == die Strenge der Typprüfung. == Die Konvertierung des Typs wird vor dem Vergleich durchgeführt, beispielsweise 5 == "5" gibt true zurück und === fordert an, dass der Wert und der Typ gleich sind, bevor True zurückgegeben wird, z. B. 5 === "5" gibt false zurück. In den Nutzungsszenarien ist === sicherer und sollte zuerst verwendet werden, und == wird nur verwendet, wenn die Typumwandlung erforderlich ist.

        Wie führe ich arithmetische Operationen in PHP (, -, *, /, %) aus? Wie führe ich arithmetische Operationen in PHP (, -, *, /, %) aus? Jun 19, 2025 pm 05:13 PM

        Die Methoden zur Verwendung grundlegender mathematischer Operationen in PHP sind wie folgt: 1. Additionszeichen unterstützen Ganzfaktoren und Floating-Punkt-Zahlen und k?nnen auch für Variablen verwendet werden. String -Nummern werden automatisch konvertiert, aber nicht für Abh?ngigkeiten empfohlen. 2. Subtraktionszeichen verwenden - Zeichen, Variablen sind gleich, und die Typumwandlung ist ebenfalls anwendbar. 3. Multiplikationszeichen verwenden * Zeichen, die für Zahlen und ?hnliche Zeichenfolgen geeignet sind; 4. Division verwendet / Zeichen, die vermeiden müssen, durch Null zu dividieren, und beachten Sie, dass das Ergebnis m?glicherweise schwimmende Punktzahlen sein kann. 5. Die Modulzeichen k?nnen verwendet werden, um ungerade und sogar Zahlen zu beurteilen, und wenn negative Zahlen verarbeitet werden, stimmen die Restzeichen mit der Dividende überein. Der Schlüssel zur korrekten Verwendung dieser Operatoren liegt darin, sicherzustellen, dass die Datentypen klar sind und die Grenzsituation gut behandelt wird.

        Wie k?nnen Sie mit NoSQL -Datenbanken (z. B. MongoDB, Redis) von PHP interagieren? Wie k?nnen Sie mit NoSQL -Datenbanken (z. B. MongoDB, Redis) von PHP interagieren? Jun 19, 2025 am 01:07 AM

        Ja, PHP kann mit NoSQL -Datenbanken wie MongoDB und Redis durch bestimmte Erweiterungen oder Bibliotheken interagieren. Verwenden Sie zun?chst den MongoDBPHP -Treiber (installiert über PECL oder Composer), um Client -Instanzen zu erstellen und Datenbanken und Sammlungen zu betreiben, wobei Sie Insertion, Abfrage, Aggregation und andere Vorg?nge unterstützen. Zweitens verwenden Sie die Predis Library oder PHPREDIS-Erweiterung, um eine Verbindung zu Redis herzustellen, Schlüsselwerteinstellungen und -akquisitionen durchzuführen und PHPREDIS für Hochleistungsszenarien zu empfehlen, w?hrend Predis für die schnelle Bereitstellung bequem ist. Beide sind für Produktionsumgebungen geeignet und gut dokumentiert.

        Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Jun 23, 2025 am 12:56 AM

        TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

        Was ist PHP und warum wird es für die Webentwicklung verwendet? Was ist PHP und warum wird es für die Webentwicklung verwendet? Jun 23, 2025 am 12:55 AM

        PHPBECAMEPOPULARFORWebDevelopmentDuetoitSeaseoflearning, Seamlessintegrationwithhtml, weit verbreitete Hostingsupport, andalargeecosystemincludingFrameWorkelaravelandcmsplatformen -?hnliche WordPress.itexcelsinformlingsformen, Managingusesersions, Interacti

        Wie setzen Sie die PHP -Zeitzone? Wie setzen Sie die PHP -Zeitzone? Jun 25, 2025 am 01:00 AM

        Tosettherighttimezoneinphp, usedate_default_timezone_set () functionAtthestartofyourScriptWithAvalididentifiersuchas'america/new_york'.1.usedate_default_timezone_set () beeanydate/timeFununtions.2.Alternativ, konfigurieren

        See all articles