This blog is NOFOLLOW Free!






Archive for the 'Tech' Category

Determinarea corecta a MIME Type in PHP 5

Tuesday, August 19th, 2008

Din start mentionez ca acest mic tutorial este dedicat fisierelor ce au ca directie un host *nix, iar functionalitatea implicita este satisfacuta pentru Ubuntu/Debian. Se poate aplica cu modificarile de rigoare si sub alte distributii. O sa il structurez pe pasi pentru o aplicare mai usoara. Nu am incercat pentru PHP 4, desi majoritatea pasilor s-ar putea sa fie valabili.

Introducere

Determinarea MIME Type-ului corect pentru un fisier este o problema esentiala. Nu o sa explic si de ce … daca nu stii de ce, atunci tutorialul acesta iti depaseste nivelul cunostintelor. Atunci cand se face upload la un fisier printr-un form, sau se doreste import-ul unui fisier, se poate intampla ca extensia fisierului sa nu reflecte realitatea sau ca aceasta sa lipseasca cu desavarsire, fapt ce va duce la varii probleme. Array-ul $_FILES ce ia valori in functie de continutul unui form ce are specificat in mod explicit enctype=”multipart/form-data” se prea poate sa nu contina valoarea corecta a mime type-ului pentru $_FILES[’file_input_name’][’type’] deoarece detectia mime-ului cade pe spinarea browserului iar in majoritatea cazurilor acesta se foloseste de extensia fisierului deci va esua in cazurile descrise mai sus. Este nevoie ca informatia sa fie interpretata citind headerele fisierului si folosindu-ne de mime magic.

PECL si fileinfo

Nu o sa imi pierd timpul sa explic ce e PECL. Google este de mare ajutor. Din pacate in repository-urile Ubuntu/Debian, extensia fileinfo nu este disponibila in mod implicit. Din fericire este disponibila prin intermediul PECL. Acum incepe treaba sa fie paroasa.

In primul rand, este nevoie de una bucata compilator. Exista un pachet ce le face pe toate, deci:

sudo apt-get install build-essential

Bun. Avem compilator, avem PECL (presupun, daca n-ai HTTP server si PHP - citesti degeaba). Pentru build-ul fileinfo mai este nevoie de pachete de development, deci:

sudo apt-get install libmagic-dev php5-dev

ce va instala headerele de development pentru libmagic, phpize si alte chestii. Faceti acum, sau regretati mai tarziu. Acum este timpul sa compilam extensia fileinfo folosind pecl:

sudo pecl install fileinfo

Daca maraie vreo eroare la configure, instalati pachetul de development aferent (pentru cei somnorosi, are sufixul -dev). Daca maraie vreo eroare la compile, imi pare rau, nu va pot ajuta. Pe masina de devel a functionat fara probleme. Daca nu maraie nici o eroare, ar trebui sa indice faptul ca extensia a fost instalata cu succes. Ar trebui sa fie ceva de genul:

Build process completed successfully
Installing ‘/usr/lib/php5/20060613+lfs/fileinfo.so’
install ok: channel://pear.php.net/Fileinfo-1.0.4

Daca ati ajuns pana aici, mai este putin si usor. Extensiile instalate prin intermediul PECL nu sunt incarcate in mod automat, spre deosebire de cele instalate din repository-urile Ubuntu/Debian folosind apt-get sau alternativa (cu mici exceptii, spre exemplu mcrypt.so trebuie incarcat in mod explicit - nenea maintainer a fost cascat). Pentru a mentine ideea si spiritul Debian, incarcarea modulului se va face folosind directorul de fisiere alternative de configurare pentru PHP. Tastati urmatoarele chestii intr-un terminal (da stiu, copy-paste e mai comod):

cd /etc/php5/conf.d/; sudo touch fileinfo.ini; sudo nano fileinfo.ini

Bagati urmatoarea linie in acel fisier:

extension=fileinfo.so

