Autor | Zpráva | ||
---|---|---|---|
pexxxik Profil |
#1 · Zasláno: 18. 9. 2011, 19:45:40
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 |
#2 · Zasláno: 18. 9. 2011, 20:09:21 · Upravil/a: Tori
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 |
#3 · Zasláno: 18. 9. 2011, 20:21:49
Řetězec "18" ve funkci imagecreate se převede na nulu, ne? 18.
|
||
pexxxik Profil |
#4 · Zasláno: 18. 9. 2011, 20:35:48 · Upravil/a: pexxxik
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 |
#5 · Zasláno: 18. 9. 2011, 21:17:21
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 |
#6 · Zasláno: 18. 9. 2011, 21:22:07
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 |
#7 · Zasláno: 18. 9. 2011, 21:30:30
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 |
#8 · Zasláno: 18. 9. 2011, 21:41:19
Možná by to také fungovalo, kdyby byla cesta k fontu do aktuálního adresáře
./trebuc.ttf .
|
||
Časová prodleva: 13 let
|
0