<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Moja škrabalica (php)</title>
<link>http://blog.goranrakic.com/archives/php.html</link>
<description>Goran Rakić - blogče ili weblog, unosi iz kategorije php</description>
<dc:language>en-us</dc:language>
<dc:creator>Goran</dc:creator>
<dc:date>2005-10-24T01:19:32+01:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.35" />
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>

<item>
<title>phpDocumentor problem</title>
<link>http://blog.goranrakic.com/archives/2005/10/phpdocumentor_problem.html</link>
<description>Iako sjajan alat (ako ga ne koristite, pravac na www.phpdoc.org za više informacija) upravo sam naleteo na problem koji ne znam kako da elegantno rešim. Naime, u projektu na kojem sada radim postoji par klasa koje implementiraju singleton pattern. Kao...</description>
<guid isPermaLink="false">102@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Iako sjajan alat (ako ga ne koristite, pravac na <a href="http://www.phpdoc.org/">www.phpdoc.org</a> za više informacija) upravo sam naleteo na problem koji ne znam kako da elegantno rešim.</p>

<p>Naime, u projektu na kojem sada radim postoji par klasa koje implementiraju singleton pattern. Kao što verovatno znate, tada se umesto konstruktora klase za dobijanje objekta poziva jedan static metod klase.</p>

<p>Zavisno od nekih parametara, u kod hoću da uvedem jednu od dve različite implementacije klase koje se samo neznatno razlikuju. Logično, napraviću jednu abstract klasu i iz nje izvesti dve različite klase koje imaju potrebne razlike u odnosu na baznu klasu.</p>

<p>Pošto sada imam dve različite klase koje implementiraju singleton pattern to znači da je i sintaksa njihove konstrukcije različita. Ja hoću da na početku koda očitam parametre poziva, odlučim se za jednu od dve varijante i onda da ih onda koristim na jedinstven način. Razmišljam dalje i pomislim da zavisno od parametara mogu da učitam datoteku sa tačno jednom implementacijom tako da uvek pri izvršavanju imam u kod uključenu baznu klasu i samo jednu njenu naslednicu. Onda mogu da iskoristim isto ime za obe varijacije (pošto se u kodu pojavljuje uvek samo jedan slučaj pri svakom izvršavanju) i da imam isti pristup nevezan od varijacije koju sam učitao.</p>

<p>Međutim, tu dolazi problem sa phpDocumentor-om. Svaka klasa ima drugu @subpackage oznaku, čak sam probao da uvedem i @name oznaku sa različitim vrednostima ali to ne vredi. On uvek prijavi:<br />
<quote><br />
WARNING: <br />
duplicate class element "db" in file appserver/_core/db_normal.class.php will be ignored.<br />
Use an @ignore tag on the original if you want this case to be documented.<br />
</quote></p>

<p>Ja sada mogu da ga poslušam i prvo generišem dokumentaciju, onda postavim @ignore nad prvom klasom, i zatim ponovo generišem dokumentaciju. Pošto su klase u različitim podpaketima njihova dokumentacija se nalazi u različitim direktorijumima tako da neće doći do prepisivanja, a meni ostaje da na kraju ručno izmenim listu svih klasa i dodam link ka prvoj klasi. Očigledno, ovo nije elegantno rešenje, a još gore je problem rešiti pri egzotičnijim opcijama izvoza dokumentacije.</p>

