Avgust 2007 (10)
September 2007 (4)
Oktober 2007 (9)
November 2007 (5)
December 2007 (34)
Januar 2008 (14)
Februar 2008 (15)
Marec 2008 (17)
April 2008 (17)
Maj 2008 (17)
Junij 2008 (15)
Julij 2008 (18)
Avgust 2008 (19)
September 2008 (14)
Oktober 2008 (14)
November 2008 (16)
December 2008 (13)
Januar 2009 (12)
Februar 2009 (9)
Marec 2009 (8)
April 2009 (9)
Maj 2009 (14)
Junij 2009 (5)
Julij 2009 (7)
Avgust 2009 (7)
September 2009 (4)
Oktober 2009 (8)
November 2009 (6)
December 2009 (8)
Januar 2010 (9)
Februar 2010 (7)
Marec 2010 (5)
April 2010 (4)
Maj 2010 (4)
Junij 2010 (6)
Julij 2010 (2)
Avgust 2010 (0)
September 2010 (1)
Jaz, jaz in jaz. (106)B(r)logrola
Coding (69)
Neumnosti (49)
Lajf vglavnem (72)
TravianWAP (22)
Web Sec (2)
Brez kategorije (124)
Skrivnostnežev blog
Svizec blog
Klemnov blog
Saj šola sploh ne dela skrbi ... eeeeh, sploh ne ...
Samo ju3 popravljam kemijo, jst pa ne vem nič 
OK, torej ... O čem bomo tukaj govorili? O zamenjavi PHP-jevih APIjev v userland kodi z svojimi. Nekatere bo mogoče malce zmedel izraz "userland". Naj povem, da se vse kar se dogaja v naši PHP kodi dogaja v userland. Ves handling API-jev (npr kot preprosti fopen()) se nato izvedere preko PHP ektenzij.
Potrebujete pa:
- Znanje PHP-ja, ki je malce več od <?="Hello world!");?>
- APT (Advanced PHP debugger) ekstenzija inštalirana
Torej... Zakaj bi mi sploh hoteli menjati PHP apije z svojimi ? Naj dam preprosti primer. Recimo da želimo meriti koliko časa se izvaja določen SQL query... Kako bi lahko to rešlili? Lahko napišemo lastno PHP funkcijo, preko katere bomo izvajali querije in nato merili koliko časa bo trajal vsak query. Ampak: to bi pomenilo, da moramo prepisati celotno PHP aplikacijo, kar zahteva... VELIKO dela...
Lahko pa zamenjamo PHP-jev API (mysql_query() v tem primeru) z lastnim. Torej, ko bo koda klicala mysql_query() ne bo klic šel do mysql ekstenzije, temveč se bo zgubil nekje v naši kodi (če bo kasneje šel do ekstenzije, je odvisno od nas). Kolikor vemo že definiranih funkcij ne moremo kar tako redefinirati z preprostim function mysql_query($string) { blah(); } (PHP vrže fatal error).
Zdaj pa lepo odprimo php.net in si v dokumentaciji oglejmo funkcijo rename_function(). Torej, ta funkcija preimenuje našo funkcijo v nekaj drugega. Ampak...
Še vedno, kako prepisat funkcijo? Preprosto. Najprej definiramo funkcijo ki bo prevzela vlogo mysql_query(). Nato pa preko rename_function() najprej preimenujemo mysql_query() v nekaj drugega, tisto našo definirano funckijo pa v mysql_query().
Naj prikažem na primeru kode... Vsak klic funkcije bo zabeležil koliko časa traja določen query: <?php
$__queriji = array();
function __mysql_query($query)
{
global $__queriji;
$stime = microtime(True);
// Kličemo preimenovan PHP API.
$result = mysql_query_ren($query);
$time = microtime(True) - $stime;
// Blabla... Saj vete za kaj se gre tule
$__queriji[] = array($query, $time);
// Vrnemo rezultat klica PHP apija
return $result;
}
// Začnimo z zamenjavo... Najprej zamenjajmo ime PHP API-ja.
// Bodite pozorni da se v prej definirani funkciji nato klice preimenovana
// funkcija (preimenovan PHP api ki gre do ekstenzije)
rename_function("mysql_query", "mysql_query_ren");
// Zdaj pa zamenjamo ime naše userland funkcije z imenom, prej preimenovanega
// API-ja
rename_function("__mysql_query", "mysql_query");
/**
* Naša koda
* blablabla...
**/
// POMEMBNO! Funckije je treba vrinti nazaj v prejšnjo stanje po koncu izvajanja
// kode.
rename_function("mysql_query", "__mysql_query");
rename_function("mysql_query_ren", "mysql_query");
// Vžremo ven rezultate
print_r($__queriji);
?>
Torej, čudili se boste ... ZAKAJ hudiča, moremo vrniti imena API-jev v originalno stanje? Torej ... Če je PHP naložen kot Apache module (in ne kot CGI modul) se bodo zamenjana imena uporabila tudi v naslednjem zagonu te ali druge skripte. Torej, če nebi spucali bi ob naslednji izvedbi funkcija mysql_connect() nebi bila več na mestu, temveč bi obstajala samo mysql_query_ren()... Ker pa funkcija mysql_connect() nebi bila nikjer definirana (predvidevamo da se izvede drugi fajl) bi nam takoj ob poskusu dobit karkol iz baze PHP lepo dal nazaj fatal error (klic nedefinirane funkcije).
Tu se pa stvari malce začnejo komplicirati... Kaj če smo preimenovali funkcijo, medtem nam pa PHP vrže fatal error (zaradi tega ali drugega razloga). Kaj potem? Funkcije so še vedno preimenovane. Zato moramo v kodo implementirati neki fail-safe mehanizem, ki bo ob ponovnem zagonu preveril, v kakem stanju so funkcije iz prejšnje izvedbe neke kode. V primeru če je šlo kaj narobe, pa more PHP sistem povrniti v prejšnjo stanje. Naj še dodam da sem tako obnašanje odkril samo če je PHP inštaliran kot apache modul.
Kako? Preverimo če obstaja preimenovana funkcija, kajne? Nekako tako:
<?php
/** blabla */
// Smo ga prejšnjo izvedbo zajebal?
if (function_exists("mysql_query_ren"))
{
// Jap, smo... Neki je prejšnjič šlo narobe. Vrnimo sistem v prvotno stanje.
rename_function("mysql_query_ren", "mysql_query");
}
// if je popucal zmedo... Nadaljujmo kot da se ni nič zgodilo.
rename_function("mysql_query", "mysql_query_ren");
rename_function("__mysql_query", "mysql_query");
/**
* Blablabla... Saj veste kako gre dalje
**/
?>
Kaj pa language konstrukti? Kot so echo(), print(), include(), require() ipd ? Njih ne moramo zamenjati z lastnimi konstrukti, vendar se da do določene mere manipulirati z njimi. Ampak, o tem pa naslednjič (če bo kdo zainteresiran), v kakem error-cathing članku. 
Vsi geeki vejo kak je linux sheksy... Npr, kot tale linija (slavna) :
who | grep -i blonde | cd ~ | strip | touch | mount | fsck | umount | sleep
Ampak! S to linijo je nekaj narobe ... Kdor prvi pove kaj, dobi od mene gajbo pira 
Pa da nebi kdo z kakimi popolnoma nedomišljiskimi vn priš! Mal bo treba domišlije uporabit 
Namig: Ni who kriv. Tudi pomanjkanje parametrov ne
n00b is back! 
Ne, ni bla plata kriva, popravek ... Napajalnik je šel ... Hvala bogu je melfoter še enege rezervnega ...
Pa še en LCD skrin sem dobu, tak da mam zdaj Dual setup (starega CRT in tegale 16")... 
Včasih je pa fajn če kaj crkne ... 
Woot! Woot! Woot!
Najverjetneje mi je šla plata rakom živžgat ... Danes zjutraj je preprosto BIOS najprej začel čudne ugotovitve metat ven, po resetu CMOSa, pa se še užgati noče...
NORO! XD
Če ne bo kakih sprememb, bom napisal samo... Asrock 939Dual-SATA2 R.I.P. -- dobro mi je služla
n00bz. inc. presentz yaShell 1.0!! (TADA style music in background)
WTF? yaShell... Yet Another Shell... Web based, seveda... Originalno mišljen kot zamenjava res, res, res zastarelega nTerma, ter kot shell, katerega HTML Bloat (kot rezultat RFI inclusion) nebi motil, kmalu se je razvil v (vsaj zame) vsestransko orodje za hitr fix določene stvari na strani/bazi. 
Tak, dokončal sem par finishing touches, naredu nekaj testinga (čeprav sem 100% da ni bug-free) ipd...
Dobite ga tule ... Klikni me nežno! 
OK, stvar je že published lep čas ... sam dobr 
... v MC Patriotu koncert Dan D!
Če ste pričakovali nwm kak dobr sestavek kak je bilo bom napisal samo: "ne vem... baje je blo zakon" ... vsaj tak so drugi rekli

Nisem farizej, ne fantast ne fanatik,
odkrito bom priznal: jaz sem le flegmatik.
Slovo sem dal telesnim in duševnim bojem,
naj se zgodi karkol, jaz mirno si zapojem:
TAGADAGADAGADA TAGADAGADA...
Včeraj? V MC Patriot koncert smolarja ... Sem omenu da je tip Car? In ne morš verjet, dejansko se vsega spomnim, in tudi v tisti množici se nisem zgubil... Res je da sem včeri pil že od treh dalje (po neki video obdelavi tam), nato se pol ure treznil, in šel dalje pit ... Pa dobr...
Koncert je trajal od desetih (če šteješ "ogravanje" -- what? -- od devetih) pa do ... Enih zjutraj ?
Fajn se naj bi končalo ... če nebi na koncu nekoga domov spravljal... Folk ... TEŽKI STE! Pa še od večera ne boste ničesar odnesli 
Danes pa Dan D ... To bo pokalo po šivih ... woot! 
Mja, na nekaterih verzijah MySQL se je pokazalo da se baza močno buni... Predvsem zato ker sem slabo sestavu tabelo, pa dobr...
Zato sem sestavu hiter hot-fix, ki tale problem odpravi... Klik! 
Btw: danke šun, umrak11, da si me opozoril 