« 1 2 3 »
Autor Zpráva
Coompiik
Profil
DarkMeni:
Nene, minotar ti hodí na blbej nick obrázek steeva, koukni: https://minotar.net/avatar/ComuterCZ/100.png


Anonyme máš pravdu je to k ničemu, jen sem chtěl pro hráče průkazi
Ukončuji toto téma
Dík moc DarkMeni za help.
DarkMeni
Profil
Tak zkus na druhej řádek (hned pod <?php...) dopsat:
error_reporting(E_ALL);
a asi tak na desátej řádek odzdola (před tim //Odeslání HTTP headeru...)
exit;
Mělo by to vypsat chyby který se vyskytly při zpracovávání
Anonymní
Profil *
Coompiik:
jen sem chtěl pro hráče průkazi
Já nevím jak přesně to má fungovat, minecraft jsem v životě nehrál a jsem na to hrdý, ale řekl bych že jako u téměř každé jiné hry se dost často mění údaje(takže levely, hodnosti atd..), nehledě na tom, že by si neměl určovat hráč co bude mít na průkazce ale server(to platí hlavně v případě, že si může ke svému statusu napsat, že je admin každý). Takže ano bude zapotřebí nějaké databáze a rozhodně netahat všechny parametry z GET to je cesta do pekel, když už mermomocí chci aby si každý hráč nastavil svojí vizitku podle svého, tak už bych to raději udělal POSTem. Ale to je takový detail..

Takže si stojím za svým, to co ti DarkMeni poslal je jen zbytečně složitý skript, který nakonec bude mít nulové využití
Coompiik
Profil
Ok, dopsal sem to tam, tentokrát tam neni prázdná stránka ale reklama od endory a kam se vypsali ty chyby?
DarkMeni
Profil
Měly být před tou reklamou, takže buď to žádnou chybu nevygenerovalo nebo povolil si error_reporting(E_ALL)?
Výsledek měl vypadat nějak takto: http://lovci-lamek.4fan.cz/Obrazek/profilovy_obrazek.php?nick=Coompiik&jmeno=Milan&vek=12&funkce=Admin&popis=Popis

Coompiik:
Anonyme máš pravdu je to k ničemu, jen sem chtěl pro hráče průkazi
Ukončuji toto téma
Ale když už pochybuješ o tom, k čemu ti to je, tak asi nemá moc smysl řešit proč to nefunguje
Coompiik
Profil
Jop, tu píšu změněný věci:
<?php #profilovy_obrazek.php
error_reporting(E_ALL);
//Text na vypsání
$headers = array(
    'Nick',
    'Jméno',
    'Věk',
    'Funkce',
    'Popis'

a

        $text_y + $i * ($size + $vertical_tab), //Y souřadnice
        $color,                                 //Brava
        $bold_font,                             //Písmo
        $text                                   //Text    
    );
}
 
//Odeslání HTTP headeru (řekne prohlížeči že to nebude html stránka, ale PNG obrázek)
exit;
header('Content-Type: image/png');
 
//Vykreslení obrázku v PNG formátu
imagePNG($image_resource);
 
//Uvolnění paměti s obrázkem
imageDestroy($image_resource);
imageDestroy($avatar_resource);
imageDestroy($background_resource);
?>
Amunak
Profil
DarkMeni:
Jak to mysliš s tim ošetřováním chyb? Když nějaká z těch obrázkových funkcí vyhodí chybu, tak asi neudělala to, co se po ní chtělo, a pak ani potlačení tý chyby přes @ nepomůže a generování selže tak jako tak.
Snad každá z těch obrázkových funkcí vrací nějakou hodnotu. Když je to false, obvykle to znamená, že funkce selhala. Je dobré to nějak odchytávat, a v případě že k takové chybě dojde buď úplně zrušit generování obrázku a vypsat chybu s mime typem text, nebo vypsat text chyby do prázdného obrázku a ten poslat na výstup. Potlačování chyb je hloupost, jde o to vědět že, a kde, se stala chyba.

