<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Goran Rakić</title>
    <description></description>
    <atom:link href="https://blog.goranrakic.com/archives/php.xml" rev="self" type="application/rss+xml"/>
    <atom:link href="https://blog.goranrakic.com//php.html"/>
    <pubDate>Sun, 19 Feb 2017 02:39:16 +0100</pubDate>
    <lastBuildDate>Sun, 19 Feb 2017 02:39:16 +0100</lastBuildDate>
    <id>https://blog.goranrakic.com//php.html</id>
 
 <item>
       <title>Nezainteresovani korisnici</title>
        <description>&lt;p&gt;Između ostalog što radim je i moderisanje PHP foruma na Elitesecurity-ju. Uglavnom mi ne pada teško ali ima jedna stvar koja me žestoko iritira. Dođe novi korisnik mika na ES, registruje se, ode na php forum i postavi pitanje: “Treba mi skripta za autentifikaciju korisnika iz tekstualne datoteke” ili već nešto slično. Izgleda da onaj FAQ Kako pitati pitanja na pametni način treba postaviti na svaku drugu stranicu.&lt;/p&gt;

&lt;p&gt;Pitam se šta takav profil korisnika očekuju? Da ja krenem da pišem njihovu skriptu koja autentifikuje korisnika iz txt datoteke po već utvrđenom formatu? Još kada bih uradio i HTML dizajn za to, bilo bi super. A on, zahvaliće se uredno.&lt;/p&gt;

&lt;p&gt;U takvim slučajevima uglavnom odgovorim sa već dobro poznatom frazom “pročitaj php manual”, što je već i meni samom dosadno.&lt;/p&gt;

&lt;p&gt;Ja lično volim da pomognem mnogima kada vidim da se sami trude da reše problem. Na primer, da je pitanje bilo postavljeno “Napisao sam to i to, ali neće jer izgleda da po grešci koju stavlja nemam dobar fajl deskriptor…” ili slično. Ali ne, najbolje bi bilo kada ne bi morali ni da otvore php manual. Onolika velika arhiva, to da skidaju… uh?&lt;/p&gt;

&lt;p&gt;Jedino što mi je interesantno što uvek naleću u rojevima. Uvek se pojavi 5 pitanja takvog profila, pa onda sledi pauza od nedelju dana, pa opet… Da li jedan drugog ohrabruju ili je uticaj Meseca u pitanju?&lt;/p&gt;
</description>
        <pubDate>Thu, 07 Aug 2003 01:51:56 +0200</pubDate>
        <link>https://blog.goranrakic.com/2003/08/nezainteresovani_korisnici.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2003/08/nezainteresovani_korisnici.html</guid>
 </item>
 
 <item>
       <title>Trenutno mrzim php</title>
        <description>&lt;p&gt;Iako ima brojne prednosti, kada dođe do većih zahteva php prikazuje svoje slabosti. Da ja shvatam da je najveća popularnost zbog postojanja jako velikog broja ugrađenih funkcija za sve i svašta, zbog opšte prisutnosti na 99% svih hosting paketa, znam da ima jako mnogo programera koji u njemu šljakaju, ali se meni jezik sve manje dopada.&lt;/p&gt;

&lt;p&gt;Kada počnete da radite u php-u, prvo što primetite jeste da vrlo brzo moćete da napravite nešto korisno, nema deklaracije, definicije, pravila su vrlo slobodna, php radi automatske konverzije i sve ostalo, ma idealno. Ali…&lt;/p&gt;

&lt;p&gt;Onda na red dolaze krupnije stvari, i shvatite da vaš kod liči na špagete (hvala Predragu Damjanoviću na poređenju) i ma kako vi poštovali vaš coding style dolazite u situaciju da više ne možete da pratite organizaciju projekta. Ok, idemo na OOP, sredićemo funkcije u klase, kontrolisaćemo ko šta poziva i ko šta mož?e da poziva. Ali đavola, sve do najnovijeg php5 (koji se dugo vremena neće naći na nivou popularnosti php4), trenutno neupotrebljivog za bilo kakv ozbiljan rad, OOP u php-u je, pa prava reč je smešan. Kakav je to OOP kada ne postoje privatni i javni deo klase, kada ne postoje pokazivači i reference? Dobro, hajde za ovaj prvi deo, recimo da pišemo kod tako da sigurno nećemo dopustiti sebi da odemo van interfejsa klase, već pazimo na private/public metode i vrednosti. Ali kako rešiti drugi problem? Recimo da imamo DB klasu. Ta klasa je potrebna iz Auth klase kako bi ista pročitala privilegije korisnika, a potrebna je i iz neke Navigation klase jer će ona učitavati odgovarajući kod zavisno od tražene stranice (Koji će verovatno koristiti metode DB klase). Nikakav problem, na prvi pogled. Imamo instancu DB klase, poš?aljemo je po referenci u Auth i u Navigation klasu i šta se onda desi? PHP-ev idiotski način prosleđivanja objekta po referenci izvršava konstruktor ponovo pri svakom prosleđivanju. E sada kako ne bismo upali u filelock (pošto naša DB klasa, jelte koristi tekstualne datoteke), mi iz konstruktora DB klase izdvajamo deo koda van klase, zatim iz metoda koji postavljaju upit, izdvajamo delove koji moraju da se prenose izmedju 2 instance DB klase kao globalne varijable koje čitamo i pišemo pomoću funkcija ne-članica klase. I šta na kraju dobijamo, pa opet špagete. Umesto da dobijemo black-box objekat DB, mi imamo klasu DB koja rasipa svoj kod na barem još tri mesta. Hajde dosta o objektima.&lt;/p&gt;

&lt;p&gt;Kako stvari stoje sa kontrolom programa?  Pa dovoljno je pomenuti da je php typesafe i sve je jasno koliko kontrole može da se implementira. One glupave is_* funkcije su nepredvidive, tj treba uvek prvo njih proveriti kako se ponašaju, a tek onda proveravati program.&lt;/p&gt;

&lt;p&gt;Sledeće, mrežno programiranje… PHP je skript jezik koji se najčešće koristi za izradu raznoraznih dinamičkih sajtova zar ne? Pa onda bi valjda trebao da ima dobro implementiran socket interfejs, da omogući kvalitetno mrežno programiranje. Ali… Recimo da trebamo da pošaljemo udaljenoj skripti neke podatke, zar nije logično da postoji način da ta udaljena skripta pročita sve podatke koje smo joj poslali? Funkcija fread() to radi međutim tek od php-a verzije 4.3.0 i novije. Za starije verzije php interpretatora ili moramo ubaciti kontrolnu sekvencu koja imitira EOF (iako select() funkcija u BSD sockets interfejsu itekako može da očita EOF u poslatoj komunikaciji sa servera - “man select”) ili postaviti da fread() pročita nekih 10MB podataka, a pošto će web server prekinuti komunikaciju čim pošalje podatke (manje od 10MB) php neće čitati doveka (jer gubi deskriptor socket-a koji se gasi po prekidu konekcije).&lt;/p&gt;

&lt;p&gt;Može ovde sigurno još mnogo toga da se nabraja, ali nakon dužeg rada sa php-om verujem da svi shvate idiotizam php-gtk projekta. Pored toliko kvalitetnih jezika poput C++-a ( ;) ), praviti php sa klijentskim GUI-jem je čista perverzija. Nekada sam se bunio kada neko sa podsmehom pomene php. Sada, pa hm, ćutim. Nadam se da će kada php uđe u stable, mnogi hosting provajderi prihvatiti novu verziju, mada bez otkrivanja nekog velikog sigurnosnog propusta u php4, do toga teško mož doći, prvenstveno zbog kompatibilnosti loše napisanog php4 koda, koji iz ko zna kog razloga upravo koristi one gore felerične reference.&lt;/p&gt;
</description>
        <pubDate>Mon, 25 Aug 2003 13:39:00 +0200</pubDate>
        <link>https://blog.goranrakic.com/2003/08/trenutno_mrzim_php.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2003/08/trenutno_mrzim_php.html</guid>
 </item>
 
 <item>
       <title>php_network_getaddresses: getaddrinfo failed</title>
        <description>&lt;p&gt;Zašto menjati stvari koje rade? U php-u je lepo postojala “ipv4 only” gethostbyname funkcija, ali ne gospoda žele da budu u trendu i da podržavaju ipv6 i onda naprave internu funkciju getaddrinfo. Naravno nju koriste prvo u FTP funkcijama, onda i za mail() funkciju pa na kraju i za fsocket funkcije. Na kraju i staru gethostbyname implementaciju zamene sa novom. Pa šta, nije problem kome bi smetalo što podržavamo i ipv6…&lt;/p&gt;

&lt;p&gt;Trebalo bi nikom, ali to baš nije tako, jer… Jer nova implementacija ne operiše dinamički sa listom dns servera, i što je još gore interno kešira dns upite (zašto kada je po celoj Unix filozofiji namenjeno da mali alati rade usko ograničeni deo posla, pa zar keširanje nije u domenu dns servera?). I sada imate neke varijacije DynDNS hostova sa kojima morate da ostvarite vezu, jednostavno nakon promene IP adrese DNS-a php odbija da radi i daje grešku iz naslova.&lt;/p&gt;

&lt;p&gt;Drugo, sama promena /ec/resolv.conf datoteke uopšte ne utiče na php, jer po novoj implementaciji kada se voljeni ISAPI modul učita u Apache, php pročita datoteku i u “cilju smanjenja korišćenja resursa” to više ne radi dok god vi ne restartujete Apache.&lt;/p&gt;

&lt;p&gt;Naravno ovo ne možete nikako saznati čitajući php dokumentaciju, pa jedini spas dolazi sa Google-a. Očigledno tražim previše od “konektuj se na bazu, pomnoži vrednosti i prikaži ih” jezika.&lt;/p&gt;
</description>
        <pubDate>Sun, 31 Aug 2003 01:02:15 +0200</pubDate>
        <link>https://blog.goranrakic.com/2003/08/php_network_getaddresses_getaddrinfo_failed.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2003/08/php_network_getaddresses_getaddrinfo_failed.html</guid>
 </item>
 
 <item>
       <title>php programeri, mislite da znate php?</title>
        <description>&lt;p&gt;Mislili ste da samo Perl ima nezgodnu sintaksu? Pročitali ste php manual bezbroj puta i mislite da znate sve? E pa onda uradite test &lt;a href=&quot;http://www.blueshoes.org/en/developer/syntax_exam/&quot;&gt;BlueShoes PHP Syntax Exam&lt;/a&gt;. Ja sam radio do pola, i uglavnom je bilo, pa hm.. ok, ako ignorišemo potrebno vreme da uradim samo 1/2 testa. Mada je rezultat bio poprilično fin (bilo je više zelenih, nego crvenih ;) ).&lt;/p&gt;

&lt;p&gt;Hajde probajte, pa javite rezultate u komentarima. Samo nemojte da kliknete na link ispod ovoga u navigaciji na BlueShoes sajtu.&lt;/p&gt;
</description>
        <pubDate>Sun, 19 Oct 2003 16:41:49 +0200</pubDate>
        <link>https://blog.goranrakic.com/2003/10/php_programeri_mislite_da_znate_php.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2003/10/php_programeri_mislite_da_znate_php.html</guid>
 </item>
 
 <item>
       <title>(&quot;i18n&quot; &amp;&amp; &quot;l10n&quot;) WITH &quot;php&quot;</title>
        <description>&lt;p&gt;Pri izradi internet aplikacija pomoću jednog od najpopularnijeg za to namenjenog jezika - PHPa&lt;sup&gt;[1]&lt;/sup&gt;, često se susrećemo sa problemom lokalizacije same aplikacije.  Najčešće korišćeno rešenje, ujedno i najjednostavnije za realizaciju jeste korišćenje tako odomaćenih „lang datoteka“. Naime, u jednoj php datoteci definišemo niz elemenata (bilo imenovani ili ne) sa stringovima koje treba lokalizovati i onda umesto pisanja samog stringa u php kodu, koristimo indeks datog niza. Mana ovog pristupa jeste nepodržavanje za oblike množine (svaki moramo posebno definisati novim indeksom niza), nečitljivost koda, laka greška u zapisu samog niza…&lt;/p&gt;

&lt;p&gt;Drugi korak u lokalizaciji može biti pravljenje posebnih šablona za svaki jezik (pomoću Smarty sistema šablona ili ekvivalenta) gde bismo definisali sve jezički zavisne celine u samom šablonu. Međutim, prevođenje je dosta kompleksno jer ma koliko to mi želeli sami stringovi se mešaju sa jezikom za označavanje ili sa programskim delom šablona koji definiše oblike množine i slično.&lt;/p&gt;

&lt;p&gt;Ukoliko ste se ikada susreli sa &lt;a href=&quot;http://www.gnu.org/manual/gettext/index.html&quot;&gt;GNU gettext&lt;/a&gt; bibliotekom svakako ste primetili prednosti korišćenja iste. Laka ekstrakcija stringova iz php datoteka, očuvanje čitljivosti koda (u kodu ostaje string, uokviren _() funkcijom, a ne nekakav indeks nekog niza), stringovi za prevod su potpuno ekstraktovani a za samo prevođenje postoje razni alati. Sama gettext biblioteka podržava oblike množine, ukoliko neki string nije preveden ostaće u originalu, podržava dodavanja dinamičkih vrednosti unutar stringa (poput printf funkcije) i slično. Kako sam negde pročitao, ko jednom krene da radi sa gettext-om, uvek radi sa gettext-om.&lt;/p&gt;

&lt;p&gt;PHP poseduje &lt;a href=&quot;http://www.php.net/manual/ref.gettext.html&quot;&gt;podršku&lt;/a&gt; za gettext, ukoliko je kompajliran sa parametrom –with-gettext, što najčešće nije slučaj. Proverite phpinfo(), možda imate sreće. Ukoliko pak nemate sreće, možete prekompajlirati gettext za ciljni sistem i instalirati ga u CGI direktorijum, zatim učitati php modul preko funkcija za dinamičko učitavanje ili prekompajlirati ceo php i .htaccess-om podesiti izvršavanje. E sada, ni ovo najčešće zbog sigurnosnih podešavanja neće raditi. Zato je potrebno naći neku alternativu za gettext, koja ima mogućnosti gettext-a.&lt;/p&gt;

&lt;p&gt;Danilo Šegan je danas objavio &lt;a href=&quot;http://danilosegan.com/blog/ihatephp/php-and-gettext-playing-nicely&quot;&gt;PHP-Gettext biblioteku&lt;/a&gt; (i sam kaže da inventivniji u imenu nije mogao biti ;) ), koja podržava standardne GNU Gettext MO datoteke, koje se generišu iz PO datoteka. U samom paketu postoje i primeri koda, i README pa neću prenositi. Ono što može da zasmeta jeste brzina izvršavanja, ali za manje projekte to nije opasno.&lt;/p&gt;

