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

PayPal - Rendszeres, automatikus átutalás lemondása, avagy megújuló előfizetés

FIGYELEM: Ez a leírás elavult!
A visszajelzések alapján a PayPal változása miatt a lenti megoldás már nem működik. Friss információk a hozzászólásokban.

PayPal

Manapság elterjedt fizetési lehetőség a PayPal fiókon keresztül történő manuális vagy automatikus tranzakció. Ez utóbbi annyit jelent, hogy egy bizonyos szolgáltatásra úgymond feliratkozunk, és rendszeres jelleggel egy adott összeg levonásra kerül az elérhető PayPal egyenlegünkből, vagy annak híján a megadott bankszámlánkról, ha hozzárendeltünk egyet a fiókhoz. A fizetésnek ez a része még mondhatni, egyszerű. Ráadásul úgy látom, a fizetésről több leírás szól, mint annak lemondásáról.

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

MySQL WorkBench és Ubuntu 11.10 Oneric

Már egy ideje feltűnt, hogy nem indul el a MySQL WorkBench -em, de épp nem volt sürgős megoldani és gondoltam, biztosan valamit én csinálok rosszul. De mint ma kiderült, nem vagyok egyedül a problémával. Viszont van rá megoldás. Ráadásul egész egyszerű.

Valójában a MySQL WorkBench elindul, de a Splash képernyőnél meg is áll. Viszont fél perc google után megtaláltam a következő oldalt: MySQL Workbench 5.2.34 building fails on Oneiric (Ubuntu 11.10) beta. Ami meg is oldotta a problémám. Ugyanis elég a splash screen betöltése után nyomni egy ALT+F4 billentyűkombinációt, ami - gondolom - bezárja a splash screent és betölt rendesen a workbench.

Remélem, ezt a lépést sem kell sokáig elvégezni, de addig is vészmegoldásnak jó. A fent linkelt oldalon még javasolnak több megoldást is, de ennek egyszerűsége mindent ver.

Szerkesztve: 2011. december 20. 14:55
Vagy egyszerűen fel lehet telepíteni a legfrissebb workbench verziót :) Hát igen. Ezt lehet, a bejegyzés írása előtt is kipróbálhattam volna.

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