Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Arhitektura PHP aplikacije

[es] :: PHP :: Arhitektura PHP aplikacije

Strane: 1 2

[ Pregleda: 8131 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Arhitektura PHP aplikacije27.12.2015. u 13:29 - pre 101 meseci
Poslednji put kad sam aktivno radio sa PHP-om (ima tome skoro 15 godina), nije bilo klasa, nije bilo frejmvorka i sve što se dešavalo dešavalo se u scope-u jednog requesta.

Znam da se u međuvremenu dosta toga promenilo, pokušavam sad da izguglam kako danas sve to funkcioniše, ali ne uspevam. Google: "php process architecture" i slične pretrage ne daju ništa korisno.

Dakle, kada se učitavaju npr. model klase u PHP-u? Da li se čuvaju između requestova ili se uvek iznova učitavaju? U kom procesu žive? Kako se npr. čuvaju singleton instance? Itd.
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije27.12.2015. u 20:50 - pre 101 meseci
Model klase, logika, itd.. se učitava tim pre to bolje.
Hoćeš li između klasa udenuti po koji if() else pa u zavistnosti od toga, nastaviti dalje sa učitavanjem (require/include) zavisi od samog developera i organizacije.
Sloboda izbora i više načina za jednu te istu stvar.

----------

PHP fajlovi se iznova uvek učitavaju, baš kao i RoR (server side scripting language, trči svaki put od a do š),
ukoliko:

1. podaci nisu smešteni u bazu pa onda na pravom mestu `fetch`, else `require`.
2. sesije nisu u igri.
3. APCu (alternative php cache)
4. Memcache
5. zend opcache
... i verovatno ima još načina.

Jedan jeste napraviti ekstenziju na osnovu gotove i spremne logike nešto tipa Phalcon framework
A to znači, ne php nego C kod. I onda potrči jednom i tu je. I ptica trkačica podseća na puža golaća... ali, to već prelazi u nešto drugo.
Potrebno je više od samo PHP/sql znanja.

Od svih koje sam nabrojao, mislim da je zend opcache glavna stvar.
Jednom se učita, kompajlira se u memoriju servera.
Parser u narednom reqeustu ne čita iz `included fajla` već vadi iz memorije.
Ukoliko je server restartovan, pozvana funkcija za opcache_reset, timeout vrednost dostignuta, fajl ručno modifikovan od strane vlasnika, itd..
u narednom letu se očitava ponovo, smešta u memoriju.

Memcached bi trebalo da može isto što i zend opcache ali nije native/built-in ekstenzija. (php >= 5.5*)
Nikada nisam koristio memcahed, pa, neka onaj ko jeste ispravi, dopuni.

Singleton u PHP...
keyword final.

Code (php):

<?php

final class uniqueInstance
{
 
 public function __construct()
 {
   // code ....
 }
 
}

$obj = new uniqueInstance();

 


Mada, singleton može i da se klonira..
A čuva se - isto kao i sve ostalo i na isti način.

------

Proces u kome se sve to obitava jeste httpd/apache (server) child proces. Ako nije u pitanju command line interface iil php-cli. Onda dobija svoj proces (daemon).
Zavisi i od toga kako je instaliran php pre svega. Uglavnom je to kao apache modul.

Prešaltaj preko ovog članka/tutorijala iz 2011., mislim da će ti biti poprilično jasno kako bi trebalo da izgleda jedna prosta, normalna, bazična PHP zealica za zdravom logikom i prezentacijom.

Kako PHP radi i gde da se informišeš i dobiješ najpreciznije detalje, jeste php.net matični sajt.
about:networking
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije27.12.2015. u 21:07 - pre 101 meseci
edit/update: čisto da dodam, da se ispravim, za definisanje singletona nije dovoljno samo final, to zapravo znači da ta klasa ne može poslužiti za `extend` svrhe.
Ali, kada se upotrebi kwd final a unutra jedan protected konstruktor i statične metode, onda se od finalne klase može pozvati finalClass::staticMethod(); međutim, ne i new()...
A koliko je to kompatibilno sa php 7.. za dalju diskusiju, već.
about:networking
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Arhitektura PHP aplikacije28.12.2015. u 08:12 - pre 101 meseci
Nismo se razumeli. Nije mi problem da nađem kako se u PHP definiše singleton. Moje je pitanje gde se ta instanca čuva između requestova.

To nema nikakve veze sa time što je PHP scripting jezik. RoR klase se apsolutno ne učitavaju pri svakom requestu. Klase se učitavaju samo jedanput, a jedan isti proces hendluje više requestova. (pročitaj više npr ovde http://stackoverflow.com/quest...ccess-the-same-runtime-variabl) Zato ja u RoR kad definišem singleton, to je zaista jedinstvena instanca, koju vide svi requestovi aplikacije, tokom celog njenog života (dakle, isto kao u Javi npr).

Čini mi se da u PHP-u i dalje sve živi samo tokom jednog requesta - tako da npr. singleton instance to jesu samo u okviru jednog requesta - ako hoćemo da imamo istu instancu klase za dva različita korisnika, moraćemo to da implementiramo preko nekog zajedničkog medija (memcache, fajl, baza)? Da li je ista situacija i kod modernih PHP frejmvorka? Da li se zaista ceo frejmvork učitava prilikom SVAKOG requesta?

BTW memcached je jednostavni key-value store koji koristi memoriju.

[Ovu poruku je menjao jablan dana 28.12.2015. u 09:25 GMT+1]
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije28.12.2015. u 11:15 - pre 101 meseci
A ja mislim da je tebi jablane poprilično dosadno.
Nismo se razumeli? Šta nisi razumeo?

Memcached ne mora da bude jednostavan zato što može da se distribuira preko više servera, dok apc i opcahce ne mogu.
zend opcache bar ne za sad, dakle nije isto, jer postoji i memcached server setup, a možda može i sa z.opcache, samo ja još nisam upućen.
apcu je za razliku od memcached varijante per client. Dakle, jedan server. Jedan host, jedan domen, itd...

Situacija je potpuno ista preko modernih php frejmworkova i gore sam ti nabrojao 5 najzastupljenijih načina uz pomoć kojih se to izbegava. A i onda kada se opcode čita uvek i uvek iznova, opšte poznata stvar je da php ima najbrži interpreter. Upravo zato i jeste najzastupljeniji. A eto, vele da je php7 i duplo brži nego prethodnik.. i s' obzirom na to da php služi i dalje uglavnom za generisanje teksta, hiperteksta i ostalih propratnih ekstenzija koje sami browser može da kešira, dakle da sami browser pokupi ono što je već bilo na ekranu i da se svede sve samo na `negotiate` bez response-a, a prevashodno se dolazi do jedne tačke gde se dodaje/implementira opcija disk keširanja, eto, to je varijanta broj 6, onda kada uz pomoć early output buffer-a spakuješ izlaz u .html fajl pa ga u narednom requestu u prvoj ili drugoj priključenoj skripti, na osnovu built-in server promenjivih ili već ukucanih vrednosti iz kolačića povuče i preskoči sve na dalje ... i umesto 30ms dobiješ 3ms. Mada, to je već keširanje sažvakanog izlaza, ne i same sirove žvake. Ali eto, kada se i keširanje uključi u igru, onda server i php interpreter maltene pa bukvalno spavaju ... Naravno, kada je nešto komplikovanije gde ima puno dugmića/formi itd., onda se deo posla malo prepusti i javaskripti, ukoliko može/mora da kešira a da rezultat/ishod na ekranu klijenta treba da ostane dinamičan ili se jednostavno kešira više fragmenata stranice. Dakle, da. I ceo frejmwork ide svaki put, ukoliko taj frejmwork nije kao PHP ekstenzija. Linkovao sam ti Phalcon, to je jedan od onih koje bi ti skroz podržao.

Citat:


PHP C-extension (Phalcon)

C-extensions are loaded together with PHP one time on the web server’s daemon start process
Classes and functions provided by the extension are ready to use for any application
The code is compiled and isn’t interpreted because is already compiled to a specific platform and processor
Thanks to its low-level architecture and optimizations Phalcon provides the lowest overhead for MVC-based applications



about:networking
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.ptt.rs.



+218 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 09:17 - pre 101 meseci
@Jablane. Prvo sam napisao jedan dugacak post da objasnim sve sta je ovde pisano. Uglavnom pogresno se razumelo pitanje i odatle brdo pogresni odgovora. To nekog pocetnika ne zanima.

Ukratko:
Sve potrebno se ucitava prilikom svakog requesta. Ne cuvaju se klase izmedju requesta i uvek se iznova ucitavaju, da li direkt sa diska, da li iz kesa hdd-a ili RAM-a, da li kompajlirano ili mora da krene od parsiranja sve zavisi ali se svaki put ucitava se iz pocetka. Prakticno svaki put ponovo pokreces program i zive dok se kod ne izvrsi i rezultat izvrsavanja prosledi. Instance zive dok se kod ne izvrsi. Sve podignute klase umru kada se kod izvrsi. Zive jedan delic sekunde dok se kod izvrsava.

Pitanje:
Zbog cega bi se neki kod bio zajednicki za vise korisnika?
Ovo je logika server-client aplikacije a ne desktop i to se nije izmenilo od kada postoji PHP.
Ti moras da izvrsis kod i zavrsis izvrsavanje kako bi rezultat poslao korisniku koji moze da ode sa sajta i vise se nikada ne vrati.
Drugim korisnicima moze da bude interesantan rezultat tog korisnika ali to je podatak i to moze da se sacuva recimo u bazi ili kesira u memoriju.
Onda je ovo prica o kesiranju podataka a ne kesiranju koda, zar ne?
Moze i kod da se kesira na razlicitim nivoima i mestima ali i tako kesiran kod sluzi samo za brze izvrsavanje a ne da bude vidljiv izmedju korisnika jer niko ne garantuje da ce korisnici istovremeno izvrsiti taj kod.
Tvoje pitanje je bilo zivot koda a odgovori su se odnosili na brzinu koda. Zivot koda se nije nikada izmenio niti vidim neku logiku po kojoj bi mogao da se menja i zato nisi dobijao odgovore na google.



[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.ptt.rs.



+218 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 09:28 - pre 101 meseci
Zbog cega ti u PHP treba deljena klasa kao sto ima RoR? Razumem ako je klasa read-only onda je dovoljno da je jednom kompajliras i onda radi posao. PHP je svaki put kompajlira ali sta te briga zasto to on radi. Nemoj da obracas paznju na to.
Ako klasa nije read-only onda zamislis 1000 korisnika je svake sekunde menja. Zbog cega ce ti to?

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 11:45 - pre 101 meseci
Kao prvo, hvala za iscrpan odgovor, saznao sam ono što sam želeo.

Kao drugo, pitanje sam postavio iz radoznalosti, ne zato što hoću nešto da radim sa PHP-om.

Citat:
VladaSu: Drugim korisnicima moze da bude interesantan rezultat tog korisnika ali to je podatak i to moze da se sacuva recimo u bazi ili kesira u memoriju.
Onda je ovo prica o kesiranju podataka a ne kesiranju koda, zar ne?

Vidiš, OOP na neki način podrazumeva "jedinstvo" koda i podataka. Znam da je poslednjih godina PHP stavio akcenat na OOP pristup, ali ovo što kažeš mi govori da je taj pristup na neki način ostao samo "kozmetički" - ako ti pri svakom zahtevu moraš da neke deljene podatke (de)serijalizuješ, čupaš iz baze ili keša i ponovo kreiraš objekte koji će ih nositi.

Banalan primer - imaš neke podatke koje prevlačiš sa nekog partnerskog servisa: kursnu listu, cene i stanje sirovina kod dobavljača, vremensku prognozu. Ili - banalan primer sa ES - lista aktivnih korisnika u poslednjih n minuta. Naravno da sve to možeš da dovučeš, ukeširaš negde i onda prilikom svakog requesta vadiš to iz keša i praviš neku strukturu sa nekim objektima od toga - ali je logičnije da ta struktura živi negde u okviru aplikacije svima dostupna kao objekat.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.ptt.rs.



+218 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 14:59 - pre 101 meseci
Tacno, na tvom primeru logicnije je da to kursna lista zivi 24 sata.
Tako nesto je moguce i videces da je konstruktor pozvan samo prvi put bilo koliko puta pokrenes ovaj kod.

Code (php):

<?php

class Test
{
    private $result = 'nothing';
    public function __construct()
    {
     echo "change result nothing to something<br>";
     $this->result = 'something';
    }
   
    public function result()
    {
     return "Result is: {$this->result}<br>";
    }
}

$test_class = apc_fetch('test_obj');
if (!is_object($test_class) || !method_exists($test_class, 'result'))
{
    $test_class = new Test();
    apc_store('test_obj', $test_class);
}

echo $test_class->result();

?>

 

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 16:42 - pre 101 meseci
Jesi li siguran Vlado da će i metode da žive u apc-u kao value uz pomoć apc_store ili apc_add?
Pitam zato što ja inače koristim apcu. PECL/apc koliko se sećam može i da kompajlira, valjda apc_compile_file() upravo ono što radi z.opcache,
ali ne i apcu koji jeste - key->value - only, a ti si u primeru upotrebio baš to.

I mislim da ti je primer loš.
U tvom primeru će uvek ponovo očitati i klasu i sve ostalo.

Možda ovako nekako?

Code (php):

<?php

if(apc_exists('test_obj'))
{
     $test_class = apc_fetch('test_obj');
}
else
{
     class Test
     {
          private $result = 'nothing';
          public function __construct()
          {
           echo "change result nothing to something<br>";
           $this->result = 'something';
          }
       
          public function result()
          {
           return "Result is: {$this->result}<br>";
          }
     }

     if (!is_object($test_class) || !method_exists($test_class, 'result'))
     {
          $test_class = new Test();
          apc_store('test_obj', $test_class);
     }

}

echo $test_class->result();

 



@jablan

Ruby ima jedan framework. Možda i dva, možda i mnogo više, ne znam, ja sam neupućen u ruby, a php ima frejmworkova maltene koliko ruby ima funkcija. Odatle i razlog za kako si to krstio kao `kozmetiku`, zapravo jedan od dobrih razloga. Rails je verovatno poprilično moćan i satkan tako da zadovoljava sve što se zamisliti može. E, a ono što meni nije jasno, jeste kako šljaka čist Ruby. Bez bilo kakvog frejmworka. Možeš li nam opisati to?

[Ovu poruku je menjao plus_minus dana 29.12.2015. u 18:07 GMT+1]
about:networking
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.ptt.rs.



+218 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 17:25 - pre 101 meseci
To sto si definiciju klase stavio u if else sto se tice kompajlera nisi ama bas nista uradio jer se klasa u svakom slucaju kompajlira.
Ne kompajlira se prolaz uslovljen kodom vec kompletan kod. Kompajliran kod takodje moze da se kesira ali on je kompletno kompajliran a ne specifican prolaz.

Postavljeno pitanje nema veze sa kompajiranjem ili brzinom izvrsavanja koda vec da li se objekti uvek iznova kreiraju za svaki request ili se posebno kreiraju pa ih koriste requesti.
Odgovor je da se zasebno kreiraju za svaki request i traju dok se request ne zavrsi ali u nekom posebnom slucaju moze da se napravi klasa koja zivi izmedju requestova i vise requesta moze da ih koristi.
Konkretan primer potrebe za tim je kursna lista i ima logike ali nema potrebe da se tako resi. Moze i na drugi da kazem PHP-ov nacin.

Ali ako se bas zeli resiti konkretno taj problem sto je Jablan naveo tako sto ce objekat da zivi nezavisno od requestova onda je moj primer dobar.
Nije dovrsen i savrsen ali je dovoljan da se shvati da to moze da funkcionise onako kao je Jablan zeleo.

Evo doradjenog koda.
Code (php):

<?php
class Test
{
    private $result = 'nothing';
    private $i = 0;
    public function __construct()
    {
     echo "change result nothing to something<br>";
     $this->result = 'something';
    }
   
    public function result()
    {
     $this->i = $this->i + 1;
     return "Result is: {$this->result} {$this->i}<br>";
    }
}

$test_class = apc_fetch('test_obj');
if (!is_object($test_class) && !method_exists($test_class, 'result'))
{
    $test_class = new Test();
    apc_store('test_obj', $test_class);
}

echo $test_class->result();
apc_store('test_obj', $test_class);
?>
 

E sada ti pokreni ovaj php u jednom browseru i imaces rezultat:

change result nothing to something
Result is: something 1

Pokreni ponovo i dobices:

Result is: something 2

Pokreni u drugom browseru i dobices:

Result is: something 3

Pokreni na drugom racunaru i dobices:

Result is: something 4

Pokreni ponovo na prvom racunaru i dobices:

Result is: something 5

Jos jednom na prvom racunaru:

Result is: something 6




A da li sam siguran? Pa probao sam, ne mogu biti sigurniji :)


[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 17:46 - pre 101 meseci
^^ Nisam pokrenuo, ali znam da ću pored toga imati i dodatnih linija u error logu.
Sa mojim primerm, ne.

Prvi put, apc_fetch nema odakle da fečuje. Error, notice, garant. To mi ne treba.
Zato i postoji if(apc_exists ... ) pa onda fečovanje.

Citat:

To sto si definiciju klase stavio u if else sto se tice kompajlera nisi ama bas nista uradio jer se klasa u svakom slucaju kompajlira.


Tako je. Ali samo prvi put. Posle toga, klasa/objekat bi trebala da živi samo u apc-u, iskompajlirana.
Ako nije tako, za kojeg onda stoyka služe i if/else i apc i sesije i sve ostalo.. ?

Vrlo prosto. Uzmi i mom primeru definiši jednu konstantu. Nakon else. Pre class
define('CONSTANT_NAME', 'test value');

A tu gde je echo $test_class->result(); ... udeni i echo CONSTANT_NAME;

Prvi put će `ispljunuti` i 'test value'.
Drugi put, neće, nego će ti ispisati da konstanta ne postoji, neki error će da se desi.

Citat:
Ali ako se bas zeli resiti konkretno taj problem sto je Jablan naveo tako sto ce objekat da zivi nezavisno od requestova onda je moj primer dobar.

Nope.

U svakom slučaju, apc_add/store ne bi trebali da se koriste za same klase ili proceduralne funkcije mimo klasa, već apc_compile_file.
Ok je za nizove, teške i gabaritne promenjive, dakle uglavnom stringove, kao zaobilaznica za yet another require_once file a unutra $myVar = array( ... array() ... array() .. ) .. itd.

[Ovu poruku je menjao plus_minus dana 29.12.2015. u 18:58 GMT+1]
about:networking
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 17:55 - pre 101 meseci
Citat:
VladaSu:
Code (php):

$test_class = apc_fetch('test_obj');
 

Ok, kontam, kešira se ceo objekat (btw jako je bitno praviti razliku između pojmova objekat i klasa, ne znam da li je primer tvoj). Problem sa tim keširanjem je što to zapravo nije isti objekat kad se izvuče iz keša, već njegova kopija. Dva requesta koji se izvršavaju istovremeno povući će kopije istog objekta i možda ga promeniti i prepisati original. Kontam da je sinhronizacija ovakvih objekata ekstremno pipava i podložna greškama - apc mi generalno liči na nešto što treba vrlo pažljivo koristiti.

Nisam imao nameru od ove teme da napravim temu "čiji je veći", samo da se informišem malo bolje o PHP-u. U krajnjoj liniji, u svim jezicima se može napisati manje više sve, samo su neki pogodniji za neke primene od drugih.

[Ovu poruku je menjao jablan dana 29.12.2015. u 19:55 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 18:08 - pre 101 meseci
Citat:
plus_minus:
E, a ono što meni nije jasno, jeste kako šljaka čist Ruby. Bez bilo kakvog frejmworka. Možeš li nam opisati to?

Pa ono, startuješ skriptu iz konzole kao bilo koju drugu, krene ruby proces, odradi šta treba, završi se. :)

Ako misliš na ruby na webu, uglavnom se koriste frejmvorci, niko ne piše web app od nule (postoje ultralagani frejmvorci, kao npr. Sinatra, ako ti ne treba sav bloat koji donosi Rails). Ruby kao jezik ne poznaje web - pisan je kao jezik opšte namene. Sam za sebe ne ume da procesira HTTP zahteve. Treba ti neka biblioteka koja to ume - obično je to Rack: http://rack.github.io/ Možemo otvoriti novu temu ako nekog interesuje da sazna više.
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 18:28 - pre 101 meseci
@jablan

Dakle, ruby je jako sličan pitonu. Jel' da? Ok. Piton mi je već poznat po malo.

Što se tiče samog keširanja, i apc-a, apc pravi svoj interni niz. array. U PHP-u je gotovo sve - niz. :) Smešta se u neki niz. Retko šta nije od ugrađenog, internog i ponuđenog, a da je to superglobal, itd...
I dobro si shvatio kako funkcioniše apc. A i terminologija. Ono što se instancira, dakle new className, ta promenjiva postaje instanca#1, instanca#2, itd.. To se naziva objekat.

Dakle, `__set_state()` se desi onda kada se klasa, neinstancirana, smesti u apc slot, i ne može da bude ništa drugo nego kopija - bez svojih metoda.
Samo svojstva i stanje u kome se klasa nalazila onda kada je spakovana u novi apc slot. Isto je i sa sesijama kada klasa treba da se popakuje u sesiju.

@VladaSu

Odradi var_export($test_class); i dobićeš ono što apc sačuva. Metode? Gde su tu?
A ti inače koristiš, pozivaš metodu iz samog apc-a zato što ti je kod takav da klasu učitava, parsuje uvek, jer je na samom početku, nije uslovljena ničim.

.. tako da će u mom primeru dati i još jedan error pored `no f*ing constant defined bro!` vezan za metodu ($test_class->result();), garant (razmišljam napamet).
Što je validno. Zbog same mogućnosti apc-a. Metoda na ovaj način, neće postojati u apc slotu, ali svojstvo hoće.

opcache je za sada jedini (lagan za svakoga i čist PHP) način da se sačuva kompletna klasa u memoriju.
PECL/APC (ne APCu) koji nije kompatibilan sa built-in zend opcache extenzijom takođe može sa apc_compile_file().

Dakle, starije verzije PHP-a, mogu da koriste PECL/apc, ne moraju da se oslanjaju samo na apcu koji jeste kompatibilan sa z.opcache i koji radi ono što opcache ne.
A to je key -> value mehanizam on demand.
about:networking
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 19:27 - pre 101 meseci
edit:
Citat:
Pa ono, startuješ skriptu iz konzole kao bilo koju drugu, krene ruby proces, odradi šta treba, završi se. :)


To Jablane dakle znači da i naredni put kad se pokrene, bez rails-a ili čega već, ruby opet započinje proces, odradi šta treba, završi se.. ?
about:networking
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 19:45 - pre 101 meseci
Da, isto kao kad bilo koji drugi program na mašini pokreneš. Naravno, ako želiš, možeš da napišeš i neki daemon koji je stalno pokrenut i koji reaguje na neke događaje u sistemu - ako su to HTTP zahtevi onda se to zove web server. :)
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.ptt.rs.



