Autor Zpráva
Pavel Straka
Profil
Dobrý večer, rád bych požádal o radu. Ukládám uživatelem zadaný e-mail jako obrázek, tu a tam (asi tak 1 případ z 5) se ale obrázek neuloží. Bez jakéhokoliv hlášení chyby.

Nemá prosím někdo nápad, co je špatně?

if ($_POST[mail] != "") {
         $sirka = strlen($_POST[mail]) * 10;
         $obr = imagecreate($sirka, 20);
        
         $bg = imagecolorallocate($obr, 255, 255, 255);
         $barva = imagecolorallocate($obr, 0, 0, 0);
        
         imagestring($obr, 3, 0, 0, $_POST[mail], $barva);
         imagepng($obr,"maily/$id.png",0);
      }

Děkuji.


Je možné, že je na hostingu nastaven nějaký limit uložených souborů za čas?
Chro
Profil
Já vidím jedinou chybu: $_POST[mail]. Správně $_POST['mail']. Hoď si zveřejněný kód opravený o mou připomínku do cyklu
for ($id = 1; $id < 51; $id++)
{
//tvůj kód
}
jestli se ti uloží soubory 1.png až 50.png.
TomasJ
Profil
Pavel Straka:
Já bych použil nahoře u té podmínky toto:
if (!empty($_POST[mail])) {

Chro:
Že tam nemá apostrofy, nebo uvozovky, není chyba, funguje to i bez nich.
Chro
Profil
TomasJ:
Já vím, že v tomto případě nepoužití uvozovek nebo apostrofů nemá vliv na funkčnost. Jen jejich nepoužití prostě považuju za chybu. Tak jako např. netestovat proměnnou na existenci a spoléhat na vypnutí zobrazování chybových hlášení.
Pavel Straka
Profil
Přidal jsem tam ten test: if (!empty($_POST["mail"]), cyklus s 50 opakováními a uložilo se 50 obrázků.
Vymazal jsem je a spustil skript znovu ještě 2x a pokaždé se uložily.

Ještě předtím jsem skript ale upravil do této podoby:
  $sirka = strlen($_POST[mail]) * 10;
         
         $obr = imagecreatetruecolor($sirka, 20);                                       
         $barva = imagecolorallocate($obr, 255,255,255);
         
         imagestring($obr, 3, 0, 0, "$_POST[mail]", $barva);
         imagejpeg($obr,"maily/$i.jpg");  
         imagedestroy($obr);  

Takto to funguje. Mohlo to být způsobeno funkcí imagecreate? V manuálu PHP jsem se dočetl, že se doporučuje použití funkce imagecreatetruecolor, ale nedozvěděl jsem se proč. Ve formátu (PNG/JPEG) snad problém není.
Pavel Straka
Profil
Beru zpět, spustil jsem nyní skript 3x po sobě a uložily se jen poslední 2 obrázky.
Chro
Profil
Imagecreate vytváří obrázek, do kterého můžeš nadefinovat jen 256 základních barev. Pokud není barva základní, převede se na nejblíže základní. Pokud pak použiješ na výstupu např. imagepng, vznikne ti obrázek ve formátu PNG8 (kódování do 8 bitů = 256 barev, menší datová velikost) místo PNG32 (true color, větší datová velikost). Imagecreatetruecolor je tím pádem asi jasné.

S tím skriptem nevím, jednou to jde, pak ne... Mně to na Swebu funguje bez problému. Co máš za hosting? Psal jsi na podporu?
TomasJ
Profil
Pavel Straka:
imagestring($obr, 3, 0, 0, "$_POST[mail]", $barva);
Odsud ty uvozovky můžeš odstranit.
Rozdíl mezi truecolor a normálním 256ti barvým vytvořením obrázku nehraje roli při ukládání (až na tu velikost jak píše Chro). Nějak mě nenapadá, proč to blbne.
Pavel Straka
Profil
Chro: Rozumím. Hosting je Forpsi, na podporu jsem ještě nepsal, ale asi mi nic jiného nezbyde.
TomasJ: Vím, že tam uvozovky nemusí být, ale už jsem byl zoufalý a zkoušel všechno možné.

Taky mě nic dalšího nenapadá.
Alphard
Profil
Pavel Straka:
tu a tam (asi tak 1 případ z 5) se ale obrázek neuloží
Fakt je to náhodné, není v tom žádné pravidlo?

Bez jakéhokoliv hlášení chyby.
Jiné chyby vidíte, není zakázaný výpis chyb?

Beru zpět, spustil jsem nyní skript 3x po sobě a uložily se jen poslední 2 obrázky.
Na jiném serveru to funguje správně? Kdyžtak to upravte pro statický test (tj. bez záhadných POST vstupů a dejte to sem).
Pavel Straka
Profil
Alphard: Ne ne, opravdu jsem žádné pravidlo nevypozoroval. Další věc, ktetou jsem zjistil, je, že někdy je to uložení jen zpožděné (třeba 3 minuty), ale někdy se prostě obrázek skutečně neuloží. Výpis chyb je zapnutý, když např. umažu středník, objeví se chybové hlášení. Na jiném serveru jsem ještě neměl možnost vyzkoušet, nepíšu teď ze svého počítače, kde mám uložené přístupové údaje, vyžkouším to během zítřka, každopádně tady je odkaz pro ten statický test: http://www.trznik.cz/obr.php
Mělo by to vypsat odkaz na obrázek, který se měl vytvořit.
Alphard
Profil
Pavel Straka:
každopádně tady je odkaz pro ten statický test
Nebudu tady klikat do víkendu a automatizací vám nebudu zatěžoat server, ale ani po několika desítkách pokusů jsem nenašel jediný nefunkční.
Pavel Straka
Profil
Alphard: Samozřejmě, rozumím. A věřím, že jste nenašel ani jeden nefunkční, jak říkám, nevysledoval jsem žádné pravidlo.

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: