Použitím
Matlab
Compilera je možné vytvárať spustiteľné súbory (skripty), ktoré môžu
byť volané
WEB serverom pomocou rozhrania CGI (Common Gateway Interface). CGI
skripty generujú
HTML kód a zapisujú ho na štandardný výstup (stdout). Vstup údajov do
CGI
skriptu je v prípade metódy GET, realizovaný pomocou
systémových
premenných. Obzvlášť dôležitá je QUERY_STRING, z ktorej môže
skript
čítať vstupné dáta, napríklad z formulára. Skript vytvoríme priamo v
jazyku
Matlab. Použitím funkcií getenv() sa
načíta obsah systémovej premennej QUERY_STRING. Jej obsah je
reťazec
obsahujúci dáta zo vstupnej stránky. Dáta z jednotlivých vstupných polí
v tomto
reťazci sú navzájom oddelené znakom '&' a sú formátované nasledovne:
pole1=hodnota1&pole2=hodnota2&pole3=hodnota3&
. . .
Dáta je
následovne
potrebné načítať z reťazca. Ak sa medzi vstupnými údajmi nachádzajú
matice
zapísané ako reťazce v tvare [1
2; 3 4],
prehliadač v URL nepovolené znaky '[',
';' a ']' konvertuje do hexadecimálneho kódu v
tvare '%xx', kde xx je hexadecimálny kód
znaku. Tieto
znaky je potrebne v Matlabe konvertovať naspäť do pôvodného tvaru,
napr.
funkciou strrep() .
Nasledovne je potrebné
štandardnými metódami rozdeliť reťazec na jednotlivé polia výberom z
textového
reťazca a ich hodnoty konvertovať, a
prideliť správnym matlabovským premenným funkciami str2double() a str2num().
Ďalším postupom je výpočet a
spracovanie vstupných údajov.
Výpis HTML stránky so spracovanými
dátami CGI skriptom na štandardný výstup musí začať predpísanou
hlavičkou s
typom obsahu:
fprintf(1,'Content-type:
text/html\n'); % typ vystupnych udajov
fprintf(1,'\n'); % povinny prazdny riadok
Prvý
parameter
funkcie fprintf interface object
je nastavený na 1, čo znamená zápis na štandardný výstup. Za hlavičkou
nasleduje výpis samotnej HTML stránky s vloženými výstupnými hodnotami.
V prípade potreby grafického
výstupu zo CGI skriptu, je potrebné urobiť snímok otvoreného „figure window“ funkciou hardcopy(),
ktorá vráti maticu s grafickým objektom ďalej spracovávateľnými
funkciami
image processing toolboxu. To je vhodné najmä vtedy, ak potrebujeme
zmeniť veľkosť
snímku alebo robiť iné grafické úpravy snímku. Potom obrázok uložíme
funkciou imwrite(). Druhá, jednoduchšia možnosť
je použiť funkciu print(), ktorá vloží
aktuálny obsah „figure window“ priamo
do súboru. Zmena rozlíšenia je možná
parametrom –rcislo , kde číslo
znamená počet bodov na palec. Lepšie výsledky však dosiahneme prvou
metódou.
Hotový skript
(M-file) treba dôkladne odskúšať a odladiť v Matlabe. Aj keď obsah
QUERY_STRING
je nutné napísať ručne, je to oveľa jednoduchšie, ako hľadať chybu v
nefunkčnej
aplikácii už nasadenej na serveri.
Skript
skompilujeme Matlab Compilerom príkazom mcc:
Príklad:
mcc
-m mycgi.m
Matlab
Compiler vytvorí súbory mycgi.exe (samotný CGI skript), mycgi.ctf
(Component
Technology File), zdrojové súbory aplikácie v jazyku C a niekoľko
ďalších
súborov. Pre nasadenie na server sú dôležité iba súbory
mycgi.exe a mycgi.ctf.
Pri ich inštalácii na server je potrebné
dôsledne nastaviť server pre použitie CGI skriptov, obzvlášť si treba
dávať
pozor na práva na spúšťanie skriptov, a ďalej, aby skript, resp.
používateľ IUSR_<meno pocitaca>,
mal práva zapisovať dáta na disk minimálne v priečinku,
v ktorom sa nachádza. CTF archív sa pri prvom spustení skriptu musí
rozbaliť do
pracovného priečinka CGI skriptu. Ak sa tak nestane, pravdepodobne sa
jedná o
problém s právami. Pri prvom spustení aplikácie sa môže v prehliadači
objaviť
chybové hlásenie:
„CGI Error: The specified CGI application
misbehaved by not returning a complete set of HTTP headers.“