Common Gateway Interface
Skrypty CGI w języku interpretera Bourne’a
Hello World!
#!/bin/bash
echo "Content-Type: text/plain"
echo
echo "Hello World!"
Aktualna data i godzina
#!/bin/bash
echo "Content-Type: text/html"
echo
echo "<html>"
echo "<body>"
echo -n "<h1>"
date "+%Y-%m-%d %H:%M:%S"
echo "</h1>"
echo "</body>"
echo "</html>"
Przekierowanie
#!/bin/bash
echo "Location: http://www.cs.put.poznan.pl"
echo
Program CGI w języku C
#include <stdio.h>
#include <stdlib.h>
#include <cgi-util.h>
int main(int argc, char * argv[])
{
int res;
char* nazwisko;
char* imie;
res = cgi_init();
printf("Content-type: text/html\n\n");
if (res != CGIERR_NONE)
{
printf("Error # %d: %s<p>\n", res, cgi_strerror(res));
exit(0);
}
nazwisko = (char*)cgi_getentrystr("nazwisko");
imie = (char*)cgi_getentrystr("imie");
printf("<html>\n<body>\n");
printf("<h1>Odczyt parametrów</h1>\n");
printf("<p>Nazwisko=%s\n", nazwisko);
printf("<p>Imię=%s\n", imie);
printf("</body>\n</html>\n");
cgi_quit();
return(0);
}
Kod programu jest zapisany w pliku c-example.c
. Do kompilacji potrzebna
jest biblioteka cgi-util:
# gcc -o c-example.cgi c-example.c -lcgi-util
Programy CGI w języku Python
Argumenty skryptu
Wersja tekstowa args-plain.py
:
#!/usr/bin/env python3
import cgi
print("Content-type: text/plain\n")
args = cgi.FieldStorage()
print("Lista wszystkich argumentów:")
for x in args:
print(x + "=" + args[x].value)
Wersja HTML args-html.py
dodatkowo załącza moduł cgitb do wyświetlania komunikatów o
błędach w skrypcie:
#!/usr/bin/env python3
import cgi
import cgitb
print("Content-type: text/html\n")
cgitb.enable()
print("<html>\n<body>")
args = cgi.FieldStorage()
print("<h1>Lista wszystkich argumentów</h1>")
print("<pre>")
for x in args:
print(x + "=" + args[x].value)
print("</pre>\n</body>\n</html>")
Obsługa baz danych SQLite
Tworzenie bazy danych realizuje skrypt sqlite-init.py
:
#!/usr/bin/env python3
import sqlite3
import cgitb
print("Content-type: text/html\n")
cgitb.enable()
conn = sqlite3.connect("data/sqlite.db")
c = conn.cursor()
c.executescript("""
DROP TABLE IF EXISTS pracownicy;
CREATE TABLE pracownicy(
id INT PRIMARY KEY,
nazwisko VARCHAR(30),
imie VARCHAR(30),
zarobki DOUBLE,
wiek INT);
INSERT INTO pracownicy VALUES(1, 'Kowalski', 'Jan', 3500, 32);
INSERT INTO pracownicy VALUES(2, 'Nowak', 'Barbara', 3650, 33);
INSERT INTO pracownicy VALUES(3, 'Kaczmarek', 'Jacek', 2400, 24);
INSERT INTO pracownicy VALUES(4, 'Potocka', 'Katarzyna', 2800, 26);
INSERT INTO pracownicy VALUES(5, 'Niewiadomski', 'Jerzy', 2200, 22);
""")
conn.commit()
c.close()
print("OK")
Wyświetlanie bazy danych realizuje skrypt sqlite-select.py
:
#!/usr/bin/env python3
import sqlite3
import cgitb
print("Content-type: text/html\n")
cgitb.enable()
conn = sqlite3.connect("data/sqlite.db")
c = conn.cursor()
c.execute("select * from pracownicy")
print("<pre>")
for row in c:
print(row[1],row[2])
c.close()
print("</pre>")
Dodawanie krotki realizuje skrypt sqlite-insert.py
#!/usr/bin/env python3
import sqlite3
import cgitb
print("Content-type: text/html\n")
cgitb.enable()
conn = sqlite3.connect("data/sqlite.db")
c = conn.cursor()
c.execute("INSERT INTO pracownicy VALUES(6, 'Nowy', 'Hektor', 4444, 37)")
conn.commit()
c.close()
print("OK")
Zobacz również: