Perl och CGI Innehll Perl intro Perl syntax
- Slides: 39
Perl och CGI
Innehåll • • • Perl intro Perl syntax CGI intro CGI. pm Tillstånd File upload E-post Databaser Komma igång
Perl intro • • • Mycket populärt och vanligt för CGI Hög nivå, kompakt, portabelt, snabbt Lätt att komma igång Bra på sträng- och databashantering Många färdiga program och moduler Skriptspråk som kompileras automatiskt till en form som sedan interpreteras
Perl intro • Lånat många bra idéer från andra språk: – Från UNIX's skalprogram kommer många idéer – Från C kommer syntaxen – Från Lisp kommer stödet för listor som en grundläggande datatyp • Dokumentation: – perldoc perl – perldoc CGI
Perl intro • Man kan utesluta kod och skriva om koden så att den får en egen stil (och blir nästan oförståelig): ($postcode) = ($address =~ /([AZ]{1, 2}d{1, 3}[ t]+d{1, 2}[AZ][A-Z]|[A-Z][t ]+d{5})/);
Perl intro • Exempel: #!/usr/local/bin/perl foreach (keys %ENV) { print "$_: $ENV{$_}n"; } Magiska raden berättar för UNIX vad som ska användas för att köra resten
Perl intro • Flaggor: – #!/usr/local/bin/perl –w – #!/usr/local/bin/perl –T – Varnar för farlig kod – Alla flaggor: perl -h Brukar inte använda : -)
Perl syntax Variabler/datatyper • Skalärer $x = 5; • Listor @x = (1, 2, ’hej’); • Tabeller $x{’y’} = ’z’;
Perl syntax Variabler/datatyper: skalärer • Tal eller strängar • Perl omvandlar automatiskt mellan olika typer av skalärer • Börjar med $ följt av en engelsk bokstav följt av engelska bokstäver eller siffror eller understrykningstecknet: $x = 1; $x = ”Hejsan”;
Perl syntax Variabler/datatyper: listor • Är en uppräkning (ordnad samling) av skalärer (ej listor i listor) • Man kommer åt en viss skalär i listan genom att ange dess position, första elementet har position 0 • Börjar med @
Perl syntax Variabler/datatyper: listor @lista 1 = (1, 4, 9, 16, 25, ”Vad kommer sen? ”); @lista 2 = (); Tomma listan $element = $lista 1[2]; Skalär som har värdet 9 @dellista = @lista 1[1, 3, 4]; Får värdet (4, 16, 25)
Perl syntax Variabler/datatyper: listor $lista 1[1] = 2; Elementet på plats 1 sätts till värde 2 i @lista 1 $lista 1[2, 5, 1] = (1, 2, 3); Betyder: $lista 1[2] = 1, $lista 1[5] = 2, $lista 1[1] = 3 print (10, 20, 30)[1]; Skriver ut 20
Perl syntax Variabler/datatyper: listor ($ett, $två, $tre, $fyra, $fem, $sex) = @lista 1; Betyder $ett = 1. . . osv ($ett, @två) = @lista 1; Här blir @två resten av listan $length = @lista 1; Ger längden på @lista 1
Perl syntax Variabler/datatyper: tabeller • Fungerar som ordlista där man istället för position använder ett ord som nyckel • Även här kan man bara lagra skalärer (inte lista eller tabell) • Börjar med %
Perl syntax Variabler/datatyper: tabeller $efternamn{’Kalle’} = ’Anka’; print $efternamn{’Kalle'}; Skriver ut ”Anka” %efternamn = { "Pierre", "Wijkman", "Mirjam", "Häggström” }
Perl syntax Variabler/datatyper: speciella variabler • $_ = variabel som är underförstådd i många situationer, exempel: – print $_; är samma som print; • @ARGV = lista som innehåller de argument som sändes till programmet vid start från kommandoraden • %ENV = tabell som innehåller programmets omgivningsvariabler
Perl syntax Villkorssatser if (uttryck) { satser } else { satser } sats if uttryck;
Perl syntax Loopar while (uttryck) { satser } sats while uttryck; until (uttryck) { satser } sats until uttryck;
Perl syntax Loopar for(startsats; villkor; loopsats) { satser } foreach $element (@lista) { satser }
Perl syntax Funktioner • Konstruktion: Tar emot argumenten sub x { ($a, $b, $c) = @_; return $a + $b; } • Anrop: $i = &x(1, 2, 4);
CGI intro • Till Perl finns ett stort antal moduler • Ett Perl-program som ska fungera som CGIprogram måste i huvudsak veta hur det ska: – Sända information till en HTTP-klient – Ta emot information från en HTTP-klient
CGI intro Filrättigheter • • Alla kataloger: chmod 755 i 1 Alla CGI-filer: chmod 700 1 a. cgi Alla HTML-filer: chmod 744 1 a. html Alla skrivbara filer: chmod 700 1 a_hts • Kör först vid promten, sen med browsern
CGI. pm • CGI. pm är en modul specialiserad mot CGIprogrammering som förenklar utvecklingen • Exempel: #!/usr/local/bin/perl use CGI; print header('text/plain'); http: //stein. cshl. org/~lstein/ Man måste ange MIME-type till klienten
I/O Sända information • Allt som skrivs till STDOUT tar HTTPservern emot och sänder vidare till HTTPklienten • Man måste ange MIME-typ • Normalt lägger sedan HTTP-servern på extra information i HTTP-huvudet (man kan dock instruera HTTP-servern att inte göra detta)
I/O Sända information • Exempel: print $name print header('text/plain'); 'I love Perl!'; = 'Perl'; "I love $namen"; `dir`;
I/O Ta emot information • Information från HTTP-klienten kan komma: – Inbakat i en länk (GET): • http: //www. x. y/z. cgi? id=pw – Från ett HTML-formulär (POST): • <input type=”text” name=”id”/> • Denna info når vi med: $email = param(’id’);
I/O Separera HTML och Perl-kod • Det är viktigt att HTML och Perl-kod är separata: – Ingen HTML-kod i Perl-kod – Ingen Perl-kod i HTML-kod • HTML- och Perl-kod ska gå att utveckla oberoende av varandra
I/O Separera HTML och Perl-kod • Ett knep är att använda markörer i HTMLkoden (---hits---) • Läs in HTML-sidan i Perl-koden och ersätt markören med sitt rätta värde $row =~ s/---x---/$x/; • Skriv ut allt till STDOUT print $row;
I/O Separera HTML och Perl-kod • Har man variabla HTML-strukturer så kan man använda HTML-kommentarer runt dessa • Detta markerar ett område som kan användas flera gånger • Man kan även separera data från HTML (se frivilliga uppgifter)
Sessionshantering • Egen sessionshantering eftersom HTTP är inte anslutningsorienterat: – Med omskrivning för länkar och dolda fält – Med kakor som lagras på klienten och sänds i HTTP-huvudet: $c = cookie(-name => $name 1, -value => $value 1, -expires => '+3 h'); print header(-cookie => [$c]);
File upload • Filer från HTTP-klienten till HTTP-servern • HTML-formulär med speciell encoding: <form method="post" enctype="multipart/form-data" action=”x. cgi"> <input type="file" name=”y" /> • Får ett hantag med: $filehandle = param(’y');
E-post • Sända e-post från CGI är mycket vanligt • Använda de program som finns på serversidan: system('/usr/lib/sendmail -t -oi < message'); Fil meddelandet – Här betyder flaggorna: • -t = brevets mottagare ska anges med ett From: -fält. • -oi = brevet ska avslutas när STDIN stängs (ej. )
Databaser • Data. Base Dependent (DBD) modulen kopplar till databasen, man måste ha en speciell för varje typ av databas • Data. Base Independent (DBI) modulen kopplar till Perl programmet, samma för alla databaser Databas DBD DBI Perl
Databaser • Initialisering: use DBI; • Uppkoppling: Databasen är My. SQL och finns på samma maskin, från en annan maskin: ”DBI: mysql: $db: atlas. dsv. su. se” $dbh = DBI>connect("DBI: mysql: $db", $user, $passwd) or die print "COULD NOT CONNECT: ". DBI->errstr; Handtag till databas Felet från databasen
Databaser • Hämta data: $statement = "SELECT * FROM $table ORDER BY time"; $sth = $dbh->prepare($statement) or die … osv $sth->execute() or die … osv Handtag till statement
Databaser • Hämta data: while(@row = $sth>fetchrow_array) { … osv Hämtar en rad i taget ($id, $time, $name, $email, $homepage, $comment) = @row; Hämtar ut värden ur raden
Komma igång • • • Logga in på Linux-kontot Gå till WWW: cd WWW Skapa katalog: mkdir ip 2 Chmodda: chmod 755 ip 2 Gå till ip 2: cd ip 2 Starta emacs: emacs first. cgi
Komma igång • Skriv in: #!/usr/local/bin/perl print "Content-Type: text/plainnn"; print "I love Perln"; • Spara och avsluta emacs • Chmodda: chmod 700 first. cgi • Kör från promten: . /first. cgi
Komma igång • Det skrivs ut: Content-Type: text/plain I love Perl • Starta en browser: netscape http: //atlas. dsv. su. se/~pierr e/ip 2/first. cgi • Det skrivs ut: I love Perl
- Perl cgi get post data
- Cgi linkage in perl
- Introduction to cgi
- Perl cgi programming
- Intro to perl
- Captcha crowdsourcing
- Eva och adam intro
- Konkretia
- Likheter skillnader buddhism hinduism
- Metafor
- Syntax of mkleaf is
- Cgi in java
- Common global implementation
- Cgi
- Printenv.pl exploit
- Nodejs cgi
- Slidetodoc
- Cgi interview
- Digitalcommons unl edu cgi
- Cgi security
- Chang cgi
- Cgi language
- Cgi programming on the world wide web
- Python cgi form example
- C cgi
- Cgi ecommerce
- Cgi
- Perl tutorial javatpoint
- Python cgi tutorial
- Theodoros anagnostopoulos
- Kerjasama cgi
- Blast ncbi
- Advantages and disadvantages of common gateway interface
- Cgi-bin/printenv.pl exploit
- Cgi concepts in web technology
- Php global exception handler
- Introduction to perl
- Perl bioinformatics
- Perl hash table
- Perl diamond