Ale u tý imageCreateFromPNG máš pravu, když někdo zadá blbě nick a minotar žádnej obrázek nevrátí, tak to pak pude třeba ještě přesměrovat na obrázek s textem že avatar nebyl nalezenej nebo tak něco
Minotar vždycky vrátí výchozí obrázek - hlavu Stevea. Ale ten požadavek by mohl třeba timeoutnout nebo selhat na něčem podobném.

Anonymní:
Jediné rozumné využití tohoto skriptu je nějaký "generátor" obrázků - prostě člověk si zadá údaje a vytvoří se mu obrázek a pak si ho následně stáhne do počítače a vloží třeba na fórum jako nějaký podpis(pokud toto chceš, tak to máš hotové).
A na tom je něco špatného?

Pokud to chceš využít jako nějaký online status(o což se už tady pár lidí snažilo), tak je to nepoužitelné, už jenom z důvodu, že je to pomalé a druhý důvod, že stejnak nějaký status budeš vytahovat z databáze => přepsat minimálně 1/6 zdrojáku co ti DarkMeni v dobré vůli poslal
Dopsat tam nějaké kešování by bylo otázkou několika málo řádků kódu.
1Pupik1989
Profil
Vygeneruji obrázek
Uložím obrázek na server

Zjistím zda-li obrázek existuje.
Pokud neexistuje, vygeneruji ho.
Pokud existuje a nenastala výjimka, tak ho načtu.
Pokud výjimka nastala, tak ho přegeneruji a uložím.

Na načítání to potom skoro nemá vliv, pokud soubor existuje a není potřeba přegenerovat.
Amunak
Profil
1Pupik1989:
Nemáš to prohozené?

- přijjmu data od uživatele, vygeneruji z nich unikátní identifikátor
- zjistím, jestli existuje obrázek s tím identifikátorem
- - pokud ne, obrázek vygeneruji, uložím a zobrazím
- - pokud ano, obrázek načtu a zobrazím
DarkMeni
Profil
Coompiik:
Máš v tý samý složce obrázek s pozadim pojmenovaný "background.png"? Jestli ne, tak to možná nefunguje kvůli tomu, ale to by mělo vyvolat tak 20 chyb (jestli to vypisování chyb neni nějak zakázaný v php.ini konfiguraci)

Amunak:
To by šlo udělat třeba přes:
if(!$image_resource || !$background_resource || !$avatar_resource){
    //vykresli obrázek s informací o chybě
    exit;
}
nebo přes funkci set_error_handler()

Ale když už se to nějak odladí, tak už by se pak žádna chyba objevit neměla
Amunak
Profil
DarkMeni:
ono ty obrázkové funkce jsou právě docela nevyzpytatelné. Měl jsem takhle skript na generování poměrně komplikovaného grafu (imfografiky), a na ruznych hostinzich se to chovalo různě, a občas mi i nějaká "spolehlivá" funkce selhala z nějakých pochybných důvodů. Je zkrátka lepší to ošetřovat, když nám to PHP umožňuje.
Coompiik
Profil
DarkMeni:
Šlo by se s tebou nějak domluvit že bych ti dal přístup do FTP a ty by ses na to koukl?
Teda kdyby mi to prostě už vůbec nešlo.
Pozadí mam nastavený správně, background.png tam nemam ale nastavil sem to na img/Pozadi.png
DarkMeni
Profil
Tak můžu se na to kouknout, jestli chceš, můžeš mi to poslat na email darkmeni na seznamu.
Coompiik
Profil
ok
DarkMeni
Profil
Už by ti to mělo fungovat. Máš vypnutý vypisování chyb v php.ini (display_errors = 0) - pak se špatně zjišťuje proč něco nefunguje. Nešlo to kvůli tomu, že výpočet odsazení odzhora (do proměnné $y) vracel desetinné číslo - to šlo vyřešit tím, že se to nechá třeba zaokrouhlit dolů / a minotar nevrací obrázek pokaždný - když někdo zadá nick s pomlčkou, tak to vrátí stránku 404 a pak obrázkový funkce selžou (to šlo vyřešit tím, že když getImageSize vrází false nebo velikost avataru nebude 100x100, tak se přepíše adresa na výchozí avatar, který máš někde ve složce)