+218 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 20:15 - pre 101 meseci
@plus_minius
Pokreni, nemoj napamet da pricas i samo junkujes temu.
Ti se razumes u php i to je cinjenica ali brate nemoj da moram ko nekom pocetnku da pisem jer te je mrzelo da pokrenes program.
Ako key ne postoji apc_fetch vraca false. Nema "garant error i notice".
Ja pricam o principu a ti se hvatas za sintaksne greske i ne kontas razliku izmedju definicije klase i objekta klase.
Jablana interesuje zivot objekta a definicija nema zivot. Definicija je definijcija. Jako skreces temu.
Druze, to sto se neki else ne izvrsi u nekom slucaje ne znaci da se taj else ne kompajlira. I ta konstanta sto u jednom slucaju nije definisana ne znaci da nije kompajlirana vec samo nije
definisana jer nisi usao u taj else. Da ne kazem da se ucitao ceo taj fajl. Ta definicija klase se svaki put ucita bila ona u else ili na pocetku ili na kraju jer kompajler kompajlira ceo fajl a ne uslov
koji je ispunjen u nekom slucaju.
Primer, napravi u C isti program i kompajliraj ga i prvi put ce videti konstatnu a drugi put nece a to je isti program, isti fajl i ni jedan bajt mu nije menjan.
Jos jednom, ne kompajlira se tok programa vec program. Mesas to. To sto isti program u dva slucaja ima razlicite tokovo to nema veze, to je jedan te isti program, isti u svaki bajt.
Tvoji odgovori nemaju ama bas nikakve veze sa pitanjem, uporno promasujes temu i zbunjujes i mesas nebitne stvari.
Pokreni i vidi i kraj price. Radi za kursnu listu.

@Jablane
Upravu si, to je kopija objekata i ta kopija se s vremena na vreme update-je i svaki update moze da prepise update koji su se desili u medjuvremenu.
Siguran sam da postoji i suvise je komplikovano uraditi to sto ti trazis ali ja za 15 godina nisam imao potrebe za tim, mozda i jesam ali sam nalazio druga laksa resenja.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 22:35 - pre 101 meseci
@VladaSu

Citat:

Pokreni, nemoj napamet da pricas i samo junkujes temu.
Ti se razumes u php i to je cinjenica ali brate nemoj da moram ko nekom pocetnku da pisem jer te je mrzelo da pokrenes program.
Ako key ne postoji apc_fetch vraca false. Nema "garant error i notice".


A zašto bih pokretao? Ne sviđa mi se logika samog primera. Možda da proverim kako radi apc (za koji znam kako radi) eventualno da se podsetim koja od 5000 i kusur funkcija beše vraća boolean ili ispisuje notice ili fatal error na ekranu .. ? Pa i onda kada funkcija daje false.. a ti očekuješ `felerični`, nepotpuni i spakovani objekat ili niz, a taj fajl gde se to određuje i prisvajaju vrednosti pozvan na require_once, onoga momenta kada $test_class naiđe na deo gde će možda da se provuče kroz neku drugu metodu koja neće samo da `ćuti` ako nije string ili ono što se očekuje već daje određeni error, pa sve to na kraju treba da prođe kroz `gzhandler` ob_start(), ob_get_clean().. znaš šta se dešava? Dešava se da sve stane. A browser biva zbunjen do daske. I tebi ne preostaje ništa drugo nego da čitaš šta kaže error_log. Ovo je baš uprošćeno objašnjenje i verovatno će još neko iskusan u PHP-u, ko čita i koga ne mrzi da na koliko god mesta treba, udene po jedan if(isset()), if(is_*()) pre nego što krene da dodeljuje vrednosti, biti 100% saglasan sa mnom.