dupa care salvati cu Ctrl+O. Inchideti editorul text folosind Ctrl+X. Nu, nu sunt vim maniac, sa nu aud de el. Acum este timpul sa se dea restart la HTTP server pentru a incarca noua configuratie. Ar trebui sa fie valabil si pentru cei cu GCI/FastCGI (eventual alt HTTP server gen lighttpd), desi subsemnatul e de ala cu Apache 2+PHP5 handler, deci in cazul meu (si al majoritatii):

sudo /etc/init.d/apache2  reload

ce va duce la un graceful restart (aka restart fara downtime) urmat de incarcarea noilor fisiere de configurare. Daca totul e ok, noul modul de PHP ar trebui sa fie incarcat. phpinfo(); ar trebui sa indice acest fapt, atat in lista de fisiere de configurare alternative (cele din /etc/php5/conf.d) cat si prin faptul ca ar trebui sa indice pe undeva in mod explicit faptul ca fileinfo este incarcata.

Utilizarea fileinfo pentru a afla MIME Type

Acum sa trecem la lucruri grele. fileinfo contine niste functii smechere asemanatoare cu fopen. Pentru ubergeeks exista modul orientat obiect de lucru cu ele (php.net/finfo_open explica), dar subsemnatul se multumeste cu trei apeluri procedurale din moment ce nu exista nici un avantaj real in cazul de fata pentru a defini un obiect si a-l distruge dupa ce se afla mime-ul. Pentru cei dornici sa isi implementeze o clasa proprie … este alta poveste. Eu mi-am facut o functie custom ce am inclus-o in API-ul central ce primeste ca parametru calea fisierului si imi returneaza mime-ul in caz de succes sau un cod de eroare pentru debug in caz de esuare. Miezul problemei sta in:

$finfo=finfo_open(FILEINFO_MIME, "/usr/share/misc/magic");
if(!$finfo)
    die("Can’t open the fileinfo database.");
$mime=finfo_file($finfo, $fileName);
finfo_close($finfo);

Si cam atat. Succes si spor la treaba.

Windows XP si Automatic Restart

Friday, August 15th, 2008

Azi dimineata m-am trezit cu chef de palavrageala pe forumul eMAG dupa ce mi-am gasit sistemul asteptandu-ma cu login window-ul de Ubuntu - ceea ce nu e bine. Il lasasem sub Windows cu buna stiinta ca sa faca treaba ce tine de Windows. Desi m-am mai plans de aceasta problema, pana acum nu mi se umpluse pararul. Acum mi-a ajuns.

Solutiile ce le gasistem in prima faza functioneaza OK sub Windows XP Pro, dar eu ca XP Home user, am de suferit pe ici pe colo. Din fericire Google functioneaza asa cum trebuie din cand in cand, deci in aceasta dimineata am gasit exat ceea ce cautam. Am cautat o solutie universala, deci am gasit o solutie universala. Nenea Group Policy editor nu ajuta, deci nu il voi pomeni. Lasam la o parte chestia mai sus pomenita.

Aplicatia (da, aplicatia) se numeste Auto Reboot Remover, si este a naibii de simplu de utilizat. Presupune doar rularea ei cu privilegii de administrator.

Download: http://www.intelliadmin.com/Downloads.htm

Reinstalarea stivei TCP/IP sub Windows XP

Friday, August 15th, 2008

Nu stiu de altii, dar in vremuri oarecum uitate am avut de harta cu stiva TCP/IP in sensul ca se infunda in draci si reteaua mergea in suturi, mai cu noduri, mai cu viata, in functie de cheful pe care il avea. Acum prin alt context am ajuns sa iau iarasi legatura cu acest fapt.

Solutia pe care orice but o poate aplica este format C: - reinstall Windows - si ca un but ce sunt - am aplicat-o de cateva ori. Intre timp, am mai renuntat la un Admin si la anumite comportamente daunatoare sistemului, deci as putea spune ca m-am maturizat. Odata cu aceasta metodele s-au maturizat. Este mai eficient sa repari o problema minora decat sa darami tot si sa reconstruiesti iarasi totul. (more…)

Design Coding

Friday, July 18th, 2008

