Programozás

Programozással kapcsolatos ötletek, megoldások

R.E. Uploader

Bár az osztályt nem ma írtam, de most érett meg a publikálásra. Segítségével egyszerűbben, felhasználóbarátabban oldható meg fájlok feltöltése és képek esetén thumbnail kép automatikus készítése. A maximális fájlméret és fájltípus korlátozható. A fájlok neve és könyvtára is megadható. Eredeti és kép esetén thumbnail képek könyvtára is. Fájlnév egyezés esetén a fájlok felülírhatók, vagy kaphatnak numerikus megkülönböztető jelet. Pl.: "_1". A fájlok egyelőre minden esetben csak url barát formában menthetők el. Tehát nincs se szóköz, se speciális karakter. Ezek automatikusan lesznek lecserélve ékezetmentes karakterekre. Vagy speciális karakterek esetén a rájuk leginkább hasonlító egyszerű karakterre.

Legújabb verzió letöltése sourceforge-ról

Megosztás/Mentés

PHP SVN project létrehozás assembla.com-on és tesztelés NetBeans -ben

2012. május 27-én a bejegyzés kiegészítve Windows felhasználók számára. A kiegészítések pirossal kiemelt dátummal jelöltek.

Azok kedvéért, akik még nem próbáltak verziókezelő rendszert használni: Több féle lehetőség létezik. git, CVS vagy akár az SVN, amiről én írok most. De egyébként jó hosszú a lista. Akit érdekel: Verziókezelő rendszerek, Verziókezelés

Hasznos dolog, mert egy szerveren megtalálható az összes fájl összes verziója, amiket vissza is lehet állítani szükség esetén. Illetve pontosan követhetők a változások. Csapatmunka esetén ki, mit módosított. Illetve bizonyos esetekben ugyanazon a fájlon több fejlesztő is dolgozhat. Más esetben ez hibát okoz, aminek a javítására vannak lehetőségek.

Vannak fejlesztői környezetek, amik támogatják a verziókezelő rendszereket. NetBeans is ilyen. CVS, Mercurial és Subversion ( SVN ) van beépítve. Ingyenes szervereket is lehet találni. Korlátozottan bár, de ilyen az Assembla.com (A fizetős verziója többet tud). Viszont lehet privát projektet is kérni. Ellentétben sourceforge.net -tel (2012. május 27.: Azóta már itt is), ahol viszont sokkal több lehetőség és eszköz használható teljesen ingyen. De nem is részletezném tovább. A tárgyra térek.

Mint írtam, netbeanst használok és SVN-t. Valamilyen PHP programot szeretnék "verziókezelni". Létrehozom a projectet, beállítom az SVN-t és módosítgatok. Tesztelgetek. Létrejönnek cache fájlok esetleg, képek vagy kitöltött, helyi gépre beállított config fájlok amiket nem szeretnénk commitolni. NetBeans-ben van lehetőség commit előtt egy listában jelölgetni, miket akarunk felküldeni a szerverre és miket nem. Vagy előre beállítani, hogy egy bizonyos mappát, fájlt sose töltsön fel. De még ekkor is el lehet veszni a fájlok között. Nem beszélve arról, hogy a netbeans projekt fájljai is bekerülhetnek ide, ha létrehozáskor nem lett megadva, hogy külön mappában tárolja a config állományokat a projekthez. Illetve nem biztos, hogy az alkalmazás fel van készítve arra, hogy minden mappába bekerül egy .svn nevű mappa is fájlokkal. Szóval nézzünk lépésről lépésre egy projectet az assembla.com -on.

Megosztás/Mentés

Rekurzív mappamásolás php-ben

Ismét egy olyan script, aminek a megírására más kérdése ösztönzött. A script pedig nem más, mint a mappák és fájlok rekurzív másolása. Lehetne írni rá jó kis rekurzív függvényt, ami önmagát hívja meg. Vagy egy ciklust, ami az aktuális könyvtárszintet változtatgatja és rekurzív függvényhívás nélkül dolgozik. Vagy használhatjuk a PHP 5 adta lehetőségeket. Jelen esetben az iterátorokra gondolok.

Megosztás/Mentés

Cakephp: Html helper és CSS, IE feltételes megjegyzéseivel

Sose gondoltam volna, hogy valaha szükségem lesz Internet Explorerhez külön css-t gyártanom. Mindig azt vallottam, hogy egy jól megírt weblap minden böngészőben legalább az elfogadható szintet megüti, ha nem is tökéletes. Könnyen beszéltem, hisz igen ritkán kellett nekem a megjelenéssel komolyabban foglalkoznom. Nem az a specialitásom. Most mégis belefutottam abba a problémába, hogy már mindenhol tökéletes volt a megjelenés 2 napi munka után, kivéve az Internet Explorer 7-et. Így szükségem lett volna az IE feltételes megjegyzéseire

Na most egy ideje van "szerencsém" cakephp keretrendszerben fejleszteni. Van neki egy HtmlHelper osztálya, aminek a css() metódusával lehet css linkeket elhelyezni vagy rögtön megjelenítve a html forráskódját ( ez ugye a layouts/default.ctp-ben szokott történni a <head> részben )

Megosztás/Mentés

PHP switch működése. Típusos switch és típuskonverziók.