Citat:
Ja pricam o principu a ti se hvatas za sintaksne greske i ne kontas razliku izmedju definicije klase i objekta klase.
Jablana interesuje zivot objekta a definicija nema zivot. Definicija je definijcija. Jako skreces temu.


A objekat ima život? Promenjive imaju život? funkcije imaju život? I definicija je definicija.. malčice si se ti meni pogubio ovde.
I drago mi je što se razumem u php i da je to činjenica, ali da ne razumem šta je to definicija klase, a šta sami objekat.

Citat:
Druze, to sto se neki else ne izvrsi u nekom slucaje ne znaci da se taj else ne kompajlira. I ta konstanta sto u jednom slucaju nije definisana ne znaci da nije kompajlirana vec samo nije
definisana jer nisi usao u taj else. Da ne kazem da se ucitao ceo taj fajl. Ta definicija klase se svaki put ucita bila ona u else ili na pocetku ili na kraju jer kompajler kompajlira ceo fajl a ne uslov
koji je ispunjen u nekom slucaju.


Ama, jel' tebi i dalje nije jasno da u tvom primeru postoji i apc, postoji i klasa uvek, postoji i u mom (ali ima jedno else)... i da to što ti misliš da se dešava, .. zapravo se ne dešava, nego se dobija sirova klasa + zauzeće dodatnog apc slota. Koja je tu svrha? Da zaboravimo da class objekat, instanca, class opcode (ma kako ti god drago) `NE MOŽE DA SE SPAKUJE ZA KASNIJE`, da bude komplet u memoriji, zarad performansi ili overheada ili čega već - uz pomoć apc_add, apc_store... MORA drugačije - da - se - radi. U ovom PHP-u, takvom, kakav je. Efekat iz tvog primera je još lošiji i više resorsa troši nego čist OOp bez bilo kakvih dodatnih memcache, apc-a, zend-a itd, itd..

