Autor | Zpráva | ||
---|---|---|---|
mou Profil * |
Rád bych nalezl problém s GD knihovnou, který nemohu vyřešit. Otevírám téma už mnohokrát všude možně propírané, ale tento problém je trochu jiný.
info o gd na serveru je následující : GD Support enabled GD Version bundled (2.0.34 compatible) FreeType Support enabled FreeType Linkage with freetype FreeType Version 2.4.1 T1Lib Support enabled GIF Read Support enabled GIF Create Support enabled JPG Support enabled PNG Support enabled WBMP Support enabled XBM Support enabled Některé funkce ale nefungují. Např. createimagefrompng, imagettftext pokud tyhle dvě funce použiji s chybnou syntaxí, error hlášky jsou vypsány vpořádku. Pokud je ale napíšu správně, žádný error není vypsán (ani do php error logu) a jakýkoliv prohlížeč vždycky vrátí "webová stránka není dostupná". primitivní skript: $obrazek = imagecreatefromjpeg("test.jpg"); header('Content-type: image/jpeg'); imagejpeg($obrazek); imagedestroy($obrazek); ale tenhle už ne: $obrazek = imagecreatefrompng("test2.png"); header('Content-type: image/png'); imagepng($obrazek); imagedestroy($obrazek); |
||
mou Profil * |
když zkouším třeba
ini_set('error_reporting',E_ALL); ini_set("display_errors","on"); ini_set("display_errors",1); ini_set('display_startup_errors',1); $obrazek = imagecreatefromjpeg("top.jpg"); $textcolor = imagecolorallocate($obrazek,rand(0,130),rand(0,130),rand(0,130)); $obrazek = imagettftext($obrazek,10,10,35,35, $textcolor,"./arial.ttf","text"); header('Content-type: image/jpeg'); imagejpeg($obrazek); imagedestroy($obrazek); problém je stejný. Při vynechání řádku $obrazek = imagettftext($obrazek,10,10,35,35, $textcolor,"./arial.ttf","text"); se obrázek zobrazí, s ním se ale nevypíše žádná error hláška a do prohlížeče není vrácena žádná informace. Cesta k fontu je stoprocentně správná. Pokud zadám špatnou, vypíše se error hláška.
díky za radu |
||
PostCC Profil |
#3 · Zasláno: 21. 10. 2010, 08:29:09
mou:
Funkce ImageTTFText() vrací nikoli odkaz na zdroj obrázku, nýbrž pole s rozměry vepsaného textu. Nelze proto následně výsledek funkce použít jako resource pro ImageJpeg(). Zkuste např.: $Dimensions = ImageTTFText($obrazek, 10, 10, 35, 35, $textcolor, "./arial.ttf", "text"); Header('Content-type: image/jpeg'); ImageJpeg($obrazek); S polem $Dimensions samozřejmě můžete nadále pracovat, pokud je to potřeba. |
||
mou Profil * |
Děkuji, to byla chyba, problém je však pořád stejný :(
ini_set('error_reporting',E_ALL); ini_set("display_errors","on"); ini_set("display_errors",1); ini_set('display_startup_errors',1); $obrazek = imagecreatefromjpeg("top.jpg"); $textcolor = imagecolorallocate($obrazek,rand(0,130),rand(0,130),rand(0,130)); $dimensions = imagettftext($obrazek,10,10,35,35, $textcolor,"./arial.ttf","text"); header('Content-type: image/jpeg'); imagejpeg($obrazek); imagedestroy($obrazek); spíš jestli to nemůže být chyba gd knihovny, stejný skript po zkoušce na jiném serveru funguje. Leda přeinstalovat GD, nebo dát jinou verzi. I když vyzkouším ukázkový skript z php.net header("Content-type: image/png"); $string = "text"; $im = imagecreatefrompng("images/test2.png"); $orange = imagecolorallocate($im, 220, 210, 60); $px = (imagesx($im) - 7.5 * strlen($string)) / 2; imagestring($im, 3, $px, 9, $string, $orange); imagepng($im); imagedestroy($im); stále je stejný problém |
||
PostCC Profil |
#5 · Zasláno: 21. 10. 2010, 08:55:22
mou:
V úvodu scriptu nastavujete výpis chybových hlášení na maximální úroveň současně se zapnutím výpisu "start up" chyb a jejich výstup směrujete do obsahu generovaného kontextu, tedy do stránky. Jakákoli neinicializovaná proměnná pak způsobí, že PHP ještě před samotný stream s obsahem obrázku vloží warning o této situaci. Buď zakomentujte řádek: imagejpeg($obrazek); pak nejspíš uvidíte ve výsledné stránce patřičné chybové hlášení, potažmo warning, nebo vypněte výstup chyb v úvodu scriptu, pak by se obrázek měl generovat bez nežádoucího kontextu. |
||
mou Profil * |
#6 · Zasláno: 21. 10. 2010, 09:14:44
Bohužel.
I když zakomentuji ini_set('error_reporting',E_ALL); ini_set("display_errors","on"); ini_set("display_errors",1); ini_set('display_startup_errors',1); $obrazek = imagecreatefromjpeg("top.jpg"); $textcolor = imagecolorallocate($obrazek,rand(0,130),rand(0,130),rand(0,130)); $dimensions = imagettftext($obrazek,10,10,35,35, $textcolor,"./arial.ttf","text"); //header('Content-type: image/jpeg'); //imagejpeg($obrazek); //imagedestroy($obrazek); žádné chybové hlášky se neobjevují ani v php logu celého serveru. Ten samý problém je s funkcí imagecreatefrompng() když spustím: ini_set('error_reporting',E_ALL); ini_set("display_errors","on"); ini_set("display_errors",1); ini_set('display_startup_errors',1); $obrazek = imagecreatefrompng("test2.png"); echo "ok"; do prohlížeče se nevrátí žádný výstup. Vždy se zobrazí jen "webová stránka není dostupná". Přijde mi, jako kdyby tyhle dvě funkce shodily celý skript a nevrátily ani žádnou odpověď. |
||
PostCC Profil |
#7 · Zasláno: 21. 10. 2010, 09:28:34
mou:
Pokud máte nastaven webový server tak, aby nevracel obsah chybové stránky ale pouze obecnou hlášku o chybě na serveru, zkuste změnit toto nastavení. Pokud to není možné, zavolejte script např. z command line, na Windows např.: php.exe -f script.php V command line by se výstup scriptu měl v každém případě objevit. |
||
mou Profil * |
#8 · Zasláno: 21. 10. 2010, 10:24:24
Server běží na freebsd, nastavil jsem ve skriptu absolutní adresy a vyzkoušel přímo v příkazovém řádku, výsledek:
Segmentation fault 11 (core dumped) Tuto hlášku zobrazí vždy za každým správným výstupem spuštěného skriptu. Tento skript nemá žádný výstup ani error. |
||
PostCC Profil |
#9 · Zasláno: 21. 10. 2010, 11:18:44
mou:
Nuž, pak se obávám, že to není ani tak problém PHP jako spíše konkrétní instalace na serveru a bude nutné obrátit se na uživatelskou potvoru. Ehm, podporu. |
||
mou Profil * |
#10 · Zasláno: 21. 10. 2010, 11:31:27
mno, toho jsem se obával :(
děkuju za rady :) |
||
Časová prodleva: 14 let
|
0