Most egy érdekességről fogok írni, aminek igazán gyakorlati hasznát nem látom, viszont jó tudni. A switch elágazás nem egyedi a php-ben. Más nyelvek is megvalósítják, mint például a java, C vagy a pascal, csak más néven és/vagy egy kicsit másképp. Bizonyos esetekben az IF elágazás felváltására szolgál. Két érték pedig többnyire akkor lesz egyenlő, ha a típus is egyezik. Ám PHP-ben az értelmező mondhatni, kénye kedvére változtathatja a típusokat egy-egy ellenőrzés alkalmával. Persze adott, hogy mit mire tud konvertálni. De ha biztosak akarunk lenni a típusok egyezésében is, akkor a == helyett a === -re van szükség. Switch esetén viszont mindig az első verzió, azaz a típusegyeztetés nélküli ellenőrzés történik. Ez egy részt lehet probléma. Más részt ha ez probléma, akkor az if-eket se nehezebb megírni sok esetben. Mégis bizonyos speciális helyzetekben igen csak el kéne gondolkozni, hogy ugyanazt a működést egy IF hogy váltja fel. Ez pedig a break utasítások használatával és a default ág elhelyezésével függ össze.

Megosztás/Mentés

Konfigurálható szép url-ek htaccess-el

Nos, ez már nem az első hasonló témájú bejegyzésem. De úgy gondoltam ebből sosem elég. Korábban írtam arról, hogyan lehet szép url-eket készíteni htaccess-el. Egyben arról is szólt a bejegyzés, hogy hogyan lehet többféleképpen különböző aloldalakat létrehozni. Ennek folytatásaként most mutatok egy megoldást arra, hogy egy config fájlban lehessen egyfajta mintát adni a használni kívánt url-ekre oly módon, hogy közben már azt is megadjuk, az url melyik része milyen $_GET változóba kerüljön.

Ez a megoldás feltételezi, hogy valamennyire már értünk a reguláris kifejezések használatához, de a legfontosabb tudnivalókat én is elmondom. Pár dolgot már kifejtettem a Link attribútumainak megkeresése bejegyzésemben is. És most neki is vágnék az aktuális témának.

Megosztás/Mentés

Lista megjelenítése táblázattal php-ben (oszloponként)

Írtam már hasonló témáról, de ott feltételeztem, hogy a lista elemeit sorban szeretnénk kiírni és majd egy adott oszlopszám után sort törni. De felmerülhet olyan igény, hogy az elemeket egymás alatt, egy oszlopban akarjuk megjeleníteni, ám ekkor is a maximális oszlopszámot szabjuk meg és nem a maximális sorszámot. Így azt külön ki kell számolni, hogy mikor kell "oszlopot törni".

Megosztás/Mentés

Néhány prolog feladat megoldása

Az egyetemen ( PTE TTK Programtervező informatikus ) többek között prolog kurzust is felvettem. Inkább csak érdekességként, így nem merültem el mélyebben a témában, de néhány gyakorló feladatot megosztanék a nagyközönséggel is. Hosszú magyarázatot nem mellékelek, mivel már régen tanultam, és talán nem is tudnék részletesen magyarázni. Azért a fent linkelt wikipédián kívül még egy hasznos oldal: Link

Egy lista elemeinek száma

%---------------------- Egy lista elemeinek száma ---------------------------------

%üres lista hossza 0
length1([],0).
%egy lista hossza, ami több mint egy elemet tartalmaz,
%és mindegy mi az első eleme,
length1([_|Y],Z):-
        %pont olyan hosszú, mint az első elemét leszámítva a többi elemének száma,
        length1(Y,V),
        %plusz az első elem
        Z is V+1.

Megosztás/Mentés

PHP reguláris kifejezések - Link attribútumainak megkeresése

A reguláris kifejezésekről nagyon sokat lehetne írni. Bevezethetném az elejétől, ahogy egyszer terveztem is, most mégis maradnék csak egy példa bemutatásánál, ami megkeresi egy html kódban az összes linket és azok összes attribútumát. Azért jó ez a példa, mert több eszköz tárgyalására is lehetőséget ad.

A preg_match függvényt fogom használni. Még lehetne az ereg függvényeket, de azokat ma már nem ajánlott.

Legyen a példa html kód a következő:

Megosztás/Mentés

Űrlapok véletlen újraküldésének megakadályozása

A bejegyzés címe már sejteti a témát, de azért nézzük, miről is akarok én itt beszélni. Adott egy weboldal, és azon egy űrlap. Például egy üzenőfal. Valamint adott egy felhasználó, aki bátran kattint az "elküld" gombra. Az üzenete megjelenik, majd támad egy ingere, hogy frissítse a weblapot, mert mondjuk kíváncsi, hogy válaszoltak-e az üzenetére már. Persze ekkor az ő üzenete is újra el lesz küldve. Na most van olyan fejlesztő, aki erre nem gondol, és van olyan, aki igen. Utóbbiak megoldják, hogy frissítéskor az űrlapok ne legyenek újra elküldve. Vagy esetleg az üzenet tartalmát hasonlítják össze az előzőleg elküldöttel, és ha egyezik, akkor nem lesz újra bejegyezve az adatbázisba, avagy fájlba.

Megosztás/Mentés