Archive for 'web-dev'

PHP 5.3.2 Windows alatt

Csalódottan vettem tudomásul, hogy php 5.2.x alól 5.3.2 -re már nem lehet zökkenőmentesen upgradelni. Végignéztem a change log-ot, sok minden változott konfig szinten is, amire érdemes odafigyelni.. és persze volt néhány extension is (pl a legutóbb tárgyalt imagick) amiknek egy-egy új dll-t kellett guberálnom. Ha HTTP 500-as hibát kapsz upgrade után, akkor neked szól az alábbi pár tipp:

Időzóna.. A php.ini kapott több új direktívát, ilyen a date.timezone mostantól kötelező beállítás is. Állítsuk be a php.ini-ben tehát a következőt:

date.timezone = Europe/Budapest

Localhost és mysql esete.. Install után próbálgattam lefuttatni néhány weboldalamat, de nem ment.. jobban megvizsgálva, csak a mysql-t használó oldalak nem mentek, így gyanakodni kezdtem a mysql modulra. Az viszont rendben betöltődött, látszólag semmi gondja nem volt.. Némi guglizás után kiderült, hogy 5.3.1 óta a php valamiért nem bírja értelmezi az oprendszertől visszakapott localhost címeket, ha több mint egy ip van hozzárendelve. Így a localhost nem “fordul le” 127.0.0.1-re. Két bugfix kínálkozik, egyik sem a legszebb megoldás..

a.) localhost helyett ezentúl 127.0.0.1-et használunk adatbázis csatlakozáskor.

b.) átírjuk a hosts fájlunkat, amit a C:\Windows\System32\drivers\etc\alatt találunk:

::1             localhost

A fenti sort kommenteljük ki!

New windows specifikus, de ide tartozik, hogy az 5.3-as verzióban több függvényt is halálra ítéltek, az ítéletet viszont még nem hajtották végre. Az ilyen függvényeket ‘deprecated’ módba rakták, azaz használhatjuk, de egy új, “DEPRECATED ” típusú hiba figyelmeztet rá. Részletesen: http://www.php.net/manual/en/migration53.deprecated.php olvashatsz az érintett fügvényekről és régi-új megfelelőikről.

Imagemagick windows alatt

Az utóbbi hetekben a CMS fejlesztés közben többször is meggyűlt a bajom a GD2 libraryvel a transparent PNG-k kapcsán, majd speciális JPEGek és a rossz sharpness beállításokkal is. Elegem lett. Alapvetően nem vagyok a híve az észnélküli kiegészítő telepítéseknek, de az ImageMagick egy elég gyakori képfeldolgozó szoftver unix alapú szervereken, így bevállaltam, hogy a CMS rendszerkövetelményei közé bekerüljön ez is. Nekem windows alá kellett installálnom, íme, hogy is megy ez pontosan:

1. Maga az install automatikus, letöltjük az ImageMagick honlapjáról a nekünk megfelelő Windows Binary installert és elindítjuk. Ha nem tudod melyik a neked megfelelő, akkor válaszd a ImageMagick-X.X.X-X-Q16-windows-dll.exe változatot.

2. Az installer alapbeállításban hozzáadja a progit a system path-hoz, így parancssorból könnyen használható a progi. Az installer utolsó ablakában van is egy teszt példa az image magick logójával. Ezt érdemes lefuttatni, hogy működik-e a dolog magában.

3. Jöhet a php-s kiegészítő dll, amit innen tölthetünk le:  http://snaps.php.net/win32/
Válasszuk a saját php verziónknak megfelelő kiadású peclX.X -win32-latest.zip fájlt és guberáljuk ki belőle a php_imagick.dll állományt! Másoljuk a php könyvtárának extension mappájába!

4. A php még nem tudja, hogy nekünk van ImageMagick progink a gépen, mondjuk meg neki! A php.ini fájlba vegyük fel a következő sorokat:

extension=php_imagick.dll

5. Indítsuk újra szervert, hogy a php.ini fájl feldolgozásra kerüljön!

6. Teszteljük!
teszt.php fájl tartalma első lépésben:

<?php phpinfo();?>

Futtatás után a phpinfo-ban szerepelnie kell egy Imagick résznek. Ha nem szerepel, akkor elrontottuk az installálást valahol. Ha szerepel, akkor próbáljuk ki:

A teszt.jpg-t másoljuk a teszt.php mellé, aminek a tartalma legyen:

<?php header('Content-type: image/jpeg');
$image = new Imagick('teszt.jpg');
$image->thumbnailImage(1000);
echo $image; ?>

Az Imagemagick egyik nagy előnye, hogy a php exec paranccsal lehetőség van a parancssoros feldolgozásra, azaz nem a php futtatja a képek átalakítását, hanem egy külön windows programszál. Erről majd máskor..

Wp Post Thumbnail 0.2b Loading.. bug fix

Finaly I found all the bugs in the Wordpress Post Thumbnail plugin. This fixed wppt.php file solves the famous “Loading.. ” problem, but only works under IIS hosted Wordpress blogs. If your hosting server or local development server is IIS (windows webserver) based, you should check this fix!

Download here the fixed file: wppt.php.zip

Please note:
This is NOT a crossplatform fix, only works under IIS!

Instructions:
1. Replace the original wppt.php with the unarchived.
2. If  the wp-content/uploads/wp-post-thumbnail/ directory doesn’t exist, create it!
3. Enjoy the fixed plugin!

If this bugfix saved your life or something like that, please send me some beer or donate (on the sidebar)!

Thank you!

Gmail Apps Php Mailer SMTP beállítások

Ezt a postot részben magamnak ajánlom, mert mindig elfelejtem valamelyik paramétert, részben pedig azoknak a sorstársaknak, akik a Google Apps / Gmail fiókjuk nevében akarnak emailt küldeni php mailer libraryvel.

$mail->IsSMTP();
$mail->Host = "ssl://smtp.gmail.com";
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = "username@gmail.com";
$mail->Password = "password";

Flex: ViewStack select by id

Flashben programozni szívás, Flexben is. Ezzel a problémával több mint egy órát tököltem, ezért szentelek neki egy gyors kis blogbejegyzést..

Van egy ViewStack komponensünk (MyViewStack), ebben pedig szépen elnevezett gyermek elemek. Elnevezés alatt azt értem, hogy mindegyiknek van saját “id”-je. Szeretnénk, hogy ne csak hagyományos módon az index alapján  ( MyViewStack.selectedIndex=1) lehessen elérni, hanem a “Stack” id-je alapján, amit stringként közlünk a megjelenítő metódussal.

A metódus adott: MyViewStack.selectedChild=, viszont a bemenet nyilván nem lehet egy sima változónév, Container-re kell hivatkoznunk. Naív módon próbálkoztam ilyen flashes közhelyekkel: this[target] és társai..

Persze nem ment. Mivel Container kellett neki minden áron, beimportáltam az  mx.core.Container csomagot és rájöttem, hogy mennyire  szépen meg lehet ezek után oldani a problémát:

import mx.core.Container;
private function showTarget(target:String) : void
{
    MyViewStack.selectedChild = Container(MyViewStack.getChildByName(target)) ;
}

AS3,Flex: rest paraméter trükk

Sok modern programozási nyelvben, így AS3-ban is használhatjuk az úgynevezett rest paramétert függvények definiálásakor. Nagyon hasznos dolog, mert nem kell előre gondolnunk a lehetséges paraméterekre, tisztább kód hozható létre vele, mindössze egy tömböt kell lekezelnünk a függvényen belül, amiben az összes “további” paraméter benne van. Például:


function elemLista(...items):void{
for( var i:int = 0; i < items.length; i++){
trace("Elem: ", items[i]);
}
}

elemLista(”A”,”B”,”C”, 1, 2, 3);

Kimenet:
Elem: A
Elem: B
Elem: C
Elem: 1
Elem: 2
Elem: 3

Nagyon hasznos dolog, amint látható én gyakran használom.
Egy moduláris program interfészén dolgoztam, amikor szembejött egy probléma ezzel kapcsolatban. Mi van, ha egy tömböt akarok így, végtelen paraméterszerűen átadni a végtelenszámú argumentumot fogadó függvénynek?!
Nos, ha a tömböt közvetlenül adom át: elemLista(tomb:Array) az nem fog menni.
Viszont egy kis objektumorientált trükközéssel megoldható a probléma. Használjuk az apply metódust. Hülyén hangzik, de az OO programozásban minden objektum, így a függvényhívást, vagyis a függvényt magát is tudjuk objektumként kezelni. A következőt kell tennünk:


