« 1 2 3
Autor Zpráva
DarkMeni
Profil
To by sis teda ty obrázky měl asi rači ukládat, jinak to generování při každým zobrazení hodně zatíží server. Tady by bylo nebezpečí v tom, že někdo může napsat spamovací program, který vytvoří hodně obrázků a zahltí ti tak paměť, takže by to chtělo použít nějakej antispam.

Coompiik:
Obrázek se má zobrazit, podtim kód do fóra
A co má být v tom obrázku vyplněný? To co někdo zadal do formuláře? Jestli jo, tak pak ale musíš formulář nasměrovat na ten soubor a poslat to rači přes metodu POST, takže:

<form action="prukaz_generated.php" method="POST">

A do souboru "prukaz_generated.php":

<?php
  if(isset($_POST['nick'])){
    $nick = htmlspecialchars($_POST['nick']);
    $jmeno = htmlspecialchars($_POST['jmeno']);
    $vek = intval($_POST['vek']);
    $funkce = htmlspecialchars($_POST['funkce']);
    $popis = htmlspecialchars($_POST['popis']);
?>
<img src="<?php echo "profilovy_obrazek.php?nick=$nick&jmeno=$jmeno&vek=$vek&funkce=$funkce&popis=$popis"; ?> alt="Průkaz">
<?php
  }else{
    echo "Nick nebyl zadán";
  }
?>
Coompiik
Profil
Hodil sem to tam, ale kdyš sem dal průkaz generated? atd tak to napsalo rovnou to else(Nick nebyl zadán)
:/
Amunak
Profil
I kdyby to trvalo jen desetinu vteřiny, pořád je to desetina vteřiny, při které procesor (jedno vlákno) běží na plný výkon. Při větší zátěži se to nasčítá. Navíc by to byla ideální brána pro nějaký DOS útok na web.

Na kešování není potřeba ani databáze, ani registrace, ani nic podobného. Prostě vezmete ta data, která se mají na obrázek zapsat, všechna je spojíte dohromady, proženete to nějakým md5() a máte unikátní identifikátor pro soubor s keší. Pro stejné vstupní parametry se použije kešovaný obrázek, pro jiné se vygeneruje nový.

Taky by to chtělo posílat cache hlavičky i prohlížeči, aby se obrázek nesnažil stále načítat znovu a raději si ho sám uložil do keše.

DarkMeni
Proč tam rveš to htmlspecialchars? To je pro výstup do HTML, ne do obrázku. Když už, tak prostě speciální znaky vyhoďte (nebo pro ně obrázek negenerujte vůbec).
DarkMeni
Profil
Amunak:
Proč tam rveš to htmlspecialchars?
A jo, prostě zvyk :D

Tak na cachování by šlo vytvořit obrázek pojmenovaný podle nicku
Na ošetření DOS útoku by to chtělo nějakej antispam a kontrolu, jestli přístup ke skriptu kterej ukládá obrázek je nějak autorizovanej, třeba přes token nebo něco takovýho

Coompiik:

Do prukaz.php u <form> dej:
<form action="prukaz_generated.php" method="POST">

A k prukaz_generated.php přistupuj přes ten vyplněnej formulář (odešleš formulář a mělo by tě to přesměrovat na "prukaz_generated.php" s vytvořeným obrázkem)
Kcko
Profil
Připojuji se ke "spamárně" už to začínáte přehánět. Vše podstatné bylo vyřčeno a popsáno na první straně ze současných tří.
Už byste si ty "detaily" mohli řešit privátně.
okolojsoucí
Profil *
Hlavně bych tohle dělal přes Nette, má na to dobré knihovny.
Amunak
Profil
DarkMeni:
Tak na cachování by šlo vytvořit obrázek pojmenovaný podle nicku
Ani ne, pokud by jeden člověk (nick) chtěl mít obrázek s např. několika různými popisy. Navíc by pak bylo nemožné bez dopsání nějakého mazání keše změnit cokoliv v obrázku.

Na ošetření DOS útoku by to chtělo nějakej antispam a kontrolu, jestli přístup ke skriptu kterej ukládá obrázek je nějak autorizovanej, třeba přes token nebo něco takovýho


Mělo by stačit libovolným způsobem omezit počet nových obrázků, které může jedna adresa vygenerovat. Jestli to chápu dobře, jde o nástroj "pro každého", a tak asi nebude žádoucí klást do cesty nějaké překážky jako autorizaci uživatelů.