<p>Ukoliko se ne setim nekog dobrog razloga zašto phpDocumentor treba da ignoriše klase istog imena koje se nalaze u različitim paketima, sutra ću poslati Bug Report. Naravno, ako je neko naleteo na sličan problem neka slobodno kaže rešenje pošto je sigurno bolje od ovoga što sada radim.</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2005-10-24T01:19:32+01:00</dc:date>
</item>
<item>
<title>Sigurno kodiranje u PHP-u</title>
<link>http://blog.goranrakic.com/archives/2005/03/sigurno_kodiranje_u_phpu.html</link>
<description>Prateći neke blogove i mailing liste stekao sam utisak da je od početka ove godine u PHP zajednici ukazivanje na probleme sigurnosti u PHP skriptovima mnogo obimnije nego ranije. PHP je jezik koji dozvoljava &quot;prljavo&quot; kodiranje - jednostavnim pozivima neke...</description>
<guid isPermaLink="false">89@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Prateći neke blogove i mailing liste stekao sam utisak da je od početka ove godine u PHP zajednici  ukazivanje na probleme sigurnosti u PHP skriptovima mnogo obimnije nego ranije. PHP je jezik koji dozvoljava "prljavo" kodiranje - jednostavnim pozivima neke od gomile ugrađenih funkcija lako je napraviti kod koji odrađuje posao. Međutim, PHP programeri često zaboravljaju na osnovne principe sigurnosti pri pisanju koda tako da je dizajn mnogih od najpopularnijih PHP sistema (<em>čitaj phpBB</em>) potpuno promašen što se sigurnosti tiče.</p>

<p>Ali kao što rekoh, pritisnuti sve većom prijavom problema u popularnim sistemima, PHP ekipa je morala da se zaštiti i da jasno stavi do znanja da problem nije do PHP-a nego do samog koda koji je u njemu napisan (kao što greške u Linux-u nisu problem C-a, već...). U skladu sa tim sada već postoji gomila literature, tekstova, tutoriala koji ukazuju na najšesže probleme vezane za sigurnost PHP aplikacija. Sledi lista sa komentarima:</p>

<p>Obavezno pogledajte da li Vaš kod ne sadrži <b>10 najčešćih grešaka</b> objavljenih na <a href="http://www.sklar.com/page/article/owasp-top-ten">ovom spisku</a>. Lista sadrži ponuđena rešenja za otklanjanje Top10 sigurnosnih grešaka u web aplikacijama, a koje su objavili ljudi koji stoje iza <a href="http://www.owasp.org/">OWASP-a</a>.</p>

<p>Dalje, tekstove koje je za Security Corner rubriku php|arch magazina napisao Chris Shiflett, mozete pogledati na <a href="http://shiflett.org">njegovom sajtu/blogu</a>. Tu ima raznoraznih stvari - od sigurnosti u shared hosting okruzenju, preko validacije ulaznih podataka, rešenja protiv Cross-Site Scripting napada i slično. Obavezno pogledati. Naravno, i sam blog je super! Stoji da treba pogledati i PDF dokument istog autora sa prošlogodišnjeg ApacheCon-a. Dokument u PDF formatu se nalazi <a href="http://shiflett.org/php-security.pdf">ovde</a>.</p>

<p>Dalje, nedavni problem koji se pojavio sa phpBB-om (da nije i Vaš kod ugrožen?) je problem implementacije stalnog logina preko kolačića - nešto što postoji na skoro svakoj lokaciji koja sadrži nekakav login. Dakle, pravac na čitanje <a href="http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice">unosa koji je za svoj blog</a> sastavio Charles Miller. </p>

<p>Slajdovi sa PHP izlaganja koja su bila posvećena sigurnosti - naravno na <a href="http://talks.php.net/index.php/Security">talks.php.net</a>. Manje više opet iste stvari - ali u tome i jeste kvaka. Uvek se pojavljuju manje više iste stvari.</p>

<p><a href="http://www.unixwiz.net/techtips/sql-injection.html">Detaljno o SQL Injection-u</a>. Ovo je nešto čega većina programera koji u kodu napišu "SELECT * FROM users WHERE name='$name'" nisu ni svesni. Pogledajte i prateće resurse na koje je ukazano u tekstu.</p>

<p>Jedna od stvari koje su pokrenute na početku ove godine je i http://phpsec.org ili "PHP Security Consortium". Njihovo delo je fenomenalan i obiman dokument <a href="http://phpsec.org/projects/guide/">"PHP Security Guide"</a>. Valja ga pročitati, ako ne to onda makar proleteti kroz primere.</p>

<p>Naravno na kraju - ono odakle treba i početi: <a href="http://www.php.net/manual/en/security.php">Security sekcija PHP Manual-a</a>.</p>

<p><b>Za nove informacije prijavite se na phpsec listu</b> koju je pokrenuo Marco Tabini (php|arch, za one koji nisu upoznati) - adresa je <a href="http://www.phparch.com/phpsec/">http://www.phparch.com/phpsec/</a>. Na listi aktivno učestvuje gomila poznatih ljudi iz PHP zajednice, a pored obaveštenja o pronađenim greškama, na listi se redovno vode i raznorazne diskusije. Obim liste nije veliki, tako da ne iziskuje puno vremena i ima uglavnom dobar signal/noise odnos. (mada se ponekad dogodi flame na neku od tema, pa onda je neophodno malo proširiti filtere u omiljenom programu za prijem pošte)</p>

<p><br />
<b>Pozdrav, i sigurno kodiranje!</b></p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2005-03-10T23:23:54+01:00</dc:date>
</item>
<item>
<title>XMLHTTPRequest, u cross-browser varijanti</title>
<link>http://blog.goranrakic.com/archives/2005/02/xmlhttprequest_u_crossbrowser_varijanti.html</link>
<description>Bogati korisnički interfejs u Web aplikacijama je postala normalna stvar koju korisnici očekuju. Pogledajte samo najnovije Google servise (Gmail, Google News 2, Google Suggest, Google Maps,...) i sve će vam biti jasno. Upkros i dalje prisutnim razlikama između različitih browsera...</description>
<guid isPermaLink="false">85@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Bogati korisnički interfejs u Web aplikacijama je postala normalna stvar koju korisnici očekuju. Pogledajte samo najnovije Google servise (Gmail, Google News 2, Google Suggest, Google Maps,...) i sve će vam biti jasno.</p>

<p>Upkros i dalje prisutnim razlikama između različitih browsera (da ne pričam o eventualnoj podršci za starije browsere) ipak mi se čini da je danas ovakve stvari mnogo lakše raditi danas nego ranije. XHTML za označavanje, CSS za ulešavanje i JavaScript uz pomoć koga se dobija korisniji interfejs, lakši za korišćenje. Nisam pristalica šljaštećih, letećih i kakvih sve ne JavaScript animacija ali pristup DOM-u je itekako korisan kada treba povezati malo komplikovanije formulare, rešiti se višestrukih izbora i slično.</p>

<p>Pojam Gmail-a, zaintersovao sam se za još jednu stvarčicu - XMLHTTPRequest, mogućost da bez ponovnog učitavanja cele stranice pošaljete HTTP POST ili GET zahtev i kao odgovor dobijete komad XML-a koje onda parsirate DOM-om ubacite na pravo mesto. Sve je mnogo čistije nego igranje sa gomilom IFRAME-ova što je jedna od alternativa.</p>

<p>Implementaciju XMLHTTPRequest-a je započeo Microsoft u Internet Exploreru kao posebna ActiveX kontrola, a zatim je sa sličnom sintaksom implementiran i kao objekat u Mozilla-inom Gecko engine-u. Problem je - ovo nikako ne radi u Operi. Opera u verziji 7.6 bi trebalo da sadrži implementaciju, ali opet mnogi su naučili na ovaj browser i izostavljanje podrške je nezgodno ako softver nije u nekakvoj beta fazi (poput Gmail-a).</p>

<p>Ipak, na <a href="http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/">ovoj adresi</a> je moguće pronaći implementaciju namenjenu Operi, sa poprilično velikim restrikcijama, ali opet čistije nego da se radi o IFRAME-ovima. Pomenuti kod Andrew Gregory-ja koristi Java plugin i njene Input/Output funkcije kako bi komunicirao sa web serverom bez osvežavanja same stranice.</p>

<p>Kod sam neznatno modifikovao kako bih dodao podršku za UTF8 kodnu stranicu (iako još uvek postoje problemi sa Apple Safari browserom, koji ima neispravnu implementaciju XMLHTTPRequest-a i bezobzira na postavljenu kodnu stranicu, rezultat prima u ISO-8859-1 rasporedu) i upakovao sve u demo koji se nalazi na adresi: <b><a href="http://www.goranrakic.com/tmp/xmlhttprequest/demo.php">http://www.goranrakic.com/tmp/xmlhttprequest/demo.php</a></b>. Voleo bih da primim što više različitih bug reporta, kao i ideje kako da rešim problem sa Safarijem na najoptimalniji način. </p>

