szz's blog

Feltöltött fájltípus: kliens vagy szerver oldalon dől el?

Most botlottam egy érdekes problémába.
Csináltam egy php alapú webalkalmazást, ahová fel kell tölteni egy .csv fájlt.
A biztonság kedvéért ráellenőrzök a fájl típusára is:

Ha ez a ($_FILES["file"]["type"] == "text/csv"), akkor továbbengedem a futást.
A linuxos böngészőmből simán lefutott egy adott inputra a program. Egy ismerősöm azonban Microsoft Windows operációs rendszer alól futtatta ugyanezzel a fájllal a webalkalmazást, és neki hibát adott. Az ő kedvéért be kellett tennem:
|| ($_FILES["file"]["type"] == "application/vnd.ms-excel")

Azt hittem korábban, hogy ezt a szerver dönti el, hogy az adott fájl milyen típusú. Ezek szerint ez nem így van.

Egyébként az utóbbi időben törekszem arra, hogy a parancssori szkriptjeimet átültetem webes alapúvá, hogy szakavatatlanok is tudják használni az intraneten. (Nagy segítség ehhez az exec() parancs, aminek visszatérési értéke is van.)

Arch linux a fedélzeten

A nyári szabadságom két hete után (melyből néhány napot a kiváló könyvtárral és medencékkel rendelkező Rosinantéban, egy elérhető (árú), örömforrásokban igen gazdag, vidéki éttermiség számára is ajánlott helyen töltöttem) ma volt az első munkanapom: ezt pedig teljes egészében Arch linuxszal töltöttem.

Az elmúlt években csak az Ubuntuig jutottam el munkahelyileg (legalábbis olyan szinten, hogy biztos lehettem abban, hogy minden üzembiztosan megy -- beleértve PCoIP-s vmware-t és Tandem emulátort és egyéb szkripteket), de most átléptem ezt a küszöböt, és valami szép linuxot is el tudtam kezdeni használni.

Svájci bicska - perl

Miközben azon igyekeztem, hogy egy korábbi blogbejegyzésem kapcsán felmerült éles-adat-életlenítéshez valami karatker-rotációt végezzek, találtam egy remek weboldalt, amelyen különféle perl trükkök láthatóak. Nekem élmény volt: http://www.math.uiuc.edu/~hildebr/computer/perltips.html

Ugyanis időről időre újra előkerül munkám során, hogy perlt használjak, de aztán a perlmentes hetek alatt sokat felejtek. Jó egy ilyen oldal, ahol a lényegesebb dolgok össze van foglalva.

Amúgy számomra az alapértelmezett svájci bicska inkább a php (még apróbb feladatokra is) vagy persze a bash, megspékelve cut-grep-sort-uniq-sqlite3-bc-diff parancsokkal. Ha vannak lelkes "használd inkább ezt!" hozzászólók, akkor ne kíméljetek.

Takarítsunk a lemezen

Amikor kezd megtelni a merevlemezem, megszáll az ihlet, hogy gyorsan kiderítsem, melyek a feleslegesen őrzött nagy fájlok. Régebben a KDE alapú filelight programot használtam efféle áttekintő vizsgálatokra. Aztán rájöttem, hogy megvan erre a Gnome alapú eszköz is: baobab. Bizonyos helyzetekben azonban a parancssori megoldásnak párja nincs.

A közismert du programnak van egy interaktívabb (ncurses alapú) változata, az ncdu, amivel igazán kiválóan lehet rátapintani a törlendő "nagy falatokra". Kérdőjel (?) használatával súgót ad; leginkább csak az r (frissítés - refresh) és a d (törlés - delete) billentyű kellett, no meg a mozgásra használt gombok.

Az rlwrap sokoldalúsága

A napokban csodálkoztam rá az rlwrap sokoldalúságára. Igazi mazsola a parancssori világ száraz kalácsában!
Egy példa, amit bash-ből lehet használni szövegbekérésre (s az alapértelmezett változat felvillantására):

order=$(rlwrap -S 'Your pizza? ' -H past_orders -P Margherita -o cat)

De lehet használni arra is, hogy érzékeny adatok parancssorba írásakor a jelszó ne kerüljön bele a historyba, vagy hogy az adatbáziskezelő kimenetét lehessen szűrni vagy less-szel görgetni... A részletek a man oldalon, pl. az Examples részen: http://linux.die.net/man/1/rlwrap
(Megj: a fenti orderes példa szintaktikai hibásan jelenik meg a man oldalon; egyrészt ` balra dőlő aposztróf kell (ezt én dollár+zárójellel cseréltem le), másrészt a -H előtt szóköz írandó.)

Tudáskiegészítés

Konkrétan az a helyzet, hogy nagyjából egyedül küzdök a linuxaimmal (Ubuntu, Arch, CentOS). Időnként szembesülök azzal, hogy egészen kicsi híja annak, hogy valami praktikus fennakadás megoldódjon, amikkel már hetek-hónapok óta küzdök (vagy megszoktam, hogy valami csak az egyik linuxon megy).

Odáig eljutottam, hogy már munkahelyi környezetben is tudom használni az Arch linuxomat (azaz lényegében utolérte a konfigurációs "szépsége" az Ubuntuét, amit már másfél éve használok).

Ami még kellene:
- A VPN kliens (automatizáltságának a) belövése.
- Az egyik munkahelyi szobámban megkeseríti az életem a proxy; vannak módszereim a megoldásra, de hátha van még profibb út.
- Szeretném érdemben használni a git-et a mindennapok során...
- Kíváncsi vagyok, más hogyan használja az Amazonos virtuális gépeit.
- A médialejátszás trükkjei is érdekelnének
- Érdekelnének apró parancssori trükkök, hogy ki mit hogyan szokott megoldani (cserébe pár finomsággal én is ki tudok rukkolni). Kedvenceim a grep, cut, rlwrap, paste, sort, uniq, sqlite3, bc, meld, geany, ssh, sshfs, bash huncutságok
- Persze tájékozódási pontokat is gyűjtök (webhelyek formájában), pl. effélékre gondolok: https://github.com/lazierthanthou/my-ubuntu-setup

Oracle parancssor ügyesítése

Megírom első blogbejegyzésem. :-)

Nagy szerencsémre a munkahelyemen rám van bízva, hogy milyen operációs rendszert és milyen eszközöket használok. Így aztán különféle linuxokon dolgozom; alapvetően Ubuntun, és néha (főleg, ha túl sokat fagyogat a LibreOffice vagy Apache OO, akkor) rákattanok a (még messze nem olyan kényelmesre belőtt) Archlinuxra. Egyébként föltett szándékom, hogy előbb-utóbb kitaposom ezt az Archlinuxot is, de hát a munkaidőből nem szeretek erre elvenni időt, így aztán ez tolódik, tolódik...

Ubuntun használtam tehát az Oracle sqlplus-t. Zavart, hogy nem megy az előző parancs szerkesztése (felfelé nyíllal), meg a kurzor gombok, delete... így aztán rákerestem a témára, és találtam egy remek kis írást. Az hagyján, hogy sikerült lefordítani, (és az sqlplus-szal azonos könyvtárba másolással) beüzemelni a gqlplus-t, ami az sqlplus felhabosítása, de még ennél is jobban tetszett, hogy van olyan, hogy "readline wrapper", azaz rlwrap. Van egy alkalmazásod, ami a szerkesztést illetően buta, mint a föld ( = sqlplus vagy akár a cpan), és egyszerűen becsomagolod a readline-ba.