Jestli ti to už funguje, tak si změň heslo k FTP
Coompiik
Profil
DK MOOOC! FUNGUJE TO! NEVIM JAK SE TI ODVDĚČIT!!! Dolu dam napis že za pomoc děkuju DarkMenimu :-))
DarkMeni
Profil
V pohodě :D nemusíš
Coompiik
Profil
Musim, ale nejde to, neukazuje se to tam xDD
Hele funguje <img src="http://coompiik.jecool.net/profilovy_obrazek?<? echo: $nick ?>..."> ???
DarkMeni
Profil
To je dobrý, nepiš mě tam :D
Jestli to chceš generovat hromadně pro hodně lidí, tak možná rači udělej cache.
Jinak tamto můžeš zkusit a uvidíš, ale <img src="profilovy_obrazek?nick=<? echo: $nick ?>..."> ti normálně vykreslí ten obrázek, kde bude jen nick zakončený třema tečkama a nic jinýho tam vyplněnýho nebude (jestli chceš nechat doplnit zbytek podle asociace s nickem, tak to musíš udělat buď přes databázi nebo přes soubor kde budou další informace)
Coompiik
Profil
Ok... vůbec sem to nepochopil ale skusim mojí verzi. Třema tečkama sem myslel ten zbitek věcí :-))


Hmm, byl sem neuspěšnej...
Moderátor Chamurappi: Nepiš prosím tři m za sebou, pokud nemáš důvod volat moderátora.

<head>
<meta charset="windows-1250">
<title>Průkaz</title>
<link rel="shortcut icon" href="http://www.coompiik.jecool.net/wp-content/themes/brightpage/favicon.ico" />
</head>
<body>
<img src="profilovy_obrazek?nick=<? echo: $nick ?>&<? echo: $jmeno ?>&<? echo: $vek ?>&<? echo: $funkce ?>&<? echo: $popis ?>">
<p>BBcode(Na fórum, TS...):  <code>[img]http://coompiik.jecool.net/profilovy_obrazek.php?<? echo: $nick ?>&<? echo: $jmeno ?>&<? echo: $vek ?>&<? echo: $funkce ?>&<? echo: $popis ?>[/img]</cody>
<p>HTML5:<code>&lt;img src="http://coompiik.jecool.net/profilovy_obrazek.php?<? echo: $nick ?>&<? echo: $jmeno ?>&<? echo: $vek ?>&<? echo: $funkce ?>&<? echo: $popis ?>"&gt;
</body>
Se neosvědčilo...
coompiik.jecool.net/prukaz-generated.php
DarkMeni
Profil
Tipuju to na Syntax Error nebo Fatal Error kterej se ti nevypsal právě kvůli vypnutýmu vypisování chyb. Rači si to zapni - někam do skriptu napiš: ini_set('display_errors', '1'); a nech ho zpracovat, mělo by to zapnout vypisování chyb (jestli endora neblokuje php.ini nastavení) a pak to z toho skriptu můžeš zase smazat.
Ten Syntax Error bych tipoval kvůli těm dvojtečkám (nemaj tam co dělat): <img src="profilovy_obrazek?nick=<? echo: $nick ?>&<? echo: $jmeno ?>&<? echo: $vek ?>&<? echo: $funkce ?>&<? echo: $popis ?>">
Zkus to třeba nějak takto:
<img src='<?php echo "profilovy_obrazek.php?nick=$nick&jmeno=$jmeno&vek=$vek&funkce=$funkce&popis=$popis"; ?>'>
Coompiik
Profil
Hmm, ukazalo se to takhle:
BBcode(Na fórum, TS...): 