<p>Kao što i na stranici samog demo-a stoji, najveći problem je što uprkos XMLHTTPRequest-a, ne dobijate ni X od XML-a jer implementacija za Operu ne sadrzi responseXML objekat. Što se mene tiče dok jednoga dana svi korisnici ne pređu na odlični <a href="http://www.spreadfirefox.com/">Mozilla Firefox</a> ja sam zadovoljan i sa PlainTextHTTPRequest-om.</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2005-02-27T23:44:20+01:00</dc:date>
</item>
<item>
<title>Zend Studio 4.0</title>
<link>http://blog.goranrakic.com/archives/2005/02/zend_studio_40.html</link>
<description>Danas je ekipa programera iz Zenda objavila novu verziju Zend Studija. Iako je beta vec poduže bila dostupna, nedostajala je verzija za MacOSX tako da nisam mogao ranije isprobati nove mogućnosti. Najkorisnije je integracija SQL managera u sam Zend Studio...</description>
<guid isPermaLink="false">84@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Danas je ekipa programera iz Zenda objavila novu verziju Zend Studija. Iako je beta vec poduže bila dostupna, nedostajala je verzija za MacOSX tako da nisam mogao ranije isprobati nove mogućnosti. Najkorisnije je integracija SQL managera u sam Zend Studio što se može pokazati kao jako korisno (počev od situacije kada treba na brzinu pregledati strukturu tabele koja je prikazana kao tree view kontrola u samom interfejsu, pa do testiranja upita). Videću do koje mere prisustvo ove opcije u samom IDE-u može zameniti eksterni phpMyAdmin + mysal klijent u terminalu što je način kako sam do sada radio. Brze upite i pretrage sam radio u terminalu, dok sam unos vršio kroz phpMyAdmin.</p>

<p>Druga korisna opcija jeste integracija <a href="http://www.phpdoc.org/">phpDocumentator-a</a> u samo okruženje. Iako je postojala i ranije podrška u vidu prikaza opisa funkcije i povratnih vrednosti prilikom aktiviranja Code Completion prozorčeta tek sada je moguće jednim klikom napraviti dokumentaciju, plus celokupna izrada konfiguracione datoteke je pokrivena grafičkim interfejsom.</p>

<p>Ove opcije su lepo dodate na neupadljiv način u interfejs tako da po prvom pokretanju Zend Studio izgleda manje-više kao i do sada (sa po kojim dugmencetom više). Na kraju, čini mi se da je program čak i malo brži nego prethodna verzija, ali ne bih smeo to baš 100% tvrditi.</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2005-02-24T21:27:23+01:00</dc:date>
</item>
<item>
<title>Ja mnogo, baš mnogo volim XML-RPC</title>
<link>http://blog.goranrakic.com/archives/2005/02/ja_mnogo_bas_mnogo_volim_xmlrpc.html</link>
<description> Potrudiću se da eto uskoro i napišem poneki tekstić o mogućnostima koje XML-RPC pruža programeru kada je potrebno kreirati i povezati jedno distribuirano web rešenje sa offline komponentama. Koji god jezik da koriste, ideja XML-RPC-a jeste da se klijent...</description>
<guid isPermaLink="false">82@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<center>
<img alt="xml-rpc.png" src="http://blog.goranrakic.com/archives/slike/xml-rpc.png" width="600" height="159" />
</center>

