IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
black_tino
Člen
Avatar
black_tino:4.6.2015 10:12

Zdravim, chcel by som sa opytat je nemozne v php definovat staticku premenu aby hociktory uzivatel nacital ten php skript aby sa znova nevytvorila, co som pozeral ine jazyky tam ked si vytvorim staticku premenu tak sa znova nevytvara aj ked ju vola iny program, ale u php sa robi prave opak, urobim si napriklas staticku premenu priklad
function Pocet()
{
static $a=null;
if (is_null($a))$a = 0;
else $a++;
return $a;
}

a tu prichadza kamen urazu pokial ten skrypt nacitavam dokola stale vracia 0 , tak sa pytam ma vobec php taketo moznosti aby bolo vlastne jedno kto nacita ten skrypt a aby to bolo vlastne v pameti na serveri ta premena?

 
Odpovědět
4.6.2015 10:12
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 10:42

Existuje. Používají se na to speciální proměnné s prefixem "_", v tomto případě buď $_COOKIES, nebo $_SESSION. Budeš si o tom něco muset přečíst, v základu je ale rozdíl v tom, že $_COOKIES se ukládá na straně klienta (nicméně efekt stejný) a $_SESSION na straně serveru. COOKIES se proto používá spíše na méně podstatné věci, SESSION zase na ty podstatnější (například se do něj ukládá ID přihlášeného uživatele - proto uživatel není po obnovení stránky odhlášen).

Jestli ti něco nebude jasné, klidně mi napiš SZ. :)

Nahoru Odpovědět
4.6.2015 10:42
Neaktivní uživatelský účet
Avatar
Odpovídá na black_tino
Matúš Petrofčík:4.6.2015 10:56

...v php definovat staticku premenu aby hociktory uzivatel nacital ten php skript aby sa znova nevytvorila...

to chceš aby viacero užívateľov používalo tú istú premennú?

Nahoru Odpovědět
4.6.2015 10:56
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Neaktivní uživatel:4.6.2015 12:54

black_tino

Jestli ano, potom cookies ani session nepomůže. Spíše bych si založil buňku v databázi. :)

Nahoru Odpovědět
4.6.2015 12:54
Neaktivní uživatelský účet
Avatar
black_tino
Člen
Avatar
black_tino:4.6.2015 17:13

Presne oto mi ide, a myslel som si ze existuje vhodne riesenie urcite ale nie session ani cookies, ani datbaza , keby som chcel napriklad pocitadlo uzivatelov tak napisem si to suboru a budem nacitat zo suboru premenu (aktualny stav) ale co ak by som chcel pre vsetkych uzivatelov triedu s premenamy a podobne? existuje aj nato riesenie?

 
Nahoru Odpovědět
4.6.2015 17:13
Avatar
black_tino
Člen
Avatar
Odpovídá na black_tino
black_tino:4.6.2015 17:16

este k tej databaze, ja by som to aj riesil databazou ale ked mate väcsiu applikaciu a potrebujete urobit proste viacero selektov v jednom skrypte a mate vyuzivany casto web tak tam sa potom rodi zase problem s ukoncenim pripojenia do databazi a nastava problem kde pri vypise cmd -> netstat -an je vela spojeni time_wait od databazy tym sa zbytocne zatazuje server, a doteras nechapem preco sa to spojenie spravne neukonci (vyuzival som pdo pre pripajanie) , sposob ako urobit perzistentne iba 1 pripojenie do databazi pre vsetkych uzivatelov skratka asi neexistuje lebo sa neda vyrobit staticka premena ktora by bola rovnaka pre vsetkych uzivatelov co spustia ten skrypt.

Editováno 4.6.2015 17:18
 
Nahoru Odpovědět
4.6.2015 17:16
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 17:30

Promiň, moc jsem tě teď nepochopil. Můžeš mi napsat konkrétní problém? Nikdy jsem podobnou "statickou proměnou" nepotřeboval a to už dělám s PHP nějaký ten pátek. Nejspíš budeš mít chybu v návrhu. Když mi napíšeš konkrétní příklad, určitě nalezneme vhodnější řešení.

Editováno 4.6.2015 17:30
Nahoru Odpovědět
4.6.2015 17:30
Neaktivní uživatelský účet
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 19:18

Pripojenie k databázi sa bežne na konci súboru ruší, aby nebola zbytočne preťažená.

Nahoru Odpovědět
4.6.2015 19:18
Neaktivní uživatelský účet
Avatar
black_tino
Člen
Avatar
black_tino:4.6.2015 19:29

Tak na priklad co ak potrebujem ulozit data s databazy na 10 minut niekde ? a podobu tych 10 minut ked budu chodit uzivatelia na web maly by sa im zobrazovat prave tie data. Ak by bola nato trieda kde by bola staticka premena s tymi datami, tak by to bolo ovela vyhodnejsie ako pri kazdom spusteni skryptu sa pripajat do databazi vybrat 1 riadok dat a vypysat ho. Hladam riesenia vlastne ako minimalizovat pripojenia do dabazy.

 
Nahoru Odpovědět
4.6.2015 19:29
Avatar
black_tino
Člen
Avatar
Odpovídá na Neaktivní uživatel
black_tino:4.6.2015 19:31