Code (php):


<?php

if(apc_exists('someValue'))
{
     $myValue = apc_fetch('someValue');
}
else
{
     require_once('/path/to/file/where/someValueIs.php');

     if(function_exists('some_function'))
     {
          $myValue = some_function();
          apc_add('someValue', $myValue, 300);
     }
}

echo $myValue;

 


Gornji primer, nakon prvog učitavanja, možeš slobodno sve što se nalazi pod `else` zapakovati u block comment /* */ pa refreš.
U narednih 5 minuta, nakon toga, čist apc radi. Nema priključenog fajla u get_included_files() uopšte.

E, to je svrha apc-a. Glavna.

Citat:

Primer, napravi u C isti program i kompajliraj ga i prvi put ce videti konstatnu a drugi put nece a to je isti program, isti fajl i ni jedan bajt mu nije menjan.
Jos jednom, ne kompajlira se tok programa vec program. Mesas to. To sto isti program u dva slucaja ima razlicite tokovo to nema veze, to je jedan te isti program, isti u svaki bajt.


A zašto bih u C napravio isti takav program? Zato što se iza PHP functionName() krije čist C ili zbog nečeg drugog?
Osim toga, uzeo sam konstantu kao primer. I sa $CONSTANT_NAME = 'test_value'; je potpuno isto, sa apc-om, prvi put će je biti, drugi put neće.
Ne mešam ama baš ništa. Možda imam nesvakidašnji sleng...

Citat:

Tvoji odgovori nemaju ama bas nikakve veze sa pitanjem, uporno promasujes temu i zbunjujes i mesas nebitne stvari.
Pokreni i vidi i kraj price. Radi za kursnu listu.


Moji odgovori su po meni, dovoljno dobri.
Da citiram samoga sebe kad moram.

jablan:
Q: Dakle, kada se učitavaju npr. model klase u PHP-u? Da li se čuvaju između requestova ili se uvek iznova učitavaju? U kom procesu žive? Kako se npr. čuvaju singleton instance? Itd.

+/-:
A1: Model klase, logika, itd.. se učitava tim pre to bolje.
Hoćeš li između klasa udenuti po koji if() else pa u zavistnosti od toga, nastaviti dalje sa učitavanjem (require/include) zavisi od samog developera i organizacije.
Sloboda izbora i više načina za jednu te istu stvar.

----------

PHP fajlovi se iznova uvek učitavaju, baš kao i RoR (server side scripting language, trči svaki put od a do š),

A2: Dakle, da. I ceo frejmwork ide svaki put, ukoliko taj frejmwork nije kao PHP ekstenzija ...

A3: Proces u kome se sve to obitava jeste httpd/apache (server) child proces. Ako nije u pitanju command line interface iil php-cli. Onda dobija svoj proces (daemon).
Zavisi i od toga kako je instaliran php pre svega. Uglavnom je to kao apache modul.