<p>Potrudiću se da eto uskoro i napišem poneki tekstić o mogućnostima koje XML-RPC pruža programeru kada je potrebno kreirati i povezati jedno distribuirano web rešenje sa offline komponentama. Koji god jezik da koriste, ideja <b>XML-RPC</b>-a jeste da se klijent može jednostavno implementirati u par redova, a pri pisanju server komponente (ili server komponenti) nije mnogo teže. Upotrebom standardizovanih rešenja, programer može obratiti pažnju na sam problem koji je potrebno rešiti, ne gubeći vreme na implementaciju mehanizma komunikacija između komponenti. Plus, ništa ne sprečava treća lica da implementiraju sa sistemom kompatibilne komponente. Jako je lep osećaj kada je umesto detaljnih objašnjenja nekog protokola, opisa struktura koje je potrebno preneti i slično dovoljno nekome poslati link ka XML-RPC serveru koji sam sadrži opise i dokumentaciju za svaku metodu koju implementira. Uz još nekoliko primera, dosadno pisanje dokumentacije se može zaboraviti. </p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2005-02-15T20:46:28+01:00</dc:date>
</item>
<item>
<title>Zend Studio, iskorišćen popust za studente</title>
<link>http://blog.goranrakic.com/archives/2005/01/zend_studio_iskoriscen_popust_za_studente.html</link>
<description>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...</description>
<guid isPermaLink="false">77@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>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.</p>

<p>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.</p>

<center>
<img alt="zend.jpg" src="http://blog.goranrakic.com/archives/slike/zend.jpg" width="460" height="198" />
</center>
]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2005-01-22T17:04:57+01:00</dc:date>
</item>
<item>
<title>php5.0.0</title>
<link>http://blog.goranrakic.com/archives/2004/07/php500.html</link>
<description><![CDATA[ &nbsp;...]]></description>
<guid isPermaLink="false">58@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p><br />
<center><br />
<a href="http://www.php.net/downloads.php#v5"><img alt="php-version5.gif" src="http://blog.goranrakic.com/archives/slike/php-version5.gif" width="100" height="64" border="0" /></a><br />
</center></p>

<p>&nbsp;</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2004-07-14T17:12:33+01:00</dc:date>
</item>
<item>
<title>patterns, simulacije i obavijanje - lični podsetnik</title>
<link>http://blog.goranrakic.com/archives/2004/07/patterns_simulacije_i_obavijanje_licni_podsetnik.html</link>
<description>Ovaj unos ću sebično prisvojiti za sebe - tj. pretvoriću ga u podsetnik sa par linkova. Naravno niko (ništa) vas ne sprečava da ih posetite ;) The Command Pattern The Factory Method PHP Static Class Variables PHP5 concepts in PHP4:...</description>
<guid isPermaLink="false">57@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Ovaj unos ću sebično prisvojiti za sebe - tj. pretvoriću ga u podsetnik sa par linkova. Naravno niko (ništa) vas ne sprečava da ih posetite ;)</p>

<p><a href="http://www.phppatterns.com/index.php/article/articleview/96/1/1/">The Command Pattern</a><br />
<a href="http://www.phppatterns.com/index.php/article/articleview/49/1/1/">The Factory Method</a><br />
<a href="http://www.webkreator.com/php/techniques/php-static-class-variables.html">PHP Static Class Variables</a><br />
<a href="http://www.sitepoint.com/forums/showthread.php?threadid=125263">PHP5 concepts in PHP4: interface, abstract, final and Singelton - my approach</a></p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2004-07-13T21:30:33+01:00</dc:date>
</item>
<item>
<title>Bacati Exception ili otkidati Error?</title>
<link>http://blog.goranrakic.com/archives/2004/07/bacati_exception_ili_otkidati_error.html</link>
<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). Ono što mene sada zanima jeste kada je poželjno...</description>
<guid isPermaLink="false">56@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[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).
<br/><br/>
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.
<br/><br/>
Sam izuzetak u PHP-u predstavlja objekat tako da može imati sve i svja od dodatnih informacija kao što su delovi backtrace-a.
<br/><br/>
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...
<br/><br/>
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.
<br/><br/>
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:
<br/><br/>
<pre>
...
if(($sfw_phpversion & SFW_PHP4)) {

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

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

}
</pre>

<br/><br/>
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 
<br/><br/>
<b>Odakle inače sada ovo?</b>
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...]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2004-07-12T19:59:24+01:00</dc:date>
</item>
<item>
<title>&quot;Svetski, a naše&quot; i sigurnost</title>
<link>http://blog.goranrakic.com/archives/2004/07/svetski_a_nase_i_sigurnost.html</link>
<description>Bila na brdovitom Balkanu jedna manje-više poznata, da je tako nazovemo, aktivna 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...</description>
<guid isPermaLink="false">54@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Bila na brdovitom Balkanu jedna manje-više poznata, da je tako nazovemo, <b>aktivna</b> 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... </p>

