[PHP] captcha Geht nicht Frage Uhrsachen suche

mydoys.de

Well-known member
ID: 84968
L
20 April 2006
2.756
125
Moin Leute ich wollte eben für mein Gästebuch auf unsere Team Homepage ein captcha system einbauen aber irgentwie funzt es nicht...

Diese ist das Gästebuch:
https://www.deshadows.de/gaestebuch_paintball_in_dresden
(Wie mann sehen kann wird das Bild nicht Angezeigt)

Der HTML COde dafür:
Code:
<tr>
<td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>

die php datei:

Code:
<?php
   session_start();
   unset($_SESSION['captcha_spam']);
   $text = rand(1000,10000); //Zufallszahl

   function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
   }

   $_SESSION['captcha_spam'] = encrypt($text, "8F384lS96"); //Key
   $_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);

        
   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
   $ttf = $_SERVER['Document_Root']."/arial.ttf"; //Schriftart
   $ttfsize = 25; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,50);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img);
?>

Mein Bild:
https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.PNG


Warum wird da nichts angezeigt?
 
Hmm also auf meinem Server funktioniert es.. Wenn man direkt captcha.php aufruft, kommt der Hinweis
Die Grafik "https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php" kann nicht angezeigt werden, weil sie Fehler enthält.
Das ist dann auch schon die etwas knappe Antwort: Es wird kein Bild angezeigt, weil das PHP Script einen Fehler erzeugt ;)

Ok, eine etwas unbefriedigende Antwort, aber da es bei mir funktioniert, weiß ich auch nicht so genau, wo der Fehler liegen könnte. Eventuell hast du eine andere PHP oder GDlib Version, die keine PNGs unterstützt?
 
Hmm also auf meinem Server funktioniert es.. Wenn man direkt captcha.php aufruft, kommt der Hinweis
Das ist dann auch schon die etwas knappe Antwort: Es wird kein Bild angezeigt, weil das PHP Script einen Fehler erzeugt ;)

Ok, eine etwas unbefriedigende Antwort, aber da es bei mir funktioniert, weiß ich auch nicht so genau, wo der Fehler liegen könnte. Eventuell hast du eine andere PHP oder GDlib Version, die keine PNGs unterstützt?

kann möglich sein deswegen der test mit JPEG

PHP:
<?php
   session_start();
   unset($_SESSION['captcha_spam']);
   $text = rand(1000,10000); //Zufallszahl

   function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
   }

   $_SESSION['captcha_spam'] = encrypt($text, "8F384lS96"); //Key
   $_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);

        
   //header('Content-type: image/png');
   header('Content-Type: image/jpeg');
   //$img = ImageCreateFromJPEG('captcha.PNG'); //Backgroundimage
   $img = ImageCreateFromJPEG('captcha.jpg'); //Backgroundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
   $ttf = $_SERVER['Document_Root']."/arial.ttf"; //Schriftart
   $ttfsize = 25; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,50);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   //imagepng($img);
   imagejpeg($img);
   imagedestroy($img);
?>

jetzt zeigt er mir : https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php
 
In der JPG Version klappt bei mir auch mal. Ich hatte aber auch mal nur die Adresszeile bekommen und bissel rumprobiert. Zum Schluss hat es geklappt, als ich ein von mir eingefügtes errorreporting() gelöscht habe. Habe auch mal versucht erzwungene Fehlermeldungen zu erzeugen, aber da kam nur mal raus, dass ich das jpg-Bild zum Einlesen noch nicht erstellt hatte..

Mit anderen Worten: Ich weiß auch nicht weiter, bei mir klappt es.. Nur noch zwei Ideen:
:arrow: Mach mal einen Dateinamen in imagejpeg() bzw imagepng() und schau, ob wenigstens dann ein Bild entsteht.
:arrow: Zeig mal phpinfo()
 
In der JPG Version klappt bei mir auch mal. Ich hatte aber auch mal nur die Adresszeile bekommen und bissel rumprobiert. Zum Schluss hat es geklappt, als ich ein von mir eingefügtes errorreporting() gelöscht habe. Habe auch mal versucht erzwungene Fehlermeldungen zu erzeugen, aber da kam nur mal raus, dass ich das jpg-Bild zum Einlesen noch nicht erstellt hatte..

Mit anderen Worten: Ich weiß auch nicht weiter, bei mir klappt es.. Nur noch zwei Ideen:
:arrow: Mach mal einen Dateinamen in imagejpeg() bzw imagepng() und schau, ob wenigstens dann ein Bild entsteht.
:arrow: Zeig mal phpinfo()

Bild test :

<?PHP
$image = imagecreatefromjpeg("captcha.jpg");
imagegif($image);
?>