function elemLista(...items):void{
for( var i:int = 0; i < items.length; i++){
trace("Elem: ", items[i]);
}
}

var lista:Array = new Array(”A”,”B”,”C”, 1, 2, 3);
elemLista.apply(this,lista);

Kimenet:
Elem: A
Elem: B
Elem: C
Elem: 1
Elem: 2
Elem: 3

Papaam! Már működik is. Nos, nekem ez egy óra kutakodásba került, remélem a kedves olvasó gyorsabban megtalálja

Charles - Flex/Air XML RPC debug

Államvizsgáztam, meg van a diplomám, így kicsit több időm van új dolgok kipróbálására és a blog írására is. Már hetekkel ezelőtt rákattantam az Adobe Air+Flex kombóra, de fejleszteni csak most kezdtem el benne. Rendkívül zavart, hogy a php webes alkalmazásom és az Adobe Air kiliensem közti XML alapú kommunikációt nem láthatom, nem tudom debugolni. 
Read more

Wordpress 2.7 - Error 500

Tegnap szenvedtem egy sort a saját wordpress 2.5 blogom migrálásával. A rettegett 500-as hiba nálam is előjött egészen rémületes arcát mutatva. A honlap és az admin is jól működött a fájlok cseréje és az adatbázis updatelése után, de amint az adminon postolni akartam, pluginokat aktivizálni, bármit jóváhagyni, azonnal 500-as hibával elszállt a lap.


Read more

Saját egérmutató (CSS)

Ajaxos alkalmazásoknál gyakran használok más egérmutatókat, mert sokszor egyértelműsítik mit lehet egy objektummal csinálni. Például drag n’ drop-olható elemeknél ezt a kurzort használom: cursor-openhand.png

CSS-ben ilyet elvileg nagyon egyszerűen definiálhatunk:

body{
cursor: move;
}

Firefox alatt szépen meg is jelenik a kezecske, de az Internet Explorer 6,7 és a Safari is egy nyilaskeresztet ;) produkál helyette.. Ez nem ébreszti fel usereinkben a “dragndrop” ösztönt (izraelita usereink pedig ijedtükben kikapcsolják a böngészőt :D ). A célunk az, hogy minden böngésző alatt a kezecske jelenjen meg.

Szükségünk lesz a megfelelő cursor bitmapre: openhand.cur

Másoljuk a css-el egyező mappába és írjuk át a css kódot:

body{
url(openhand.cur),move;
}

Lám, lám Safari barátunk szépen működik, a jó öreg IE pedig még mindig nem boldogul vele.. Hogy miért nem? Mert egy nagy rakás sz*r és nem képes követni a W3C szabványokat.. A trükk a következő:

Adjuk meg az abszolút hivatkozást is:

body{
url(openhand.cur),url(layout/openhand.cur),move;
}

Papaam és már megy is Firefox, Safari, Internet Explorer 6 és 7 alatt is!

Jobb egérkattintás letiltása minden böngészőben

Számos scriptet láttunk már, melyek különböző vagy akár több féle böngészőben is képesek voltak letiltani a helyi menüt. Erre általában a képek letöltése elleni “védelem” miatt van szükség.. Persze ez nem igazi megoldás, de nagyon sok 1.0-ás user bepánikol, ha nincs ott az a ‘Save As..’ menüpont a jobb kattintás hatására megjelenő helyi menüben.
Egy cég weboldalán pont az ilyen kategóriájú felhasználók ellen kellett védeni a látványterveket, ezért szükségem volt egy jó kis javascriptre..

Találtam is egy “szép” megoldást.. rövidke kód, try-catch-et használ a helyi menü letiltására. FF, IE és Safari alatt is működik, más böngészőm nincs fenn a gépen, de mivel a módszere a javascript “hibakezelője” maga, nem hiszem, hogy más, js képes böngészők ne támogatnák.