Programozás

Programozással kapcsolatos ötletek, megoldások

Javasolt telepítési sorrend webfejlesztő tesztkörnyezet összeállításánál

Vannak bizonyos függőségek egy-egy szoftver telepítésénél. Valamint első alkalommal a megértést is segíti a fokozatos haladás a kisebbtől a teljesebb rendszer felé. Ha gyakorlatot szerzünk egy komponens használatában és beállításában, egyszerűbb a továbbiakkal boldogulni, amik azon ismeretekre épülnek. Van egy általam preferált sorrend, amit nem is tartok magamban.

Megosztás/Mentés

Tesztkörnyezet kialakítása webfejlesztéshez

Kiknek szól ez a könyv?

Azoknak,

  • akik úgy érzik, volna mit javítani a módszereiken, hogy komfortosabban, átláthatóbban tudják fejleszteni webes alkalmazásaikat.
  • Akik otthon vagy munkahelyükön, nem az éles környezetben szeretnék fejleszteni weboldalaikat, de nem tudják, hogy fogjanak hozzá.
  • Akik egy kis lökést szeretnének a tárhelyszolgáltatóktól való függetlenedéshez.
  • És azoknak, akiket mindig is érdekelt, hogy a webszerver kialakítása egyéni igények szerint a programozók és rendszergazdák "félisteneinek" kiváltsága-e, vagy halandó ember is képes rá.

Hangsúlyoznám, hogy az itt leírtak nem a biztonságos, éles környezet kialakítására összpontosítanak. Sokkal inkább útmutatást próbálnak nyújtani az induláshoz. Melynek végén az olvasó képes lesz egy saját tesztkörnyezetet kialakítani egyedi igényeinek megfelelően, valamint megtudhatja, milyen módszerekkel küzdje le önmaga a felmerülő akadályokat.

Egy nagyobb témát szeretnék kidolgozni, így a könyv lapjait fokozatosan publikálom. Adott esetben sorrendjükön változtatok. Arra természetesen ügyelek, hogy egy-egy egység önmagában is egy kerek egészt alkosson.

Letölthető webszerver VirtualBox virtuális gépként (2-3GB, verziótól függően):
Letöltések

Több verzió esetén a legújabb dátummal elnevezett mappában kell keresni a legfrissebb változatot. Konfigurációs fájlok és szkriptek is letölthetők külön, de a komplett virtuális gép a ".ova" kiterjesztésű fájl.

Megosztás/Mentés

Javascript, mind kijelöl funkció. Határok nélkül.

Írtam én már erről korábban ( Link ), de abban a cikkben írt megoldásban elég korlátozottak voltak a lehetőségek. Most mutatok egy okosabb megoldást külső könyvtár nélkül, majd egy tényleg tuti megoldást jQuery használatával. Lássuk!

Megosztás/Mentés

require és include fajtái, különbségei php-ben

Az egyik gyakran felmerülő kérdés, hogy PHP-ben mi a különbség a require, include és ezek "_once" -ra végződő verziói között. Ráadásul én is emlékszem olyan írásra, ahol valótlant is írtak. Vagy a könyv szerzője tudta, mire gondol, csak nem volt megfejthető. Erről próbálok írni és ezzel most nem vállalkozom egy nagy szakmai jelentőséggel bíró bejegyzés írására.

Alapvetően ugye mind arra való, hogy egy másik fájlra hivatkozzunk vele és az abban levő forráskódot ott hajtsuk végre, ahol hivatkoztunk rá. Mégis érezhető néha a bőség zavara. Nézzük sorjában csak a lényeget!

Megosztás/Mentés

Apache, osztott mappa virtuális gépen - A fájlok nem frissülnek a böngészőben

Nem szeretek kérdezni, ha nem sürgős a megoldás. Szeretek magam rájönni mindenre, még ha ez időbe is telik. Nem volt ez másképp most sem, amikor virtuális gépen próbáltam futtatni apache webszervert, amihez a gazda gépről megosztottam egy partíciót az egyszerűség kedvéért. Miután a jogosultságokkal és a partíció felcsatolásával megbirkóztam, beletelt egy kis időbe, mire google-lal megtaláltam a megoldást a következő problémámra is:

Megosztás/Mentés

PHP fordítási hiba: /usr/bin/ld: cannot find -lltdl

Mi a teendő, ha a make parancs futtatása után a következő hibaüzenet fogad?

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1

Bizonyos kiterjesztések igényelnek egyéb könyvtárakat. Jó esetben már a configure futtatásakor kiderül, de ha nem, akkor a make fog elszállni hibával. A fenti hibaüzenet az mcrypt bővítmény befordításakor jön elő például. A -lltdl arról árulkodik, hogy az ltdl könyvtár hiányzik.

Megoldás: Feltelepíteni a libltdl-dev könyvtárat.
ubuntu linuxon: sudo apt-get install libltdl-dev

Megosztás/Mentés