HTML5:<img src="http://coompiik.jecool.net/profilovy_obrazek.php?nick=&jmeno=&vek=&funkce=&popis=">
A obrázek hádej, jako kdybys tam zadal jen profilovy_obrazek.php a nic zatim


BBcode neni videt protoze to bere jako kod xD
DarkMeni
Profil
Povolil sis zobrazování chyb? V těch proměnných ($nick, $jmeno, $vek, $funkce, $popis) teda asi nemáš nic uloženýho, z čeho je získáváš? Z databáze, session nebo cookies nebo jinak?
Coompiik
Profil
?
Promiň vůbec se to nevyznám
1Pupik1989
Profil
Amunak:
Nemáš to prohozené?

Spíš jsem to nějak nedopsal. Mělo to být zhruba:

Fáze při registraci či aktualizování profilu:
1. Vygeneruji obrázek
2. Uložím obrázek na server

Fáze načítání:
1. Zjistím zda-li obrázek existuje.
2. Pokud neexistuje, vygeneruji ho.
3. Pokud existuje a nenastala výjimka, tak ho načtu.
4. Pokud výjimka nastala, tak ho přegeneruji a uložím.


Může se stát, že server obrázek nevygeneruje, proto jsou u načítání 1. a 2. bod. Jinak by samozřejmě nebyly ani potřeba.
Coompiik
Profil
1Pupik1989:
To už máme vyřešený teď zjišťujeme problém v img src
DarkMeni
Profil
Coompiik:
1Pupik1989:
To už máme vyřešený teď zjišťujeme problém v img src

No vlastně ne :D generovat to pokaždý znovu neni moc efektivní (zabere to přibližně 0,3 vteřiny), ale to bys musel mít vyřešený něco jako registraci a práci s databází a pak to nějak cachovat

Ty proměnný tam nejspíš nemáš předem definovaný, čeho chceš dosáhnout tím kódem? Co se má vypsat?
1Pupik1989
Profil
Samozřejmě to potřebuje nějakou databázi, pokud to má být vizitka někde v profilu nebo avatar na fóru v podpisu. Pokud to bude na fóru, tak při načítání to bude ještě horší, protože by se to generovalo pro každý příspěvek x-krát. Pokud to má být jen v profilu, tak zátěž na server bude stále znatelná. Pokud se víc lidí najednou podívá na profil, tak zátěž serveru vylítne jak papiňák. :D

S databází se to hodně zjednoduší. Pak by byl odkaz na obrázek třeba ve tvaru '/image_loader.php?user_id=2'.
Coompiik
Profil
Obrázek se má zobrazit, podtim kód do fóra
Anonymní
Profil *
DarkMeni:
zabere to přibližně 0,3 vteřiny
Opravdu? Co jsem se koukal včera tak to rozhodně nebyly 0,3 vteřiny ,ale spíše tak 2-3 sekundy. To generování obrázků je fakt zbytečně pomalé a mělo by se to dělat minimálně a hlavně pravidelně v nějakých hodinách, kdy na serveru nebude zátěž(takže třeba každý den v 3.00). Nějaké aktualizovanější statistiky bych házel třeba do tabulky, kde generování bude trvat možná 0,0001s, což už je zanedbatelné.

Nebo ještě něco a možná efektivnější, sežeň si druhý server běžící buď na Windows + IIS, či na Linux + Tomcat a prostě obrázek generuj pomocí jiné technologie než PHP, protože když se to generuje v PHP podle tebe 0,3 vteřiny tak v .NETu či JSP se to bude dělat 0,001s což je o hodně lepší.
1Pupik1989:
S databází se to hodně zjednoduší
Zjednoduší ale zpomalí. Pokud bude databáze špatně navrhnuta až znatelně.

Coompiik:
Můžeš mi vysvětlit k čemu to má vlastně sloužit? A proč se tady kvůli tomu jede taková spamárna?
« 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:

0