Autor Zpráva
pexxxik
Profil
Dobrý večer,
nedávno jsem přetahával můj web na jiný server. Nastal tu jeden problém s vytvářením captcha obrázku. Captcha mám takovýto kód:
<?php

header ("Content-type:image/png");
session_start();
$_SESSION['captcha'] = "";
$code = "";

	for ($i = 0;  $i<4; $i++) 
		{
	 		$code .= chr(rand(65, 90));
		}

	$e = ImageTTFBBox(12, 0,"trebuc.ttf", $code);

$obrazek = ImageCreate($e[4]+2,"18");

$barva_pozadi = ImageColorAllocate($obrazek, 0, 0, 0);													// Nastaví barvu pozadí obrázku
$barva_textu = Imagecolorallocate($obrazek, 255, 255, 255);


$text = ImageTTFText($obrazek, 10, 0, 0, 18, $barva_textu, "trebuc.ttf", $code);
 
	

$_SESSION['captcha'] = $code;	

ImagePNG($obrazek);
ImageDestroy($obrazek);

?>


Dříve se mi vypsali čtyři náhodně vygenorované písmena, ovšem dnes se nevykreslí ani černé pozadí. Nevíte kde by mohl být problém? Na novém serveru je PHP 5.2.6 a na starém 5.3.1, může být problém zde?
Tori
Profil
Soubor fontu existuje a je ve stejné složce jako tento skript? (= za řádkem 13 by se $e nemělo rovnat false). Pokud vám nebude fungovat zobrazování chyb, můžete ještě otestovat každou návratovou hodnotu z funkcí image*. Pokud se rovná false, našel jste chybu. (Mně ten kód fungovat na PHP 5.3.5, jen jsem musela dát abs.cestu k nějakému souboru s fontem).
Chro
Profil
Řetězec "18" ve funkci imagecreate se převede na nulu, ne? 18.
pexxxik
Profil
Ano, soubor fontu je ve stejné složce jako skript. Tak chybu to vykazuje u proměnné $barva_pozadi a potom samozřejmně i u proměnné $obrazek, netušíte jak by to šlo opravit?
Doplňuji: řeťezec jsem přepsal na číslo, bohužel beze změny.
Tori
Profil
pexxxik:
Zkuste použít abs.cestu k fontu:
$e = ImageTTFBBox(12, 0, dirname(__FILE__)."/trebuc.ttf", $code);


Chro:
V PHP to je jedno, (string) "18" == (int) 18. Viz "type juggling" (neboli "kejkle s datovými typy") v manuálu.
pexxxik
Profil
Je to tam :), problém vyřešen :), děkuji moc. Jen taková doplňující otázka: nevíte proč je potřeba k fontu absolutní cesta?
Tori
Profil
pexxxik:
V manuálu se u té funkce píše „Depending on which version of the GD library that PHP is using, it may attempt to search for files that do not begin with a leading '/' by appending '.ttf' to the filename and searching along a library-defined font path.“ - pokud je na vašem současném serveru jiná verze GD než na předchozím, mohlo by to být tím. Osobně dávám všude jen absolutní cesty (resp. pevně definovanou abs.cestu k adresáři aplikace + relativní cestu odtamtud k souboru) - připadá mi to jistější.
Davex
Profil
Možná by to také fungovalo, kdyby byla cesta k fontu do aktuálního adresáře ./trebuc.ttf.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0