Diskuze: Otazocka k Statike php

PHP PHP Otazocka k Statike php American English version English version

Avatar
black_tino
Člen
Avatar
black_tino:

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
Inoue Yūki
Redaktor
Avatar
Odpovídá na black_tino
Inoue Yūki:

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
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na black_tino
Matúš Petrofčík:

...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
Inoue Yūki
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Inoue Yūki:

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  +2 4.6.2015 12:54
Avatar
black_tino
Člen
Avatar
black_tino:

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:

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
Inoue Yūki
Redaktor
Avatar
Odpovídá na black_tino
Inoue Yūki:

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
Avatar
Samuel Illo
Redaktor
Avatar
Odpovídá na black_tino
Samuel Illo :

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
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
black_tino
Člen
Avatar
black_tino:

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 Samuel Illo
black_tino:

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
Samuel Illo
Redaktor
Avatar
Odpovídá na black_tino
Samuel Illo :

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

Nahoru Odpovědět 4.6.2015 19:32
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na black_tino
Inoue Yūki:

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
Avatar
black_tino
Člen
Avatar
black_tino:

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 Samuel Illo
black_tino:

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
Inoue Yūki
Redaktor
Avatar
Odpovídá na black_tino
Inoue Yūki:

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
Avatar
black_tino
Člen
Avatar
black_tino:

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:

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
Inoue Yūki
Redaktor
Avatar
Odpovídá na black_tino
Inoue Yūki:

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
Avatar
mkub
Redaktor
Avatar
Odpovídá na black_tino
mkub:

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.