This is how you do it … G-yeah …


» Powered by XHTML Video Embed

Nightly Tester Tools

Tuesday, July 15th, 2008

Ca de obicei, upgrade-ul unei componente software puternic bazata pe extensibilitate este ‘a royal pain in the ass’. Firefox ca orice browser extensibil ce se respecta, nu face exceptie de la regula. Din fericire, upgrade-ul de la versiunea 2 la versiunea 3 nu presupune faptul ca extensiile nu sunt compatibile. Majoritatea functioneaza. Din pacate majoritatea au specificata versiunea maxima suportata in interiorul fisierului de instalare (install.rdf, fisierele .xpi practic sunt zip-uri). Versiune maxima ce in marea majoritate a cazurilor ia valoarea 2.0.0.*, deci fa refuza cu indarjire sa se instaleze. Subsemnatul se apucase sa despacheteze si sa modifice chestiile de care avea nevoie. Pana am dat de chestia din titlu. Este o simpla extensie de Firefox creata pentru testerii ce instaleaza build-uri de development, dar … nu este singura utilizare. Extensia are o functie de ‘compatibility override’ ce face ca installer-ul sa nu tina cont de ceea ce specifica install.rdf, deci extensia va fi instalata in mod fortat. Atentie: NU toate extensiile de v2 functioneaza pe v3!

Creditul pentru descoperirea NTT ii revine lui burebista.

Link: https://addons.mozilla.org/en-US/firefox/addon/6543

Blacklist pentru module sub Ubuntu

Monday, June 30th, 2008

Pentru ca sunt cascat si uit procedura, am hotarat sa scap vreo cateva linii aici. Povestea sta cam asa: solutia cea mai simpla pentru problemele mele maricele sub Ubuntu atunci cand folosesc notebook-ul este blacklist-ul. De ce? Pentru ca oricat as configura la ALSA, driverul tot cretin este si nu imi ia ca default dupa fiecare reboot ce placa de sunet vreau EU. Se prea poate sa ma trezesc cu ID-urile inversate. Asa ca pun blacklist pe modulul placii onboard. Cealalta problema tine de faptul ca devii Ubuntu au comis o faza de cartea rebuturilor in ceea ce priveste interfata mea de retea ce este o Realtek. In loc sa incarce modulul corect, adica r8168 (ce nici macar nu exista in pachet, desi nenii de la Realtek au sursele pe FTP), sa zicem ca prostul imi incarca r8169 - ce functioneaza doar cand vrea pll nu cand vrea plm, iar chestia aceasta ma irita. Teribil. Deci iar intervine ideea de blacklist.

echo “blacklist mod_name” >> /etc/modprobe.d/blacklist
sudo update-initramfs -u

Voila … sintaxa pentru blacklisting …

A innebunit lupul

Friday, June 27th, 2008

Pentru prima data in viata imi este dat sa vad un minisite facut de Microsoft ce respecta intocmai standardele Web (cu mici hibe ce-i drept, dar sunt doar warnings NU errors). Este vorba despre minisite-ul ce promoveaza Silverlight … http://www.microsoft.com/silverlight/default.aspx.

Ca Web Standards maniac, visez la ziua aceea cand codul scris si testat pe un browser sa functioneze la fel pe toate. Dar … este un inceput. Kudos Microsoft pentru efort.

 W3C ValidationFirefox + HTML Validator

The Website is down

Thursday, June 26th, 2008

O chestie criminala cu adresa la suportul tehnic si cei ce il cer. Enjoy.


» Powered by XHTML Video Embed

http://www.thewebsiteisdown.com/

Firefox si Cartea Recoardelor

Thursday, May 29th, 2008

Se pare ca trupa din spatele SpreadFirefox si-au pus un gand in cap … un gand mare, si anume ca de lansarea lui Firefox 3 acesta sa intre in Cartea Recordurilor pentru softul cu cele mai multe download-uri in 24 ore. Avand in vedere ca am urmarit evolutia acestui browser de la versiunea 3.0 Alpha 1 si pana la 3.0 Beta 5 (a aparut RC1, dar am sarit peste el), tradus in timp - aproximativ un an si jumatate, nu pot decat sa le doresc tot succesul, atat echipei SpreadFirefox pentru raspandirea browserului cat si Mozillei.