Rekordlista-szerű tömbök fa struktúrába rendezése - Fa menüstruktúra

Gyakori feladat olyan menüket készíteni, amik fa struktúrában épülnek fel és akár egy javascript program készít belőle lenyíló menüt. Vagy akár csak egy oldaltérképre is gondolhatunk. A következő megoldásom főként azon alapszik, amikor egy adatbázisban tárolunk valamilyen adatokat. Legyen az többszintű kategória rendszer vagy menüszerkezet. Ilyenkor többnyire van egy egyedi azonosító. Amire az alárendelt rekordok hivatkoznak egy másik mezőben. Emellett persze egyéb adatokat tartalmaz a rekord. Legalább egy megjelenítendő mező is van, ami például a menü szövege. De lehet hozzá leírás is rendelve. Különböző listák lehetnek, de ami közös bennük, az a felépítés módja. Azon túl más lehet a megjelenítés. Az egyiket például egyszerű rendezetlen listában kell megjeleníteni, a másikat talán már táblázatban. A harmadikat pedig csak tabulátorokat használva. Ráadásul ha már html megjelenítésről beszélünk, ott képbe jön a css is. HTML attribútumok, osztályok. Célszerűen, lehetőleg elérhetővé téve minden elemhez egy hivatkozást, amivel egyedien lehet szükség esetén formázni akár a második menüelem 3. gyerekének 1 gyerekét. Stb... Erre mutatok egy lehetséges, ám nem mindenre kiterjedő megoldást.

Megosztás/Mentés

R.E. Login 2.0 -tól oldalak megtekintésének korlátozása és jogok (rangok).

Kérek mindenkit, akinek nem a rangokkal, oldalak megtekintésével van problémája, a következő oldalon kérdezzen:
Meghívós loginrendszer - R.E. Login v2.0

Ez a login talán a legnépszerűbb programom. De való igaz, hogy nem készítettem hozzá részletes használati útmutatót. Mivel egy komplett leírásra egyszerre nincs időm, úgy döntöttem, a leggyakrabban feltett kérdésekre válaszolok. Amik egyben a leglényegesebbek is.

Hogyan kössem regisztrációhoz egy oldal megtekintését?

Teljes oldal letiltása

Ebben a verzióban létezik egy System osztály, ami többek között tartalmaz egy protectedSite() nevű metódust. Ez a metódus mondja meg a loginnak, hogy az adott oldal védett. Tehát nem tekintheti meg akárki. Paraméter nélkül hívva csak a belépést követeli meg. És ilyenkor a config-ban beállított ( Telepítéskor megadott, vagy utólag a classes/Config.class.php -ben beállított ) főoldalra irányít át, vagy külön beállított „Védett oldal fájlja” jelzésű ( config fájlban FILE_PROTECTED_SITE konstans ) oldal esetén utóbbira..

  1. <?php
  2. require_once 'init.php';
  3. System::protectedSite();
  4. ?>
  5. Amit ide írok, azt kizárólag belépett user tekintheti meg. A többi át lesz irányítva.
Megosztás/Mentés

Szöveg első N karakterének kinyerése reguláris kifejezéssel, php-val

Az előző bejegyzésemhez hasonló megoldást mutatok, csak most nem adott számú szót vág le a függvény egy szövegből, hanem karaktereket. Szintén állítható, hogy mi kerüljön a levágott szöveg végére, ha volt mit vágni. És szintén megadható, hogy unicode szövegként legyen-e értelmezve a megadott string. Itt mégis a lényegesebb paramétere a függvénynek a 3. paraméter. Ha egy szövegben pont egy szót kéne ketté vágni, nem biztos, hogy jól mutat. Vegyük példának azt a szöveget, hogy: „Mi ez a foszfor?”. Ennek az első 11 karakterét levágva fixen elég érdekes eredményt kapnánk, ami nem biztos, hogy megengedhető. A következő függvény harmadik paraméterével szabályozható, hogy a szövegben a félbevágott szavakat be kell-e fejezni, vagy esetleg el sem kell kezdeni. Netán nyugodtan meg lehet vágni bárhol. A megoldás most is reguláris kifejezésekkel működik, bár az mb_substr függvényt is használhattam volna.