&lt;p&gt;[1] PHP pročitano u ćirliličnom pismu (velikim slovima) označava skraćenicu od Radi-Ne-Radi. (&lt;a href=&quot;http://danilosegan.com/blog/&quot;&gt;Danilo Šegan&lt;/a&gt;)&lt;/p&gt;
</description>
        <pubDate>Thu, 23 Oct 2003 16:12:22 +0200</pubDate>
        <link>https://blog.goranrakic.com/2003/10/i18n_l10n_with_php.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2003/10/i18n_l10n_with_php.html</guid>
 </item>
 
 <item>
       <title>PHP Magazine u PDF formatu</title>
        <description>&lt;p&gt;Proslavljeni nemački časopis posevećen PHP-u - PHP Magazine već neko vreme ima &lt;a href=&quot;http://www.php-mag.net&quot;&gt;internacionalno izdanje&lt;/a&gt;. Ono što je interesantno je da će se od 15. decembra u njihovoj ponudi pored štampanog naći i elektronsko izdanje u PDF formatu. Takođe, ono što je jako lepo - prvo PDF izdanje će biti apsolutno bespaltno dok će kasnija cena mesečnog izdanja biti 5$ što uopšte nije strašno. (I znatno je manje od varijante papirnog izdanja sa uračunatim troškovima slanja i verovatnoćom da se “zagubi”).&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Kako će se ovaj potez odraziti na konkurentski časopis &lt;a href=&quot;http://www.phparch.com/&quot;&gt;php&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;arch&amp;lt;/a&amp;gt; koji je nastao kao primarno elektronski PDF časopis. Možda je ovo i reakcija na nedavni upad php&lt;/td&gt;
      &lt;td&gt;arch-a na štampano tržište, ili verovatnije čist ekonomski potez PHP Magazine-a.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;a href=&quot;http://www.php-mag.net/itr/service/show.php3?id=129&amp;amp;sesid=&amp;amp;_language=&amp;amp;_country=&amp;amp;nodeid=116&quot;&gt;Link na saopštenje PHP Magazine-a&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 08 Dec 2003 17:57:46 +0100</pubDate>
        <link>https://blog.goranrakic.com/2003/12/php_magazine_u_pdf_formatu.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2003/12/php_magazine_u_pdf_formatu.html</guid>
 </item>
 
 <item>
       <title>Iscedite brzinu iz PHP-a i još po neki tekst</title>
        <description>&lt;p&gt;&lt;img src=&quot;http://blog.goranrakic.com/uploads/php-med-trans.png&quot; alt=&quot;php&quot; float=&quot;right&quot; align=&quot;right&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; /&gt;Danas sam naleteo na fini tekstić (&lt;a href=&quot;http://phplens.com/phpeverywhere/?q=node/view/52&quot;&gt;Squeezing code with xdebug&lt;/a&gt;) o optimizaciji PHP koda. Prikazano je nekoliko interesantnih nazovimo ih “caka” kao i preporuka za upotrebu &lt;a href=&quot;http://xdebug.org/&quot;&gt;xdebug&lt;/a&gt; alata u profilisanju koda.&lt;/p&gt;

&lt;p&gt;Na primer, nisam proveravao ali mi ovo deluje jako interesantno:&lt;/p&gt;

&lt;p&gt;ob_start();
for ($i=0; $i &amp;lt; 10000; $i++) echo $i;
$s = ob_get_contents();
ob_end_flush();&lt;/p&gt;

&lt;p&gt;Takođe, izdvojio bih i zapažanje o brzini različitih funkcija na osnovu mesta njihove implementacije (u ZendEngine-u ili kasnije kroz ekstenziju). Za nove programere bitno je istaći i usporenje pri pozivu funkcije i koda koji je direktno napisan, usporenje pri pozivu funkcije sa nizom koji je prosleđen po referenci kao parametrom i funkcijom koja prima 10 različitih parametara itd.&lt;/p&gt;

&lt;p&gt;Neki bi rekli da PHP ne vredi takvih optimizacija jer se narušava čitljivost koda, a to inače nije jezik za projekte i okruženja gde ovakve optimizacije mogu značiti… Neću se izjasniti po tom pitanju, a ovakve “tekstiće” nije na odmet pročitati povremeno.&lt;/p&gt;

&lt;p&gt;Od interesante PHP literature izdvojio bih post na SitePoint-ovom PHP Blog-u: &lt;a href=&quot;http://www.sitepoint.com/blog-post-view.php?id=176388&quot;&gt;PHP Gotchas, part I&lt;/a&gt;. Ima dobrih stvari za zapamtiti, naročito oko magic_quote-a. Eh, da sam ovo čitao pre godinu dana ;).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Tu su i prezentacije sa Linuxtag-a:&lt;/b&gt;
1) Rasmus Lerdorf: &lt;a href=&quot;http://talks.php.net/show/xdebug-lt/&quot;&gt;Debugging PHP with Xdebug&lt;/a&gt;
2) Rasmus Lerdorf: &lt;a href=&quot;http://talks.php.net/show/lt2004-lamp&quot;&gt;Large scale PHP&lt;/a&gt;
3) (Obojena i ušarenjena) Tobias Schlitt i Stefan Neufeind: &lt;a href=&quot;http://www.schlitt.info/index.php/content.publications_linuxtag2004&quot;&gt;Pear an introduction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A na kraju ću preskočiti prenošenje vesti o tome da je Friendster prešao na PHP i napravio veliko ubrzanje u radu sistema jer ne mislim da je to zasluga PHP-a već onoga ko je pisao novi PHP kod, odnosno onoga ko je pisao stari tomcat/jsp kod ;)&lt;/p&gt;
</description>
        <pubDate>Wed, 30 Jun 2004 23:24:45 +0200</pubDate>
        <link>https://blog.goranrakic.com/2004/06/iscedite_brzinu_iz_phpa_i_jos_po_neki_tekst.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2004/06/iscedite_brzinu_iz_phpa_i_jos_po_neki_tekst.html</guid>
 </item>
 
 <item>
       <title>&quot;Svetski, a naše&quot; i sigurnost</title>
        <description>&lt;p&gt;Bila na brdovitom Balkanu jedna manje-više poznata, da je tako nazovemo, &lt;b&gt;aktivna&lt;/b&gt; web development agencija. Radiše vredno i marljivo - prosto rapidno!   I igrom slučaja dođoh ja do jednog njihovog projekta, da pogledam malo. Kliknu ovde kliknu onde, a sigurnosne rupe iskaču ne znaš koja veća od koje…&lt;/p&gt;

