Befehl "imagettftext" macht in PHP 5.3.x Probleme

maddoccc

Lieutenant
Dabei seit
März 2009
Beiträge
548
Hi Leute.

Nach Umstellung der PHP Version seitens meines Hosters funktioniert mein Captche nicht mehr. Dieser meint es würde an dem Befehl "imagettftext" liegen. Kann das jemand bestätigen und wie kann ich den Befehl umgehen / ersetzen??

Hoffe ihr habt nen Tipp für mich.

Gruß Maddoc
 

maddoccc

Lieutenant
Ersteller dieses Themas
Dabei seit
März 2009
Beiträge
548
Fehlermeldung gibt es keine. War die Aussage meines Hosters. Mein Captcha wird halt nicht mehr angezeigt :(
 

xii

Lt. Junior Grade
Dabei seit
Feb. 2008
Beiträge
265
Dann aktiviere die Fehlerausgabe von PHP. Sollte das seitens des Hosters gesperrt sein, sieht es für Dich schlecht aus. Zumal Dir so kaum jemand wird helfen können. Läuft somit wohl auf Trial and Error hinaus. Heißt, Du solltest dein Script manuell debuggen. Wie das geht verrät Dir Google und php.net.

Du brauchst ein Fingerspitzengefühl für die Stellen an denen die Probleme auftreten könnten, und musst dort gekonnt mit manuellen Tests ansetzen. Dabei helfen dir Funktionen wie var_dump.

Wenn Du zu ersten Erkenntnissen gekommen bist und weitere, spezifische Fragen hast, gerne her damit.
 
Zuletzt bearbeitet:

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
Im Zweifel habens die Pflaumen beim Update irgendwie geschafft, die GD-Library zu killen
 

maddoccc

Lieutenant
Ersteller dieses Themas
Dabei seit
März 2009
Beiträge
548
Also die Fehlerausgabe habe ich mir aktivieren lassen. Wenn diese aktiviert ist verschwindet auch das Hintergrundbild des Captchas. Wenn ich die php Datei direkt aufrufe womit das Captcha erzeugt wird steht da "Die Grafik "www.domain.de/php/secimg.php" kann nicht angezeigt werden da sie einen Fehler enthält. Wenn die Fehlerausgabe aus ist wird aber das Hintergrundbild angezeigt. Aber wie gesaht das eigentliche Captcha nicht.

Hier mal der PHP Code.

Code:
<?PHP
session_start();

function rand_String($laenge){
	mt_srand((double)microtime()*1000000);
	$zahl = mt_rand(1000, 9999);

	$passzahl = md5($zahl);
	$newpass = substr($passzahl,0,$laenge);

	return $newpass;
}


$secCode = rand_String(6);
$_SESSION['antispam'] = md5($secCode);

// get from: http://www.01-scripts.de/01scripts/01pics/sec.jpg
$im = imagecreatefromjpeg("sec.jpg");

// get from: http://www.01-scripts.de/01scripts/01pics/verdanab.ttf
$font = "verdanab.ttf";
$fontSize = 12;
$fontColor = imagecolorallocate($im, 70, 70, 70);

imagettftext($im, $fontSize, 10, 5, 25, $fontColor, $font, $secCode);
header("Content-Type: image/jpeg");
imagejpeg($im,"",100);
?>
Und hier die PHP Info.

http://www.cocktail-z.de/php/info.php

Sieht da jemand vielleicht an was es liegen kann??

Gruß Maddoc
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
was isn das für n "b" bei "verdanab.ttf"? b wie bold? oder b wie blöder tippfehler?
 

xii

Lt. Junior Grade
Dabei seit
Feb. 2008
Beiträge
265
Der Font ist vorhanden. (http://www.cocktail-z.de/php/verdanab.ttf)

Font auch von PHP lesbar? Ggf. Rechteprobleme..

Das "... kann nicht angezeigt werden da sie einen Fehler enthält" kommt von der Zeile "header("Content-Type: image/jpeg");" - Einfach mal beim testen auskommentieren. Bzw dir einfach den Quelltest dieser Seite anzeigen lassen. Oder das Bild herunterladen und darein schauen..
Ergänzung ()

Ich habe mir das Bild selbst mal heruntergeladen und rein geschaut..

"Warning: imagettftext(): Could not find/open font in /srv/www/web324/html/cocktail/php/secimg.php on line 26"

Damit bestätigt sich meine Vermutung von gerade, und Du solltest Dich nur darum kümmern, dass alle Pfade stimmen und PHP auf den Font zugreifen kann.

Scheint so, als hätte sich das Arbeitsverzeichnis beim PHP-Update geändert.
 
Zuletzt bearbeitet:

maddoccc

Lieutenant
Ersteller dieses Themas
Dabei seit
März 2009
Beiträge
548
Habe eben mal die Rechte der img und tff Datei auf 777 gesetzt. Keine Besserung. Das mit den Pfaden, kann ich da was machen oder muss das mein Anbieter tun? Denn in der PHP Datei sind ja keine Pfade eingetragen. Was mich auch so ein bissel wundert ist das die jpg Datei, also das Hintergrundbild wo der Captcha Code darauf steht, angezeigt wird wenn die PHP Fehlerausgabe ausgeschalten ist...
Ergänzung ()

///EDIT

Habe grad nochmal meinen Anbieter mit den Infos von hier genervt. Problem gelöst.

Bei $im = imagecreatefromjpeg("sec.jpg"); musste ein ./ vor das jpg. Also $im = imagecreatefromjpeg("./sec.jpg");

Und bei der ttf Datei auch.

Jetzt geht es wieder!!! Freu. Danke dir JackFox!!

Was ich aber nicht kapiere warum das jetzt so ist. Bedeutet das nicht das diese Dateien eine ebene höher liegen??

Gruß Maddoc
 

maddoccc

Lieutenant
Ersteller dieses Themas
Dabei seit
März 2009
Beiträge
548
Ah. OK. Danke dir.

Hab da gerade noch ein Problem. Und zwar habe ich das Captcha für ein zweites Formular verwendet. Dazu habe ich das Captcha genau so wie in das erste Formular übernommen. Nur beim zweiten Formular wird immer ein Fehler angezeigt auch wenn ich das Captcha richtig eingebe. Ich denke mal der Fehler liegt in Zeile 10 des PHP Codes. Kann das jemand bestätigen??

Hier mal der Code. HTML Formular.

Code:
<form action="php/sms.php" method="post">
.
.
.
<tr>
                  <td valign="top" class="fliesstext">Sicherheitscode</td>
                  <td><img src="php/secimg.php" width="90" height="30"></td>
                </tr>
		
		             <tr>
                  <td valign="top" class="fliesstext">Sicherheitscode eingeben*</td>
                  <td><label>
                    <input type="text" name="spamschutz" maxlength="6" size="10" ></textarea>
                  </label></td>
                </tr>
PHP Code
Code:
<?php
$name=$_POST['name'];
$nummer=$_POST['nummer'];

$spam_eing = md5($_POST['spamschutz']);
$spam_vorg = $_SESSION['antispam'];



if  ((!($name != "" && $nummer != "" && $spam_eing == $spam_vorg)) || (preg_match('/\D/', $_REQUEST['nummer'])))
  {
     header("Location: eingabe_fail.html");
     exit();
  }
  else
  
  {
	   $ausgabe=$name. ", ". $nummer."\n";  // <-- Dollar
     $datei=fopen("sms.txt","a");
     $output=fwrite($datei,$ausgabe);
     fclose($datei);
     header("Location: eingabe_done.html");
     exit();
  }

?>
Ergänzung ()

//EDIT

Habs. Vergessen die Session zu öffnen

session_start();

Gruß Maddoc
 
Top