https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/bild-test.php
bild-test.php


die Info :
https://html.mydoys.de/phpinfos.php
 
Bei der captcha.php kommt u.a.
Code:
<br />
<b>Warning</b>:  imagettftext() [<a href='function.imagettftext'>function.imagettftext</a>]: Could not find/open font in <b>/var/www/web50/html/deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php</b> on line <b>31</b><br />
Sollte dir weiterhelfen, oder?
 
Bei der captcha.php kommt u.a.
Code:
<br />
<b>Warning</b>:  imagettftext() [<a href='function.imagettftext'>function.imagettftext</a>]: Could not find/open font in <b>/var/www/web50/html/deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php</b> on line <b>31</b><br />
Sollte dir weiterhelfen, oder?


hier?
https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php

da kommt bei mir:
PHP:
https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php
 
Lass Dir mal den Quelltext der Seite anzeigen, dann entdeckst Du auch die Fehlermeldung.
 
Das stand doch schon so in der Fehlermeldung... :think:

Pack die .ttf mal in das gleiche Verzeichnis wie das Skript und lass bei der Angabe des Font das Verzeichnis komplett weg.

die ttf ist ja in dem order captcha wo auch die captcha.php ist


Ok fehler gefunden!

Richtig muss so sein:
PHP:
   $ttf = $_SERVER['Document_Root']."/gaestebuch_paintball_in_dresden/captcha/arial.ttf"; //Schriftart


DOCH NICHT!!

Funzt irgentwie immer noch nicht
 
So hier nochmal für euch mein Code:

PHP:
<?php
   session_start();
   unset($_SESSION['captcha_spam']);
   $text = rand(1000,10000); //Zufallszahl

   function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
   }

   $_SESSION['captcha_spam'] = encrypt($text, "8F384lS96"); //Key
   $_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);

        
   //header('Content-type: image/png');
   header('Content-Type: image/jpeg');
   //$img = ImageCreateFromJPEG('captcha.PNG'); //Backgroundimage
   $img = ImageCreateFromJPEG('captcha.jpg'); //Backgroundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
   $ttf = $_SERVER['Document_Root']."/gaestebuch_paintball_in_dresden/captcha/arial.ttf"; //Schriftart
   $ttfsize = 25; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,50);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   //imagepng($img);
   imagejpeg($img);
   imagedestroy($img);
?>

geht immer noch nicht ...
 
Ich habe übrigens keine arial.tff irgendwo rumliegen (jedenfalls nicht bei Document_Root) und es geht trotzdem.
 
Ja, mit deinen Scripten. Nur die HTML Datei habe ich erweitert, aber die php-Dateien entsprechen 1:1 denen aus #1 und #3, ich habe nur das Standardbild anders benannt und alle Dateien liegen im selben Ordner (klappt aber auch bei nem Unterordner wie bei dir).

temp994e71.png
 
Ja, mit deinen Scripten. Nur die HTML Datei habe ich erweitert, aber die php-Dateien entsprechen 1:1 denen aus #1 und #3, ich habe nur das Standardbild anders benannt und alle Dateien liegen im selben Ordner (klappt aber auch bei nem Unterordner wie bei dir).

Verstehe ich nicht.
Also ich bekommen :
Warning: imagettftext() [function.imagettftext]: Could not find/open font in /var/www/web50/html/deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php on line 31
 
Um ehrlich zu sein verstehe ich es auch nicht.

Ich hab jetzt nochmal etwas rumgespielt. Wenn ich z.B. arrrial.ttf schreibe, geht es auch nicht mehr. In meinem Dokument_Root liegt diese Datei aber definitiv nicht - sondern ein paar Unterordner tiefer an einer ganz anderen Stelle. Kann aber sein, dass Apache das irgendwie vorlädt (xampp), habe jetzt aber keine Lust mehr dem näher auf den Grund zu gehen, da der Tag eigentlich schon zu weit angebrochen ist :yawn:
 
Um ehrlich zu sein verstehe ich es auch nicht.

Ich hab jetzt nochmal etwas rumgespielt. Wenn ich z.B. arrrial.ttf schreibe, geht es auch nicht mehr. In meinem Dokument_Root liegt diese Datei aber definitiv nicht - sondern ein paar Unterordner tiefer an einer ganz anderen Stelle. Kann aber sein, dass Apache das irgendwie vorlädt (xampp), habe jetzt aber keine Lust mehr dem näher auf den Grund zu gehen, da der Tag eigentlich schon zu weit angebrochen ist :yawn:

jo ich habe schon nachgesehen und es einfach weggelassen..

Aber:
captcha.php

https://www.deshadows.de/gaestebuch_paintball_in_dresden/captcha/captcha.php