ano rusi, ale ukoncenie relacie soketov na oboch stranach zrejme prebehne nekorektne teda time_wait status podobu 60-120 sekund, ak teda mate vyssiu navstevnost webov a 1 skrypt kontaktuje datbazu casto kvoli potrebe dat pride mi to ako problem.

 
Nahoru Odpovědět
4.6.2015 19:31
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 19:32

A keby si uložil hodnotu do .txt súboru?

Nahoru Odpovědět
4.6.2015 19:32
Neaktivní uživatelský účet
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 19:33

Takže vlastně chceš vytvořit instanci třídy, připojující se k databázi, která by byla společná pro všechny uživatele na webu? Jestli ano, nejsem si jistý, jestli je něco takového možné. Minimálně to není běžnou praxí.

Obyčejně se vytvoří jediná instance, která se předává v konstruktorech do dalších tříd (v architektuře MVC/MVP do modelu). V serverech se moc nevyznám, takže možná plácnu blbost (a jestli ano, opravte mě prosím), ale jestli ti server nezvládá počet uživatelů, možná bys měl zvážit zvýšení výkonu.

// Příspěvek poslán se zpožděním

Editováno 4.6.2015 19:34
Nahoru Odpovědět
4.6.2015 19:33
Neaktivní uživatelský účet
Avatar
black_tino
Člen
Avatar
black_tino:4.6.2015 19:55

Nie Nie, to som len uviedol ako priklad problemu proste vytvorit triedu z ktorej by mohli cerpat data vsetci uzivatelia ale vytvorit tu triedu iba 1 krat a nie stale pri nacitani celeho skriptu.

 
Nahoru Odpovědět
4.6.2015 19:55
Avatar
black_tino
Člen
Avatar
Odpovídá na Neaktivní uživatel
black_tino:4.6.2015 19:58

ak by som data ulozil do serveru niesom si isty ako by to zatazovalo server stale tie data citat s toho txt suboru keby nahodou mal web velku prevadzku? nerobilo by tak caste nacitanie suboru by asi ovplivnil cely server nie co ak by tam boli mb dat? Dokola x krat to nacitavat neviem neviem, lepsie by bolo keby to bolo iba raz v triede a je ktomu okamzity pristup bez nacitavania subory trieda by sa vytvorila iba 1x pri prvemu uzivatelovi ostatny by vlastne cerpali data uz s vytvorenej triedy. No ci je to realne u php to neviem, a to prave zistujem ci ma aj take moznosti.

 
Nahoru Odpovědět
4.6.2015 19:58
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 20:06

Nevím jestli je to korektní způsob - osobně mi to přijde přitažené za vlasy - nešlo by to ale uložit do cache pomocí nějaké APC? Proměnná by pak měla existovat pro všechny, dokud by se server nerestartoval. Popřípadě v PHP4 a PHP5 můžeš pracovat se sdílenou pamětí, nemám s tím ale žádné zkušenosti. Zkus se podívat do dokumentace http://php.net/…-get-var.php.

Je to docela zajímavá, nevšední problematika, takže budu moct podávat jen mlhavé odpovědi, když mi ale dáš tak den možná dva, zjistím ti o tom něco víc.

Editováno 4.6.2015 20:08
Nahoru Odpovědět
4.6.2015 20:06
Neaktivní uživatelský účet
Avatar
black_tino
Člen
Avatar
black_tino:4.6.2015 20:21

Uz teras dakujem ze niekomu pride aj vhod tato otazocka, nerad chodim s otazkami ako vytvorim pole alebo nieco podobne radsej pridem s otazkou na ktoru neviem najst odpoved nikde :)

 
Nahoru Odpovědět
4.6.2015 20:21
Avatar
black_tino
Člen
Avatar
black_tino:4.6.2015 20:35

chcel som este nieco dopisat do spravy no uz nedalo sa nemam opravnanie chcel som iba dopisat ci hostingy vobec podporuju apc?

 
Nahoru Odpovědět
4.6.2015 20:35
Avatar
Odpovídá na black_tino
Neaktivní uživatel:4.6.2015 20:40

Při odpovědi klikej na tlačítko Odpovědět, jinak mi nepřijde upozornění. Spousta jich APC určitě podporuje, stačí hledat. Mám dojem, že u WEDOSu pořídíš.

Nahoru Odpovědět
4.6.2015 20:40
Neaktivní uživatelský účet
Avatar
mkub
Tvůrce
Avatar
Odpovídá na black_tino
mkub:4.6.2015 20:44

a pouzivaj tlacitko "Vlozit zdrojovy kod",
alebo na zaciatok napis do hranatych zatvoriek: code
a na konci kodu do hranatych zatvoriek: /code

 
Nahoru Odpovědět
4.6.2015 20:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.