Antworten auf deine Fragen:
Neues Thema erstellen

PHP Captcha Probleme

Fuehrwehrma

Noch nicht viel geschrieben

Hallo Zusammen

Ich habe mir eine Captcha Ausgabe mithilfe von google geschrieben.
Da ich mit Coda (Mac) programmiere, gibt es eine Vorschau, wo Coda das Sript überprüft. Da bekomme ich die Fehlermelung "Notice: Undefined variable: Captcha_Random_Code in /- on line 61 Captcha Code konnte nicht generiert werden!"
Hier ist das erste Problem. Ich weiss nicht wo ein Fehler sein soll.

Das zweite Problem das ich habe: Wenn ich jetzt das Script auf meinen Webserver lade und das Script ausführe, dann bekomme ich immer die folgende Fehlermeldung: "Die Grafik "http://domain.com/captcha/captcha.php5" kann nicht angezeigt werden, weil sie Fehler enthält." (in Firefox). Auch hier bin ich ratlos. Ich habe schon gegooglet, habe aber nichts gefunden, was abhilfe bei diesem Problem schafft.
Habe auch schon das Script nochmals "sauber" geschrieben, aber das Problem besteht weiter hin. Auch gibt mir PHP auf dem Webserver keine "richtige" Fehlermeldung zurück (error_reporting (E_ALL).

Hat von euch jemand schonmal diese Problem gehabt?

Danke schonmal im Voraus für eure Hilfe.

Hier noch mein Captcha Script:
PHP:
<?php
// Fehlermeldung erzwingen und Ausgeben
error_reporting (E_ALL);

// Session starten
session_start();

// Alten CAPTCHA-Code aus der Session loeschen
unset($_SESSION['Captcha_Code']);

// Das Cachen der Grafik verhindern
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified:" .gmdate("D, d M Y H:i:s") ."GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Dem Browser mitteilen, dass es hier um ein PNG handelt
header("Content-type: image/png");

//---------- Optionen ---------- //

// Schriftgroesse festlegen (Hier kann editiert werden)
$FontSize = 12;

// Schriftarten (Hier kann editiert werden --> Ordnerpfad+Schriftart)
$Font = 'captcha_files/font.ttf';

// Texthoehe (Hier kann editiert werden)
$TextHeight = 45;

// Welleneffekt (Hier kann editiert werden)
// Welleneffekt nutzten? ->1=nein ->2=ja
$WaveEffect = 1;

// Hintergrundbilder (Hier kann editiert werden --> Ordnerpfad+Bild)
$bg1 = 'captcha_files/background1.png';
$bg2 = 'captcha_files/background2.png';

//---------- Funktion (Hier nicht editieren) ----------//
// Captcha Code generieren
function Captcha_Random_Code()
    {
    mt_srand ((double) microtime()*1000000);
    $AlphaNumericString = '23456789ABCDEFGHJKLMNOPQRSTUVWXYZ';
    $length = 6;
    $length_string = strlen($AlphaNumericString)-1;
    $Captcha_Temp_Code = '';

        for ($i=0; $i<$length; $i++)
        {
        $Captcha_Temp_Code .= $AlphaNumericString {mt_rand(0, $length_string)};
        }
        return $Captcha_Temp_Code;
    }

// Captcha Code in der Session speichern
$_SESSION['Captcha_Code'] = Captcha_Random_Code(6);                                    // Captcha_Random_Code(6) = Zahl --> Anzahl Stellen

// Captcha_Random_Code definieren
$_SESSION['Captcha_Code'] = $Captcha_Random_Code;

// Ueberpruefen, ob Captcha Code generiert wurde
if (isset($Captcha_Random_Code))
    {
    $_SESSION['Captcha_Code'] = Captcha_Random_Code(6); 
    }
else
    {
    die('Captcha Code konnte nicht generiert werden!');
    }

// Zufallshintergrund
mt_srand((double) microtime()*1000000);
$Image1 = mt_rand (1, 2);
    switch ($Image1)
    {
    case 1:
    $Graphic = imagecreatefrompng ($bg1);
    $Graphichelp = imagecreatefrompng ($bg1);
    break 1;

    case 2:
    $Graphic = imagecreatefrompng ($bg2);
    $Graphichelp = imagecreatefrompng ($bg2);
    break 1;
    }

// Textfarbe
$textcolor = array(
    imagecolorallocate ($Graphic, 128, 128, 128),                                     // ($Graphic, Zahlen) Zahlen --> RGB Code
    imagecolorallocate ($Graphic, 0, 0, 0),
    imagecolorallocate ($Graphic, 50, 150, 0),
    imagecolorallocate ($Graphic, 128, 0, 128),
    imagecolorallocate ($Graphic, 128, 128, 255),
    imagecolorallocate ($Graphic, 255, 100, 0),
    imagecolorallocate ($Graphic, 200, 128, 0),
    imagecolorallocate ($Graphic, 250, 100, 150),
    imagecolorallocate ($Graphic, 120, 150, 200),
    imagecolorallocate ($Graphic, 120, 140, 180)
);

// Text auf den Hintergrund schreiben
imagettftext ($Graphic, $FontSize, mt_rand (-13, 13), 10,  $TextHeight+mt_rand (-7, 8), $TextColor1 = $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[0]);
imagettftext ($Graphic, $FontSize, mt_rand (-13, 13), 45,  $TextHeight+mt_rand (-7, 8), $TextColor2 = $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[1]);
imagettftext ($Graphic, $FontSize, mt_rand (-13, 13), 80,  $TextHeight+mt_rand (-7, 8), $TextColor3 = $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[2]);
imagettftext ($Graphic, $FontSize, mt_rand (-13, 13), 115, $TextHeight+mt_rand (-7, 8), $TextColor4 = $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[3]);
imagettftext ($Graphic, $FontSize, mt_rand (-13, 13), 150, $TextHeight+mt_rand (-7, 8), $TextColor5 = $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[4]);
imagettftext ($Graphic, $FontSize, mt_rand (-13, 13), 190, $TextHeight+mt_rand (-7, 8), $TextColor6 = $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[5]);
?>
 

philbring

Webdesigner

AW: PHP Captcha Probleme

Hallo,

das Script enthält einen großen Fehler.

Die Variable $capture_random_code (Zeilen 61 und 64) wird nirgendwo gesetzt.

Außerdem muss das Verzeichnis captacha_files (Zeilen 37, 38) mit den Dateien background1.png und background2.png existieren.

Ausserdem wird das erzeugte Bild nirgends ausgegeben.



Viele Grüße

Peter
 

philbring

Webdesigner

AW: PHP Captcha Probleme

Hallo,

ich habe mir das Script nochmal kurz angeschaut.

Eigentlich macht es genau was es soll ;)