Set a Guinness World Record - Enjoy a Better Web

WordPress si lupta AntiSpam

Wednesday, March 26th, 2008

De aproximativ un an si jumatate de cand umplu acest blog cu balariile personale am inceput sa urasc de moarte spam-ul. Initial acest blog era pus pe Web de catre un engine destul de simplu, Chipmunk Blogger Script, rescris de subsemnatul in proportie de 80%. Problema spam-ului s-a pus la aproximativ 3 saptamani dupa ce site-ul era pe Web, moment in care au inceput si roboteii sa dea de blogul subsemnatului. Bomboana de pe coliva a fost faptul ca roboteii m-au prins, scuzati franceza, in curul gol. Protectia antispam era la podea, modulul de ban IP era nefunctional, si colac peste pupaza, a fost in perioada aia criminala cand o luna jumatate nu am avut Internet. Au fost suficiente 3 zile pentru ca blogul meu sa aiba peste 1600 mesaje de spam. Deci se intelege de ce ii urasc de moarte. Nu am renuntat atunci si am dat fuga la WordPress, am scris primul meu modul de captcha + dumb question (Are you human? - si implicit pe No) - modul care a fost 100% eficient cat a fost in productie. Dupa care a urmat perioada WordPress in ultimul an si ceva.

Desi WordPress vine la pachet cu Akismet care ar trebui sa apere de spam, initial acest blog, Akismet are un mod pacatos de a lucra cu serverul mama a carui baza de date cu spam o foloseste. Aceasta chestie nu functiona deloc pe hostul meu shared, free - care nu permitea conexiuni remote. Deci am descoperit Spam Karma 2. Plug-in pe care de altfel in folosesc din prima zi de WordPress blogging si de care nu cred ca o sa ma despart [prea repede?].

Sunt adeptul solutiilor KISS-compliant. Dar nu cand vine vorba de spam. Sa zicem ca mi-a pus prea multe probleme la viata mea. Am vrut propriul plug-in de WordPress, atat pentru ca voiam un proiect personal care sa aiba ceva de zis, cat si datorita faptului ca eram nemultumit de solutiile existente. Problema este ca de cand a fost acceptat in repository-ul oficial, cantitatea de spam a crescut de la aproximativ 200 de mesaje in primul an de WordPress, pana la peste 600 in prezent (in luna asta si ceva decat mi-am facut submission-ul). Si inca se incearca.

De ce SK2? Pentru ca mai nou au aparut metode tot mai inteligente de spam. Deja au inceput coderii sa stie metodele KISS compliant (gen: cel care a pus comment sa aiba anterior un comentariu aprobat, sau anumite keyword-uri). Ei bine, am gasit multi boti de spam care postau mesaje aparent nevinovate. Pareau in legatura cu subiectul, se dadeau a fi alt blogger care lasa un comment asa ca sa se afle in treaba. In realitate, majoritatea le-am primit pe pagina XHTML Video Embed, iar unii nici macar nu aveau blog WordPress! Ba mai mult … aceeasi care incercau sa castige increderea, mai incolo veneau cu adevaratul spam, dar fara keyword-uri tipice. Oricum, un simple captcha nu este suficient. Acesti spam bots s-au gasit a fi suficient de inteligenti. Desi SK2 nu are captcha in mod implicit, daca nu gaseste JavaScript si alte rahaturi, atunci baga un modul de captcha la inaintare. Ei bine, si acela a fost spart. Din fericire … dau alte semne, sunt usor de bagat in blacklist, iar odata ajunsi in blacklist, se ocupa plug-in-ul de ele.

Sincer sunt curios care va fi evolutia acestui fenomen. Personal nu imi permit sa scap o cantitate masiva … din moment ce am pus NoFollow Free, risc o penaliare de la Mr. Google.