<p>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.</p>

<p>Bilo je tu i neobičnih, prosto smešnih stvari:<br />
<blockquote><br />
<b>3) NEOBICNI PROBLEM PRI PRIJAVI KORISNIKA</b><br />
                                                                                                                                                                                   <br />
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 "$date='2004-04-26';" u classes/admin.php), a iskljuciti mogucnost prijave bez lozinke pre 17h.<br />
</blockquote></p>

<p>Ne znam ja, živim u zemlji koja je uglavnom izolovana od sveta, možda se tamo po Italiji gde dotična <b>aktivna</b> 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...</p>

<p>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.</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2004-07-07T20:13:21+01:00</dc:date>
</item>
<item>
<title>Iscedite brzinu iz PHP-a i još po neki tekst</title>
<link>http://blog.goranrakic.com/archives/2004/06/iscedite_brzinu_iz_phpa_i_jos_po_neki_tekst.html</link>
<description>Danas sam naleteo na fini tekstić (Squeezing code with xdebug) o optimizaciji PHP koda. Prikazano je nekoliko interesantnih nazovimo ih &quot;caka&quot; kao i preporuka za upotrebu xdebug alata u profilisanju koda. Na primer, nisam proveravao ali mi ovo deluje jako...</description>
<guid isPermaLink="false">53@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p><img src="http://blog.goranrakic.com/archives/slike/php-med-trans.png" alt="php" float="right" align="right" hspace="10" vspace="10"/>Danas sam naleteo na fini tekstić (<a href="http://phplens.com/phpeverywhere/?q=node/view/52">Squeezing code with xdebug</a>) o optimizaciji PHP koda. Prikazano je nekoliko interesantnih nazovimo ih "caka" kao i preporuka za upotrebu <a href="http://xdebug.org/">xdebug</a> alata u profilisanju koda.</p>

<p>Na primer, nisam proveravao ali mi ovo deluje jako interesantno:</p>

<p>ob_start();<br />
for ($i=0; $i < 10000; $i++) echo $i;<br />
$s = ob_get_contents();<br />
ob_end_flush();</p>

<p>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.</p>

<p>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.</p>

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

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

<p>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 ;)<br />
 </p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2004-06-30T23:24:45+01:00</dc:date>
</item>
<item>
<title>PHP5 u maju</title>
<link>http://blog.goranrakic.com/archives/2004/02/php5_u_maju.html</link>
<description>Iako nezvanično, nakon Andijeve poruke svi se slažu da PHP5, sa svojim ZendEngine2 (OOP, yeah) dolazi u maju ove godine. A ako ne verujete meni, evo dokaza tačno ovde. Iako se još od prve bete na netu mogu pronaći raznorazna...</description>
<guid isPermaLink="false">29@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p><img align="right" alt="php-med-trans.png" src="http://blog.goranrakic.com/archives/slike/php-med-trans.png" width="95" height="51" border="0" />Iako nezvanično, nakon Andijeve poruke svi se slažu da PHP5, sa svojim ZendEngine2 (OOP, yeah) dolazi u maju ove godine. A ako ne verujete meni, evo dokaza <a href="http://marc.theaimsgroup.com/?l=php-cvs&m=107752000920056&w=2">tačno ovde</a>.</p>

<p>Iako se još od prve bete na netu mogu pronaći raznorazna uputsva i vodiči za migraciju koda na novu verziju PHP-a. (Na Zend-u postoji sjajna grupa članaka - <a href="http://www.zend.com/zend/future.php">ovde</a> i <a href="http://zend.com/zend/php5/">ovde</a> ali i <a href="http://www.zend.com/php/ask_experts.php">ovde</a>) Međutim, sada i zvanično, na logičnom mestu postoji uputstvo za migraciju. Normalno, reč je o <a href="http://docs.php.net/en/migration5.html">PHP dokumentaciji</a>. Treba imati u vidu da PHP5 još nije zamrznut, pa se tako mogu očekivati promene. Na primer, iako u uputstvu trenutno piše drugačije Andi kaže da ukoliko se ne koriste nove mogućnosti objektnog modela, nije neophodno deklarisati klase pre korišćenja. Sada, što je to sasvim normalno uraditi i većina koda to već poštuje to je druga priča.</p>

<p>Po testovima RC4 je u klasičnim operacijama brži od PHP4, baš onako kako je i najavljeno. Sada još da se još malo sve sredi, očisti memory leak na koji se tu i tamo pojavljuju žalbe (naravno, ovo nije stvar koja se rešava u sat vremena, ali tri meseca je pred PHP ekipom) pa da onda PHP5 izađe, i da svi počnemo da koristimo nove mogućnosti.</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2004-02-24T19:41:05+01:00</dc:date>
</item>
<item>
<title>PHP Magazine u PDF formatu</title>
<link>http://blog.goranrakic.com/archives/2003/12/php_magazine_u_pdf_formatu.html</link>
<description>Proslavljeni nemački časopis posevećen PHP-u - PHP Magazine već neko vreme ima internacionalno izdanje. 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...</description>
<guid isPermaLink="false">20@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Proslavljeni nemački časopis posevećen PHP-u - PHP Magazine već neko vreme ima <a href="http://www.php-mag.net">internacionalno izdanje</a>. 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").</p>

<p>Kako će se ovaj potez odraziti na konkurentski časopis <a href="http://www.phparch.com/">php|arch</a> koji je nastao kao primarno elektronski PDF časopis. Možda je ovo i reakcija na nedavni upad php|arch-a na štampano tržište, ili verovatnije čist ekonomski potez PHP Magazine-a.</p>

<p><a href="http://www.php-mag.net/itr/service/show.php3?id=129&sesid=&_language=&_country=&nodeid=116">Link na saopštenje PHP Magazine-a</a>. </p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2003-12-08T17:57:46+01:00</dc:date>
</item>
<item>
<title>(&quot;i18n&quot; &amp;&amp; &quot;l10n&quot;) WITH &quot;php&quot;</title>
<link>http://blog.goranrakic.com/archives/2003/10/i18n_l10n_with_php.html</link>
<description>Pri izradi internet aplikacija pomoću jednog od najpopularnijeg za to namenjenog jezika - PHPa[1], č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...</description>
<guid isPermaLink="false">14@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>Pri izradi internet aplikacija pomoću jednog od najpopularnijeg za to namenjenog jezika - PHPa<sup>[1]</sup>, č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...</p>

<p>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.</p>

<p>Ukoliko ste se ikada susreli sa <a href="http://www.gnu.org/manual/gettext/index.html">GNU gettext</a> 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.</p>

<p>PHP poseduje <a href="http://www.php.net/manual/ref.gettext.html">podršku</a> 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.</p>

<p>Danilo Šegan je danas objavio <a href="http://danilosegan.com/blog/ihatephp/php-and-gettext-playing-nicely">PHP-Gettext biblioteku</a> (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.</p>

<p>[1] PHP pročitano u ćirliličnom pismu (velikim slovima) označava skraćenicu od Radi-Ne-Radi. (<a href="http://danilosegan.com/blog/">Danilo Šegan</a>)</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2003-10-23T16:12:22+01:00</dc:date>
</item>
<item>
<title>php programeri, mislite da znate php?</title>
<link>http://blog.goranrakic.com/archives/2003/10/php_programeri_mislite_da_znate_php.html</link>
<description>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 BlueShoes PHP Syntax Exam. Ja sam radio do pola, i uglavnom je bilo, pa hm.. ok,...</description>
<guid isPermaLink="false">12@http://blog.goranrakic.com/</guid>
<content:encoded>
<![CDATA[<p>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 <a href="http://www.blueshoes.org/en/developer/syntax_exam/">BlueShoes PHP Syntax Exam</a>. 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 ;) ).</p>

<p>Hajde probajte, pa javite rezultate u komentarima. Samo nemojte da kliknete na link ispod ovoga u navigaciji na BlueShoes sajtu.</p>]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2003-10-19T16:41:49+01:00</dc:date>
</item>


</channel>
</rss>