In Zeile 64 testest du ob die Variable $Captcha_Random_Code gesetzt ist. Wenn nicht, wie in deinem Script, wird die Fehlermeldung in Zeile 70 ausgegeben.

Nun mal Spaß beiseite.

Zeile 61 sollte so geändert werden:
$Captcha_Random_Code = $_SESSION['Captcha_Code'];

Am Ende des Scriptes müssen die beiden Befehle
imagepng($Graphic);
imagedestroy($Graphic);
eingefügt werden.

In das Verzeichnis captcha_files müssen die Dateien
backgrpund1.png (Zeile 37), background2.png (Zeile 38) und font.ttf (Zeile 27).

Dann passiert zumindest etwas.

In dem Script gibt es viele ungenutzte Variablen.

Viele Grüße


Peter
 

Fuehrwehrma

Noch nicht viel geschrieben

AW: PHP Captcha Probleme

Hallo

Danke erstamal für deine Antwort.

Den Ordner (captcha_files) ist soweit klar, habe ich auch so angelegt.
Das mit imagepng($Graphic); und imagedestroy($Graphic); ist mein Fehler (ist bei mir vergessengegangen, resp. habe nicht daran gedacht :().
Danke für deinen Hinweis.

Wie meinst du dass mit den ungenutzen Variablen?
Die einzige ungenutzte Variable ist $WellenEffect. Sonst sehe ich keine ungenutze Variable.

Ich habe das Script geändert und getestet. Das Bild wird nun angezeigt, aber der Captcha Code dafür nicht. Habe das Script nochmals überflogen. Theoretisch sollte doch der Code auf dem Bild sein, oder habe ich irgendwo noch einen Fehler, den ich übersehen habe?

:danke:

Gruss Phil
 

philbring

Webdesigner

AW: PHP Captcha Probleme

Hallo


Ich habe das Script geändert und getestet. Das Bild wird nun angezeigt, aber der Captcha Code dafür nicht. Habe das Script nochmals überflogen. Theoretisch sollte doch der Code auf dem Bild sein, oder habe ich irgendwo noch einen Fehler, den ich übersehen habe?

Hallo,

ein kleiner Fehler steckt noch im Code.

In der Funktion imagettftext()
benutzt du den Parameter für die farbe falsch. Anstelle $TextColor1 = $textcolor[array_rand($textcolor)] einfach nur $textcolor[array_rand($textcolor)] (usw.) benutzen.
Nun wird das Bild incl. Text richtig erzeugt.

Noch eine Anmerkung: Der Text wird nur dann in das Bild geschrieben wenn das Bild groß genug ist.

Hier noch ein Tip. Die notwendige Größe für das Bild kannst du mit imagettfbbox ermitteln. Hinweise dazu findest du hier: PHP: imagettfbbox - Manual


Viele Grüße

Peter

P.S.: Die unbenutzte variable ist
$Graphichelp
 

Fuehrwehrma

Noch nicht viel geschrieben

AW: PHP Captcha Probleme

Hallo Peter

Habe unterdessen etwas zeit gefunden, um das Script nochmals zu ändern und zu prüfen. Funktioniert einwandfrei. :daumenhoch:
Muss jetzt nur noch das mit der genauen Bildgrösse machen (imagettfbbox).

Danke nochmals für deine Hilfe!

PS: Noch eine kurze Frage zur PHP-Versionen. Mein Webhoster hat standarmässig PHP 4.3.x installiert. Wenn ich jetzt die Version 5, resp. 5.2 nutzen will, muss ich der PHP Datei die Versionsnummer anhängen (z.b name.php5). Jetzt habe ich aber bei meinem Script festgestellt, wenn ich es auf PHP 5 laufen lasse, dass die Buchstabe/Zahlen alle auf der linken Seite des Bildes sind (unter PHP 4 läuft alles ohne Probleme). Hängt das mit den verschiedenen PHP Versionen zusammen?
 

Fuehrwehrma

Noch nicht viel geschrieben

AW: PHP Captcha Probleme

Hallo nochmals

Hier ist das "bugfreie" Captch Script.

PHP:
<?php
// Fehlermeldung erzwingen und Ausgeben
error_reporting (E_ALL);

// Session starten
session_start();

// Alten CAPTCHA-Code aus der Session loeschen
unset($_SESSION['Captcha_Code']);

// Das Cachen der Grafik verhindern
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified:" .gmdate("D, d M Y H:i:s") ."GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Dem Browser mitteilen, dass es hier um ein PNG handelt
header("Content-type: image/png");

//---------- Optionen ---------- //

// Schriftgroesse festlegen (Hier kann editiert werden)
$FontSize = 18;

// Schriftarten (Hier kann editiert werden --> Ordnerpfad+Schriftart)
$Font = 'captcha_files/font.ttf';

// Texthoehe (Hier kann editiert werden)
$TextHeight = 40;

// Welleneffekt (Hier kann editiert werden)
// Welleneffekt nutzten? ->1=nein ->2=ja
$WaveEffect = 1;

// Hintergrundbilder (Hier kann editiert werden --> Ordnerpfad+Bild)
$bg1 = 'captcha_files/background1.png';
$bg2 = 'captcha_files/background2.png';

//---------- Funktion (Hier nicht editieren) ----------//
// Captcha Code generieren
function Captcha_Random_Code()
    {
    mt_srand ((double) microtime()*1000000);
    $AlphaNumericString = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
    $length = 6;
    $length_string = strlen($AlphaNumericString)-1;
    $Captcha_Temp_Code = '';

        for ($i=0; $i<$length; $i++)
        {
        $Captcha_Temp_Code .= $AlphaNumericString {mt_rand(0, $length_string)};
        }
        return $Captcha_Temp_Code;
    }

// Captcha Code in der Session speichern
$_SESSION['Captcha_Code'] = Captcha_Random_Code(6);                                    // Captcha_Random_Code(6) = Zahl --> Anzahl Stellen

// Captcha_Random_Code definieren
$Captcha_Random_Code = $_SESSION['Captcha_Code'];

// Ueberpruefen, ob Captcha Code generiert wurde
if (isset($Captcha_Random_Code))
    {
    $_SESSION['Captcha_Code'] = Captcha_Random_Code(6); 
    }
else
    {
    die('Captcha Code konnte nicht generiert werden!');
    }

// Zufallshintergrund
mt_srand((double) microtime()*1000000);
$Image1 = mt_rand (1, 2);
    switch ($Image1)
    {
    case 1:
    $Graphic = imagecreatefrompng ($bg1);
    $Graphiceffect = imagecreatefrompng ($bg1);
    break 1;

    case 2:
    $Graphic = imagecreatefrompng ($bg2);
    $Graphiceffect = imagecreatefrompng ($bg2);
    break 1;
    }

// Textfarbe
$textcolor = array(
    imagecolorallocate ($Graphic, 128, 128, 128),                                     // ($Graphic, Zahlen) Zahlen --> RGB Code
    imagecolorallocate ($Graphic, 0, 0, 0),
    imagecolorallocate ($Graphic, 50, 150, 0),
    imagecolorallocate ($Graphic, 128, 0, 128),
    imagecolorallocate ($Graphic, 128, 128, 255),
    imagecolorallocate ($Graphic, 255, 100, 0),
    imagecolorallocate ($Graphic, 200, 128, 0),
    imagecolorallocate ($Graphic, 250, 100, 150),
    imagecolorallocate ($Graphic, 120, 150, 200),
    imagecolorallocate ($Graphic, 120, 140, 180)
);

// Text auf den Hintergrund schreiben (*Beschreibung siehe weiter unten)
imagettftext ($Graphic, $FontSize, mt_rand(-13, 13), 10,  $TextHeight+mt_rand (-7, 8), $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[0]);
imagettftext ($Graphic, $FontSize, mt_rand(-13, 13), 40,  $TextHeight+mt_rand (-7, 8), $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[1]);
imagettftext ($Graphic, $FontSize, mt_rand(-13, 13), 70,  $TextHeight+mt_rand (-7, 8), $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[2]);
imagettftext ($Graphic, $FontSize, mt_rand(-13, 13), 100, $TextHeight+mt_rand (-7, 8), $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[3]);
imagettftext ($Graphic, $FontSize, mt_rand(-13, 13), 130, $TextHeight+mt_rand (-7, 8), $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[4]);
imagettftext ($Graphic, $FontSize, mt_rand(-13, 13), 160, $TextHeight+mt_rand (-7, 8), $textcolor[array_rand($textcolor)], $Font, $Captcha_Random_Code[5]);

// Welleneffekt
if ($WaveEffect == "2")
    {
    $compression = mt_rand (0, 100) / 400+ 0.10;
    $Graphiccold = $Graphic;
    $Graphic = $Graphiceffect;
    for ($i = 1; $i <= 65; $i ++)
        {
        imagecopy ($Graphic, $Graphiccold, round ((sin($i*$compression)*2))+3, $i, 1, $i, 230, 1);
        }
    }

// Bild an Browser ausgeben
imagepng($Graphic);

// Bild zerstoeren und Speicher freigeben
imagedestroy($Graphic)

//----- *Beschreibung -----//
// $Graphic = Grafik (Hintergrundbild)
// $FontSize = (Schriftgrösse)
// mt_rand (Zahl, Zahl) = Neigung Schrift -> positive Werte neigen die Schrift nach links, negative Werte neigen die Schrift nach rechts
// Zahl = Startposition des Textes von links. Ausgangspunkt ist 0 (Null) was die linke Kante der Grafik darstellt.
// $TextHieght+mt_and (Zahl, Zahl) = Startposition des Textes von oben. Ausgangspunkt ist 0 (Null) was die obere Kante der Grafik darstellt.
// $textcolor[] = Textfarbe, die wir unter '$textcolor = array' festgelegt haben (wird zufaellig ausgewaehlt)
// $Font = Die zu benutzende Schriftart
// $Captcha_Random_code[] = Text, der auf die Grafik soll
?>
 

r3nt5ch3r

~ Allround pG ~

AW: PHP Captcha Probleme

Habs grad mit PHP4 und 5 getestet und konnte keine Unterschiede feststellen?!^^

dass die Buchstabe/Zahlen alle auf der linken Seite des Bildes sind (unter PHP 4 läuft alles ohne Probleme)
Bei mir waren die immer links?! Wo sind die denn bei dir normalerweise? Vllt kannst du noch deine Schriftart und Hintergrundbilder posten? Oder poste direkt die Links zu deinem Server => 1x PHP4 und 1x PHP5^^
 
Zuletzt bearbeitet:

Fuehrwehrma

Noch nicht viel geschrieben

AW: PHP Captcha Probleme

Ich habe das mit den PHP Versionen nochmals angeschaut.

PHP 4.3 --> läuft ohne Probleme
PHP 5.0 --> läuft mit Problemen
PHP 5.2 --> läuft ohne Probleme

Hier sind noch die links zu den verschiedenen PHP Versionen

PHP 4.3
PHP 5.0
PHP 5.2

Bei der PHP 5.0 Version sieht man, was ich meine (alle Zahlen/Buchstaben auf der linken Seite).

Habe auch noch festgestellt, dass Firefox 3 bei PHP 4.3 einen Fehler ausgibt (IE und Safari gehen). Stimmt wahrscheinlich etwas mit der Grösse (Konfiguartion) nicht.
 

r3nt5ch3r

~ Allround pG ~

AW: PHP Captcha Probleme

Joa sieht echt merkwürdig aus^^
Aber mindestens genau so merkwürdig sind die Fehlermeldungen der Captches (manchmal):

br /> <b>Warning</b>: session_start(): open(/tmp/sess_6712f3b38d7e2f74dd56bbe7fbd9d9e8, O_RDWR) failed: Permission denied (13) in <b>/home/www/web431/html/captcha/captcha.php</b> on line <b>6</b><br />

<b>Warning</b>: Unknown(): open(/tmp/sess_6712f3b38d7e2f74dd56bbe7fbd9d9e8, O_RDWR) failed: Permission denied (13) in <b>Unknown</b> on line <b>0</b><br /> <br /> <b>Warning</b>: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in <b>Unknown</b> on line <b>0</b><br />
 

philbring

Webdesigner

AW: PHP Captcha Probleme

Hallo Peter


PS: Noch eine kurze Frage zur PHP-Versionen. Mein Webhoster hat standarmässig PHP 4.3.x installiert. Wenn ich jetzt die Version 5, resp. 5.2 nutzen will, muss ich der PHP Datei die Versionsnummer anhängen (z.b name.php5). Jetzt habe ich aber bei meinem Script festgestellt, wenn ich es auf PHP 5 laufen lasse, dass die Buchstabe/Zahlen alle auf der linken Seite des Bildes sind (unter PHP 4 läuft alles ohne Probleme). Hängt das mit den verschiedenen PHP Versionen zusammen?


Hallo,

wie du die verschiedenen PHP Dateien benennen musst siehst du in der Konfiguration des Apache Webserves. Ist leider nicht genormt. Meistens werden die Dateien mit den Endungen .php4 .php5 versehen.


Viele Grüße


Peter
 
Zuletzt bearbeitet:

philbring

Webdesigner

AW: PHP Captcha Probleme

Joa sieht echt merkwürdig aus^^
Aber mindestens genau so merkwürdig sind die Fehlermeldungen der Captches (manchmal):


Das können unterschiedliche Apache Konfigurationen sein. Wenn der Apache mod_php benutz und er als eigenen User läuft (shared Hosting) können solche Sachen passieren.

Wenn es geht den Server so konfigurieren das der User des Apache identisch mit dem Besitzer der Dateien ist. Auch ist (besonders in shared hosting Umgebungen) das dein Session-Save-Path nicht im Systemweiten /tmp Verzeichnis liegt sondern in einem Verzeichnis Unterhalb deines Homeir, jedoch außerhalb des Apache-Document-Root.


Viele Grüße

Peter
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben