‘Terminal’ címkével ellátott bejegyzések

Tipp PHP-s hibakereséshez Mac és Linux alatt

2011. szeptember 1. csütörtök

Biztosan minden webfejlesztőnek megvan a maga kis megoldása – a fejlesztés mondhatni legutálatosabb részéhez – a hibakereséshez. Ennek ellenére biztosan lesznek azért olyan olvasói is ennek az írásnak, akiknek segíteni tudok az itt leírtakkal.

Ebben a bejegyzésben arról lesz szó, hogy hogyan tudjuk a különböző, PHP kódok futtatása alatt keletkező adatokat, információkat, üzeneteket a böngésző ablaka helyett egy egyszerű egy naplófájlba kiírni, valamint hogy hogyan tudjuk ezt a fájlt megtekinteni.

Lássunk is neki: nyissuk meg a parancssort és hozzuk létre egy naplófájlt erre a célra (természetesen az elérési út is és a fájlnév is lehet tetszőleges):

touch ~/Sites/webdev.log

Ezzel létrehoztuk a naplófájlunkat. Ezek után nincs más dolgunk, mint elindítani a /Applications/Utilities/Console.app nevű programot, majd azzal megnyitni a fent létrehozott fájlt. A Console.app folyamatosan mutatja (és frissíti) a fájl tartalmát, így azt valós időben láthatjuk.

Akik a Terminal használatához vannak inkább szokva, vagy akik valamilyen Linuxot használnak, a Console.app helyett használhatják a parancssort, ahova a következőket kell beírni:

tail -f ~/Sites/webdev.log

A fenti parancs gyakorlatilag ugyanazt csinálja, mint a Console.app, így pusztán megszokás kérdése, hogy ki melyiket használja. Én azért szeretem inkább a Terminalt használni, mert az egyrészt általában amúgy is nyitva van már, másrészt pedig kevesebb helyet foglal az asztalon, mint a Console.app.

Egy apró megjegyzés: Mac-en és Linux alatt általában az alábbi könyvtárban találhatjuk a logfájlokat: /var/log

PHP kód a naplófájlba íráshoz

PHP-s fejlesztéseknél használom ezt a megoldást, de természetesen nem csak és kizárólag PHP alatt használható. Minden esetre én most közzéteszem az általam írt és használt néhány soros PHP függvény egyszerűsített változatát, ami kiírja az imént létrehozott fájlba a tartalmat:

<?php
function trace( $msg ) {
  $logfile = ‘webdev.log’;
  $msg = date( ‘M d H:i:s’, mktime() ) . ‘ ‘ . $msg . “\n”;
  if ( is_writeable( $logfile ) ) {
  $fp = fopen( $logfile, ‘a+’ );
    if ( $fp ) {
      if ( fwrite( $fp, $msg ) === true ) {
        $content = fread( $fp, filesize( $logfile ) );
        fwrite( $fp, $content );
      }
      fclose( $fp );
    }
  }
}
?>

Nekem ez az egész csak annyiban különbözik a fent bemutatott változattól, hogy van benne még egy plusz feltétel az elején, így a beállításoknál tudom szabályozni, hogy lefusson-e a függvény, vagy sem.

A rend kedvéért azért még leírom a használatát az unalomig ismételt „Hello World!”-el, bár aki ezt a fenti néhány sorból nem érti, az valószínűleg nem is nagyon fog hibákat keresgélni…

trace( ‘Hello World!’ );

A végeredmény pedig valami hasonló lesz a parancssorban és a Console-ban:

Megéri az elején ezt a néhány percnyi időráfordítást, mert utána nagyon megkönnyíti a fejlesztés alatti hibák keresését és nem utolsó sorban sokkal elegánsabb megoldás az ilyen dolgok logfájlba való küldése, mint az, hogy a böngészőben a tartalom közé küldi ki a PHP a fejlesztéshez / debug-hoz szükséges – csak számunkra fontos – információkat.

Csoki Tools

2011. augusztus 1. hétfő

Ha egyszer megbarátkozunk a parancssorral, akkor lehet akár milyen csillogó-villogó operációs rendszerünk, időnként mégis vissza-vissza fogunk vágyni parancssoros módba, ahol ugyanazt a feladatot sokszor sokkal egyszerűbben és gyorsabban végezhetjük el, mint akármilyen GUI alatt. Az első lépést viszont ebbe az irányba – vagyis hogy megbarátkozzunk ezzel a felülettel – itt is magunknak kell megtennünk.

Már régebb óta szemeztem vele, korábban már le is töltöttem a wget és az mc csomagokat, csak mivel konkrétan nem kellettek eddig semmire, nem is telepítettem őket. A napokban viszont aktuális lett a dolog és úgy gondoltam, hogy megírom ezt a bejegyzést, hátha más is hasznát veszi.

Csokoládé Tools

A Csokoládé Tools oldala 2010. januárjában indult útjára. Az oldal azóta új dizájnt kapott és új helyre költözött, jelenleg a csokitools.tumblr.com címen érhető el. Bár én Linuxos környezetben az oldalon elérhető dolgok közül csak a wget-et és az mc-t használom rendszeresen, de a többi parancssoros szoftver is jól jöhet szinte bárkinek, különös tekintettel az egyszerűségre, a jó paraméterezhetőségre és nem utolsó sorban az ingyenességre.

A telepítés

A Csoki Tools oldal talán egyetlen hiányossága az, hogy a teljes telepítési útmutató csak a következőből áll: How to install: sudo unzip -d /usr/local [drag the zip file here]

Meggyőződésem, hogy egy kezdőt – aki eleve idegenkedik a parancssor használatatól – ez csak mégjobban elriaszt, hiszen egy hozzá nem értő ezzel a sorral semmit sem tud kezdeni. Persze nem sok esély van arra, hogy pont azok próbálják meg feltenni, akik amúgy sem értenek hozzá, de adjuk meg a lehetőséget azoknak is, akiknek ez jelenleg még gondot okozhat. Próbáljuk meg megszerettetni a parancssor világát azokkal, akik még nem ismerik, ugyanakkor érdeklődnek utána, viszont egyedül nem mernek belevágni, esetleg nincs kitől megkérdezni…

Úgy gondoltam, hogy az egysoros utasítás helyett inkább leírom azt a pár lépést, amit el kell végezni a fenti szoftverek használhatóvá tétele érdekében (nem kell megijedni az alábbi listától, nem olyan vészes, mint amilyennek látszik). Példának a wget-et fogom írni, de ez tetszőlegesen alkalmazható a többi csomagra is, csak ügyeljünk a terminal parancsok bemásolása vagy beírása közben a fájlnévre, esetleg az elérési utakra.

1.) Töltsük le a csokitools.tumblr.com oldalról a wget-et.

2.) Nyissuk meg a Terminalt, vagy egy tetszőleges alkalmazást, mellyel elérhetjük a parancssort. A bejegyzés további részében feltételezem, hogy a Downloads könyvtárba töltöttük le a fent említett csomagot.

3.) Írjuk be a parancssorba a következő parancsot (ezzel átmásoljuk a Downloads könyvtárunkból a /usr könyvtárba az imént letöltött tömörített fájlt):

sudo cp ~/Downloads/wget-1.12.zip /usr

4.) Ez után pedig csomagoljuk ki a tömörített fájlt úgy, hogy a benne lévő állományok egyből a helyükre kerüljenek:

sudo unzip /usr/wget-1.12.zip -d /usr

5.) Most töröljük az előbb átmásolt tömörített fájlt a /usr könyvtárból (csak a rend kedvéért):

sudo rm /usr/wget-1.12.zip

6.) Ennyi volt az egész. 🙂 Most már rendelkezésre áll a parancssorban az imént feltett alkalmazás.

A fenti csomagokat ellátták man oldalakkal is, melyek segítenek, ha nem lennénk képesek fejben tartani az összes kapcsolót és lehetőséget (már pedig nem vagyunk képesek). A man oldalak elérése a man <csomagnév> parancssal történik, tehát wget esetében: man wget

Ha elakadtunk, használhatjuk a <csomagnév> ––help parancsot is.