okolojsoucí:
Hlavně bych tohle dělal přes Nette, má na to dobré knihovny.
Nejsem si jistý, jestli by tady Nette\Image nějak extrémně pomohlo, i když by to asi bylo vhodnější, pokud by Coompiik chtěl odchytávat chyby (výjimky v Nette).
Coompiik
Profil
//Opravdu moc se omlouvám že otevírám staré vyřešené téma ale vzhledem k tomu že mi to DarkMeni(Který doufám toto uvidí) dělal přez FTP, nemůžu se tu dočíst co potřebuju vědět
Koupil jsem si doménu .cz na wedosu, a rozhodl jsem se že starý web smažu(Ještě jsem to neudělal) a chtěl jsem průkaz zachránít, ten ale bohužel vyhodí chybu Parse error: syntax error, unexpected '[' in /data/web/virtuals/33427/virtual/www/domains/craftycraft.cz/prukaz/profilovy_obrazek-pvp.php on line 88 na starém webu to ale stále normálně funguje, změnil jsem adresy k souborům atd vše zprávně, uploadl jsem fonty, obrázky vše, ale přesto to nejde, a chtěl bych se teda zeptat, jestli jsi tam nerozházel někde na webu něco k tomu potřebnýho, abych to mohl přesunout na ten novej. Předem děkuji a aby to tu už nebolo sakra zaspamovaný můžeš odepsat na coompiik@gmail.com.
Dík moc.
Coompiik
Alphard
Profil
Parse error je izolovaný problém, netřeba řešit závislosti. Skoro to vypadá, že nový hosting má starší verzi PHP. Bude stačit, když ukážete problémový řádek.
Coompiik
Profil
Alphard:
Řàdek 88: $text_width = imageTTFBBox($size, $angle, $font, $text)[2];
Celý kod: http://pastebin.com/1ji7Pamq
Chro
Profil
Funkce vrací pole a tento zápis (přiřazení 3. hodnoty z pole do proměnné) je dostupný až od nějaké novější, vyšší verze PHP (nepamatuju od které, asi 5.4).
$text_width = imageTTFBBox($size, $angle, $font, $text)[2];
Pro ty starší např.
list(, , $text_width) = imageTTFBBox($size, $angle, $font, $text);
Alphard
Profil
Nějakou podobnou konstrukci jsem čekal. Starší verze neumí přímo přistupovat k prvku pole vraceného z funkce. Řešením je dočasné uložení celého pole a pak výběr klíče.

$t = imageTTFBBox($size, $angle, $font, $text)[2];
$text_width = $t[2];
Nebo jak píše Chro, v tomto případě je to elegantnější. Pokud je ta funkce volána jako parametr jiné funkce apod., dalšímu řádku se stejne nevyhnete.

Lepší by samozřejmě bylo stěhovat se na hosting s aktuálnějším PHP, nikoliv naopak.
Coompiik
Profil
Alphard:
Lepší by samozřejmě bylo stěhovat se na hosting s aktuálnějším PHP, nikoliv naopak.
Šel jsem z endory na wedos, jak nastavím(nebo jak to mám nazvat) novou verzi php?

Chro:
Pro ty starší např.
list(, , $text_width) = imageTTFBBox($size, $angle, $font, $text);
Takže mám celý řádek 88 nahradit tímto?


Mám Webhosting "NoLimit" ten zahrnuje PHP 5.3 a 5.4 (vysoké parametry s možností změn)


Chro:
list(, , $text_width) = imageTTFBBox($size, $angle, $font, $text);
Funguje děkuji.
Kubo2
Profil
Coompiik:
Koupil jsem si doménu .cz na wedosu
Nedaávno som si na na WEDOSe tiež kúpil hosting + doménu. Pri registrácii (neskôr aj v administrácii) sa dá určiť, ktorú verziu PHPka chceš používať na hostingu. Na výber máš PHP 5.3 a PHP 5.4. Som si skoro istý, že si si zvolil pri registrácii (alebo nechal zaškrtnutú) tú staršiu verziu. Aby si si zmenil verziu PHP na novšiu (a fungoval ti nový prístup k prvkom poľa a pod.), prihlás sa do administrácie:

1, v hlavnom menu klikni na webhosting;
2, v tabuľke s hostingami vyber (= klikni na názov domény) ten, s ktorým chceš manipulovať;
3, tentokrát v menu „Webhosting doména“ klikni na položku „Konfigurace PHP“;
4, a napravo v malom okienku s nadpisom „Nastavení verze PHP“ si v <select>e vyber najnovšiu verziu PHPka (t.j. 5.4);
5, klikni na „nastavit“ a je hotovo.
« 1 2 3

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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