&lt;p&gt;Ništa, kažem ja pa dobro dešava se - igrala se deca, pa zaboravila ponešto. Obavestim ja njih telefonom, i posle nekoliko dana stigne odgovor “Sigurnost je u redu, lozinke su kriptovane”. Ko vidi samo odgovor, kaže u redu, ali u pitanju su se pominjale opasne stvari, one koje se pišu na vratima špajze kao upozorenje za malu decu. Prosto ne znaš koja je opasnija - izostavljanje basename()-a pre fopen() i readfile() funkcija, a ime datoteke HTTP GET parametar, iskljucen registar_globals, a prijava ne podesava kontrolnu varijablu na NULL ili FALSE pre toga, problemi sa magic_quotes itd.&lt;/p&gt;

&lt;p&gt;Bilo je tu i neobičnih, prosto smešnih stvari:&lt;/p&gt;
&lt;blockquote&gt;
&lt;b&gt;3) NEOBICNI PROBLEM PRI PRIJAVI KORISNIKA&lt;/b&gt;
                                                                                                                                                                                   
Kratkim uvidom, primetio sam drugacije ponasanje prijave ako se prijava pokusava pre 17h. Naime, za sada izgleda da prijava pre 17h uvek prolazi, svejedno od rezultata poziva login() metode klase admin, ako postoji vise od 3 neuspela pokusaja. Cudnim kodom u metodi kojim se umesto prebrojavaja neuspelih pokusaja u toku dana  proverava broj neuspelih pokusaja sa IP adrese sa koje se sada pokusava prijava na dan 26. aprila 2004. godine ovu gresku nije moguce iskoristiti, ali svakako brojanje pogresnih pokusaja treba ispraviti (izbaciti ili komentarisati red &quot;$date=&#39;2004-04-26&#39;;&quot; u classes/admin.php), a iskljuciti mogucnost prijave bez lozinke pre 17h.
&lt;/blockquote&gt;

&lt;p&gt;Ne znam ja, živim u zemlji koja je uglavnom izolovana od sveta, možda se tamo po Italiji gde dotična &lt;b&gt;aktivna&lt;/b&gt; agencija voli da radi ovakve stvari ne gledaju. Ono, korisnici su pošteni svet neće oni da menjaju adresu i da skinu ceo PHP izvorni kod kroz tamo neki sigurnosni “šta ti ja znam” propust… Ne znam, sve je moguće. Možda…&lt;/p&gt;

&lt;p&gt;A možda sam ja sve ovo sanjao, ličilo bi. Ipak ovaj par stranica dugačak mail sa odgovorom je u mom Drafts folderu, nešto neće da nestane ma koliko se ja ubadao viljuškom.&lt;/p&gt;
</description>
        <pubDate>Wed, 07 Jul 2004 20:13:21 +0200</pubDate>
        <link>https://blog.goranrakic.com/2004/07/svetski_a_nase_i_sigurnost.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2004/07/svetski_a_nase_i_sigurnost.html</guid>
 </item>
 
 <item>
       <title>Bacati Exception ili otkidati Error?</title>
        <description>Znam da se ovo tiče coding style-a, ali me zanima šta ostali učesnici foruma misle. Kao što verovatno većina vas zna, u PHP5 je (će biti) prisutan interfejs za izuzetke (exceptions).
&lt;br/&gt;&lt;br/&gt;
Ono što mene sada zanima jeste kada je poželjno koristiti ih? Njihovo izvršavanje je nešto malo sporije od klasičnih promena toka programa pomoću if/else i sličnih jezičkih konstrukcija. Takođe, moguće je čak i u PHP-u napravti memory leak preko istih.
&lt;br/&gt;&lt;br/&gt;
Sam izuzetak u PHP-u predstavlja objekat tako da može imati sve i svja od dodatnih informacija kao što su delovi backtrace-a.
&lt;br/&gt;&lt;br/&gt;
Moje je mišljenje da izuzecima treba kontrolisati greške koje nastaju usled obrade korisničkih parametara ili trenutnih grešaka u pristupu resursima, dok greške u kodu treba obrađivati kroz standardni trigger_error/error handler mehanizam. Pod greškama u kodu ne mislim samo na greške u kodu sistema jer toga ne bi trebalo biti već i na greške u čitanju i izvršavanju pojedinih modula, pristupu šablonima koji se pozivaju iz programa/modula i slično...
&lt;br/&gt;&lt;br/&gt;
Takođe zanimali bi me i predlozi mojih cenjenih čitalaca ;) o mogućnostima implementacije exceptions mehanizma u PHP4. Trebalo bi napraviti globalno drvo koje bi čuvalo podatke o izuzecima i prostor za jedan serijalizovani niz u kome bi se mogli sačuvati dodatni podaci ukoliko postoji potreba za tim. Dalje, potrebna je funkcija trow_exception koja bi postavljala status izuzetka na 1, kao i svih čvorova drveta od njega do vrha. Funkcija catch_exception bi proveravala da li je status 1, i ako jeste postavljala status od tog čvora naniže na 0 i vraćala TRUE, odnosno FALSE ako status nije 1. If konstrukcija oko catch_exception poziva bi imitirala try/catch konstrukciju u petici.
&lt;br/&gt;&lt;br/&gt;
I šta je onda problem? Pa problem je to što se onda ceo kod mora pisati odvojeno za verzije 4/5. Ovo nije nikakav problem za sistemske klase jer se one dosta menjaju inače (naročito one za rad sa modulima/objektima). Problem je šta u samim modulima gde bi se po mom viđenju izuzetaka oni mnogo više i koristili jer će većina grešaka u sistemskim klasama biti obrađena kroz klasičan error handler. Ono što bi bilo zgodno jeste pisanje nekog omotača za izuzetke koji u petici koristi njene jezičke kontrukcije, dok u četvorci koristi predloženu implementaciju. To je sa nekoliko eval-a koji su samo jedno slovo daleko od evil moguće za registrovanje izuzetaka i za bacanje istih, ali ja ne vidim način da to primenim na try/catch konstrukciju, tj. morao bi ceo try blok da bude pod eval-om, što je poprilično glupo jer komplikuje klasičan error handler dodavajući dodatne elemente u backtrace i verovatno (nisam testirao) dosta usporava rad. Rešenje koje mi sada pada na pamet bi ličilo na:
&lt;br/&gt;&lt;br/&gt;
&lt;pre&gt;
...
if(($sfw_phpversion &amp; SFW_PHP4)) {

  /* catch exception in PHP4 style via catch_exception function call */
  $this-&gt;add_code($code);
  if( catch_exception(&#39;ExcAddCompCode&#39;) ) {
	...
	...
  } 	
   	   	 
}
else {

  /* catch exception in PHP5 style */
  try {
	$this-&gt;add_code($code);
  }
  catch(ExcAddCompCode $e) {
	...
	...
  }	

}
&lt;/pre&gt;

&lt;br/&gt;&lt;br/&gt;
Ovo dodaje jako puno koda na inače nevoljno pisanu kontrolu grešaka i mora da postoji neko rešenje. Jedno je trivijalno, ne obrađivati PHP5 deo već zarad backward kompatibilnosti raditi samo na prvi način. Ono što se žrtvuje tako jesu neke napredne mogućnosti grupisanja/ponovnog bacanja/šta ti ja znam izuzetaka, a što bi ako bi se primenila gornja implementacija moglo uraditi u onom PHP5 specific delu koda. A možda treba potpuno zaboraviti na sve ovo i koristiti 
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Odakle inače sada ovo?&lt;/b&gt;
Radim sada na svom PHP framework-u (konverzija na PHP5, promena rada sa modulima/objektima, podrška za distribuirane objekte itd) i eto, priča o kontrolisanju grešaka je izbila ovih dana u prvi plan. Željno očekujem predloge onih koji se igraju duže vreme sa peticom od mene ili su izuzetke susretali u drugim jezicima...</description>
        <pubDate>Mon, 12 Jul 2004 19:59:24 +0200</pubDate>
        <link>https://blog.goranrakic.com/2004/07/bacati_exception_ili_otkidati_error.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2004/07/bacati_exception_ili_otkidati_error.html</guid>
 </item>
 
 <item>
       <title>Zend Studio, iskorišćen popust za studente</title>
        <description>&lt;p&gt;Danas sam, uz odobreni popust za studente kupio Zend Studio u aktuelnoj verziji 3.5 sa pravom na besplatnu nadogradnju na verziju 4.0 kada ista izađe iz beta programa. Zend Studio sam i ranije koristio u par navrata (Beta, Trial i slično) i utvrdio da se radi o jako kvalitetnom alatu koji značajno ubrzava rad, ali sam ipak kod evo do sada pisao koristeći raznorazne editore poput vi editora pa čak i Apple XCode razvojnog okruženja.&lt;/p&gt;

&lt;p&gt;Ipak kada sam video da Zend Studio mogu dobiti po ceni od 95$ (imajući u vidu da program inače košta 259$, ali i trenutni kurs dolara) morao sam isti kupiti. Radi se o popustu, dakle verzija je ista kao i Zend Studio Plus - jedino što treba jeste javiti se prodaji Zend-a. Mene nisu tražili nikakve potvrde i cela procedura bi bila poprilično brza da nije naših banaka, konkretno moje “The Bank of Vojvodina” tako da sam iako još juče pre podne uplatio novac na devizni račun tek danas mogao isti da potrošim. Samo me zanima kakav im je to informacioni sistem koji ima delay više od jednog dana za one-click transakciju sa jednog na drugi račun unutar banke.&lt;/p&gt;

&lt;center&gt;
&lt;img alt=&quot;zend.jpg&quot; src=&quot;http://blog.goranrakic.com/uploads/zend.jpg&quot; width=&quot;460&quot; height=&quot;198&quot; /&gt;
&lt;/center&gt;
</description>
        <pubDate>Sat, 22 Jan 2005 17:04:57 +0100</pubDate>
        <link>https://blog.goranrakic.com/2005/01/zend_studio_iskoriscen_popust_za_studente.html</link>
        <guid isPermaLink="true">https://blog.goranrakic.com/2005/01/zend_studio_iskoriscen_popust_za_studente.html</guid>
 </item>
 
  </channel>
</rss>