Lássuk egy példát, hogy mire jó ez a gyakorlatban

A napokban hirtelen szükségem lett egy olyan szoftverre, amivel egymás után tudom letölteni a megadott állományokat (a Safari a link Downloads ablakra húzásakor azonnal elkezdni letölteni a fájlt akkor is, ha már egy másik letöltés folyamatban van). Nekiálltam letöltésvezérlő szoftvereket keresgélni Mac-re, aztán a sok ronda GUI-val rendelkező, ill. a sok 20-25 dolláros szoftver között keresgélve beugrott, hogy ezt a wget is tudja. A wget-et pedig talán a legegyszerűbben úgy lehet Mac-re feltenni, hogy a Csoki Tools oldalról letöltjük és néhány karakter Terminálba pötyögésével már van is egy okos, ingyenes, jól paraméterezhető parancssoros szoftverünk a letöltésekhez. 🙂

Írok is egy példát a használatára, ami végtelenül egyszerű. A Downloads könyvtárba szeretnék letölteni egy szerverről mondjuk 3 db, 500 MB méretű fájlt. Választhatunk, hogy 1.) ott ülünk a Safari mellett és egyenként letöltjük őket, 2.) egymás után ráhúzzuk a Downloads ablakra a 3 db 500 MB-os fájlra mutató linket (nem túl elegáns megoldás, mert a Safari egyszerre kezdi el letölteni mindhármat), 3.) beszerzünk egy letöltésvezérlő szoftvert, vagy pedig 4.) egyszerűen a következő képpen leszedjük a fájlokat wget segítségével (az alábbi parancs valójában egy sorból áll):

wget -P ~/Downloads/ http://server.tld/file1.zip http://server.tld/file2.zip http://server.tld/file3.zip

A -P kapcsoló egy úgynevezett directory prefix, ami ebben az esetben azt jelenti, hogy segítségével megadhatjuk azt, hogy hova mentse a fájlokat. Ha nem használjuk ezt a kapcsolót, akkor a wget simán a home könyvtárunkba fogja letölteni a fájlokat.

Egyszerű ez, csak ne idegenkedjünk a parancssoros dolgoktól, helyette inkább bátran barátkozzunk meg velük… 🙂

Fájlok összefűzése, egyesítése Mac-en és Linux alatt

2011. január 7. péntek

Arról írnék néhány szót, hogy hogyan tudunk kettő, vagy több fájlt egymásba fűzni Mac OS X (vagy valamilyen Linux) alatt. Léteznek erre a feladatra különféle ingyenes és fizetős segédprogramok is, de tulajdonképpen nincs rájuk szükség, mert terminál segítségével ez a feladat egyszerűen és gyorsan megoldható.

Nyissuk meg a Terminált, navigáljunk el abba a könyvtárba, ahol az összeillesztendő fájlok vannak, majd írjuk be a következő parancsot:

cat file.001 file.002 > file.iso

Ahol a file.001 és a file.002 tartalma egy új fájlba, a file.iso-ba másolódik a megadott sorrendben. Amennyiben kettőnél több fájlunk van, egyszerűen csak egymás után felsoroljuk őket szóközzel elválasztva, a relációsjel előtt.

A továbbiakban leírnék még néhány nagyon alapvető dolgot (hátha valaki pont ezeknél akad meg).

Így tudunk elnavigálni egy adott könyvtárba (tételezzük fel, hogy a Downloads könyvtárban vannak a fent említett fájlok):

cd /Users/csaba/Downloads

ahol a csaba szót mindenki cserélje ki a saját felhasználói nevére. A fenti két parancsot egy parancsként is összekombinálhatjuk, a fájlok elérési útvonalának abszolút megadásával a következő képpen (egy sorba írjuk az alábbi parancsot):

cat /Users/csaba/Downloads/file.001 /Users/csaba/Downloads/file.002 > /Users/csaba/Downloads/file.iso

A fenti példa tömörítőprogramok által feldarabolt fájlokra (pl. RAR) nem alkalmazható és természetesen nem alkalmazható bármilyen fájlra eredményesen.