---

Ovo "baš kao i RoR" pod A1 - preskoči, očigledno da nije tačno, moje neznanje vezano za R + Rails.

Za kraj ovog posta.. moram da dodam, primećujem da svi vi koji koristite taj ubuntu, imate neku zajedničku crtu i kratak fitilj.
Šta je to sa vama? Šta je to što cannonical servira a da mi ostali ne znamo?

Sad gledaj da se razjariš i iznapadaš ne ponovo, samo zato što si dao - nekorektnu - PHP praksu kao primer.
about:networking
 
Odgovor na temu

Nemke_BG

Član broj: 163822
Poruke: 341
*.static.sbb.rs.

Jabber: Nemke_BG@elitesecurity.org
Sajt: https://www.nmdesign.rs


+45 Profil

icon Re: Arhitektura PHP aplikacije29.12.2015. u 22:50 - pre 101 meseci
@plus_minus

ubi se citajuci ovaj tvoj post, ali da me ubijes ne znam sta si hteo da kazes. Mozda je do mene, jer me hvata grip pa nisam sav svoj.

Tako da cu generalno da ti odgovorim, mozes stanje objekta da sacuvas za kasnije i da ga u nekom sledecom request-u tako inicijalizujes (http://php.net/manual/en/language.oop5.serialization.php).

Ako se nekome taj pristup ne svidja uvek moze da napise i full server lifetime objekat koristeci sledeci web server:

http://appserver.io/
...
 
Odgovor na temu

[es] :: PHP :: Arhitektura PHP aplikacije

Strane: 1 2

[ Pregleda: 8131 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.