Függvény

  1. /**
  2.  * Szöveg első N karakterének kinyerése
  3.  *
  4.  * @param int $n Hány karakter kell
  5.  * @param string $str A string, amiből az első N karakter kell.
  6.  * @param bool $wordwrapmod Ha null, akkor szavak közben is megvághatja  szöveget.
  7.  *                                                      Ha true, akkor befejezi a szót, aminek a közepén vágna.
  8.  *                                                      Ha false, akkor el sem kezdi a szót, aminek a közepén vágna.
  9.  * @param bool $unicode Unicode karaktereket is értelmezzen.
  10.  * @param string $more Tetszőleges szöveg, jelölés, ami akkor kerül az eredmény mögé,
  11.  *                                              ha vágni kellett belőle.
  12.  * @return string A levágott első N karakter
  13.  */
  14. function firstNChar($n, $str, $wordwrapmod = null, $unicode = true, $more = ' ...')
  15. {
  16.         $php53 = version_compare(PHP_VERSION, '5.3') >= 0;
  17.         $w = $php53 ? '\w' : ($unicode ? '\p{L}\p{N}' : '\w');
  18.         $W = $php53 ? '\W' :  '^'.$w;
  19.         $x = $b = '';
  20.         if ($wordwrapmod) {
  21.                 $x = '(?(?=['.$w.']+)['.$w.']+)';
  22.         } else if (!is_null($wordwrapmod)) {
  23.                 $b = '(?=['.$W.']+)';
  24.         }
  25.         return preg_replace('~^(?>(.{0,'.(int)$n.'})'.$b.$x.').+$~is'.($unicode ? 'u' : ''), '$1'.$more, $str);
  26. }

Példák

  1. $nl = '<br />'.PHP_EOL;
  2. echo firstNChar(10, "Ez egy szöveg").$nl;
  3. echo firstNChar(10, "Ez egy szöveg", false).$nl;
  4. echo firstNChar(10, "Ez egy szöveg", true).$nl;
  5. echo firstNChar(10, "Ez egy szöveg", null, false).$nl;
  6. echo firstNChar(10, "Ez egy szöveg", null, true, ' <a href="">&raquo;</a>').$nl;

Eredmény

  1. Ez egy szö ...<br />
  2. Ez egy ...<br />
  3. Ez egy szöveg<br />
  4. Ez egy sz� ...<br />
  5. Ez egy szö <a href="">&raquo;</a><br />
Megosztás/Mentés

Szöveg első N szavának kinyerése reguláris kifejezéssel, php-val

A következő függvény az első N darab szót tudja kinyerni egy szövegből. Figyelembe veszi, hogy bár vessző, pont, stb... után szóköz kell, ezt nem mindenki tartja be. Ha egy mondat záródik az N. szó után, akkor a mondatzáró jelet is meghagyja. Egyébként levágja. Az N. szó után, ha az eredmény nem az egész szöveget tartalmazza, tetszőleges karakterlánc kiírható. Alapértelmezetten a három pont. Be lehet kapcsolni, hogy unicode karaktereket is tartalmaz-e a szöveg, vagy sem. Alapértelmezetten true-ra van állítva.

Függvény

  1. /**
  2.  * Szövegből első N szó kinyerése
  3.  *
  4.  * @param int $n Hány szó kell a szöveg elejéről
  5.  * @param string $str A forrás szöveg
  6.  * @param bool $unicode Unicode karakterek lehetnek-e a szövegben.
  7.  * @param string $more Az eredmény szöveg mögé írt karakterlánc, ha az eredmény nem a teljes szöveg.  
  8.  * @return string
  9.  */
  10. function firstNWord($n, $str, $unicode = true, $more = ' ...') {
  11.         $php53 = version_compare(PHP_VERSION, '5.3') >= 0;
  12.         $w = $php53 ? '\w' : ($unicode ? '\p{L}\p{N}' : '\w');
  13.         $W = $php53 ? '\W' :  '^'.$w;
  14.        
  15.         return preg_replace('~^(\s*['.$w.']+'.
  16.                         str_repeat('['.$W.']+['.$w.']+', $n-1).
  17.                         '(?(?=[?!:;.])
  18.                                 [[:punct:]]\s*
  19.                         ))\b(.+)$~isx'.($unicode ? 'u' : ''), '$1'.$more, $str);
  20. }

A függvény elején levő verzió ellenőrzés azért kellett, mert 5.3 -ban már a \w is illeszkedik ékezetes karakterre.

Példák

  1. $nl = '<br />'.PHP_EOL;
  2. echo firstNWord(5, "Ez egy").$nl;
  3. echo firstNWord(5, "Ez egy.").$nl;
  4. echo firstNWord(4, "Ez egy szöveg.Amiből megtartok 4 szót.").$nl;
  5. echo firstNWord(3, "Ez egy szöveg. Amiből megtartok 3 szót.").$nl;
  6. echo firstNWord(5, "Ez egy szöveg,amiből megtartok 5 szót.", true,  ' <a href="#">&raquo;</a>').$nl;
  7. echo firstNWord(5, "Ez egy szöveg,amiből megtartok 5 szót.", false,  ' <a href="#">&raquo;</a>').$nl;

Eredmény

  1. Ez egy<br />
  2. Ez egy.<br />
  3. Ez egy szöveg.Amiből ...<br />
  4. Ez egy szöveg.  ...<br />
  5. Ez egy szöveg,amiből megtartok <a href="#">&raquo;</a><br />
  6. Ez egy szöveg,amib <a href="#">&raquo;</a><br />

Bár a fenti példákra működik a megoldás, nem kizárt, hogy nem tökéletes.

Megosztás/Mentés