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);
funguje,
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
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
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 *
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
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 *
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
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 *
mno, toho jsem se obával :(

děkuju za rady :)

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