Web server, cgi, perl, etc by ojp13483

VIEWS: 482 PAGES: 33

									Web server, cgi, perl, etc
Snabbgenomgång i hur man kan använda en webserver och perl




                                                             Jan Erik Moström
Vad måste man förstå

• Principerna för hur en webserver fungerar
• Förstå hur ett “markup language” fungerar, t.ex. HTML
• bra att kunna: CSS - Cascading Style Sheet
  hur man styr utseendet på websidorna
• Förstå hur dynamisk/statiska websidor
• Förstå klient/server skripts
• Hur får man webservern att anropa ett skript och skicka
  resultatet till en webläsare

                                                            Jan Erik Moström
Principerna för hur en webläsare fungerar




                                       Jan Erik Moström
              URL




      HTML sida (formulär)




          Information

CGI




         HTML sida




                             Jan Erik Moström
Principerna för ett markup language

• Finns många olika språk
  • “Formella”
    • XML, XHTML, HTML, SGML
  • “Light weight”
    • Textile
    • Markdown




                                      Jan Erik Moström
# Intro

This is a quick intro on how to use subversion, it's not intended to be a
complete tutorial of subversion or even a proper introduction to subversion.
It's intended for those who want to learn the most important commands in
order to be able to do some work. Note that I sometime 'lie' or 'simplify'
things, if you want all the details you should look at some other document.
You could for example look at one of the tutorials you can find using
[Google][goo] or why not read the [subversion book][svn].

Subversion is a [version control or revision control system][vcs] intended to
be used by one or more people at one or more locations. This means that it's
possible

+   for one user to work on a project at different computers and be sure
    that the files are up to date.

+   for several users to work together on a project being sure changes
    that made by others are not overwritten accidently.

[goo]: http://www.google.com/search?ie=utf8&oe=utf8&q=subversion+tutorial
[svn]: http://svnbook.red-bean.com/
[vcs]: http://en.wikipedia.org/wiki/Version_control



                                                                         Jan Erik Moström
Jan Erik Moström
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>Intro</title>
    <meta name="generator" content="BBEdit 8.6" />
</head>
<body>
    <h1>Intro</h1>

    <p>
        This is a quick intro on how to use subversion, it's not intended to
        be a complete tutorial of subversion or even a proper introduction to
        subversion. It's intended for those who want to learn the most
        important commands in order to be able to do some work. Note that I
        sometime 'lie' or 'simplify' things, if you want all the details you
        should look at some other document. You could for example look at one
        of the tutorials you can find using 
        <a href="http://www.google.com/search?ie=utf8&oe=utf8&q=subversion+tutorial">
        Google</a> or why not read the 
        <a href="http://svnbook.red-bean.com/">subversion book</a>.
    </p>
    <p>
        Subversion is a <a href="http://en.wikipedia.org/wiki/Version_control"> 
        version control or revision control system</a> intended to be used by
        one or more people at one or more locations. This means that it's
                                           possible
    </p>
    <ul>
        <li>
            <p>
                for one user to work on a project at different computers and
                be sure that the files are up to date.
            </p>
        </li>
        <li>
            <p>
                for several users to work together on a project being sure
                changes that made by others are not overwritten accidently.
            </p>
        </li>
    </ul>
</body>
</html>                                                                                 Jan Erik Moström
Jan Erik Moström
Syftet med markup languages

• Typ av information
  • Rubrik
  • Lista
  • Bild
  • etc
• Inte utseendet




                              Jan Erik Moström
CSS

• Används för att styra utseendet
• Enkelt att byta utseendet på en sajt




                                         Jan Erik Moström
Jan Erik Moström
Jan Erik Moström
body
{
    background-color: #555;
    font-size: 13px;
    font-family: Verdana, Helvetica, San-Serif;
    color: #666;
}

#page
{
    background-color: #fff;
    border-color: #888;
    border-width: 2px;
    border-style: solid;
    width: 940px;
    margin: auto;
    background-image: url(line.png);
    background-repeat: repeat-y;
}

#pagetop
{
    margin: 0px;
    padding: 0px;
    background-image: url(topbg.png);
    background-repeat: repeat-x;
    height: 35px;
}

#pagetop h1
{
    margin: 0px;
    color: white;
    padding: 0px 5px;
}

#pagetop ul
{
    display: inline;
    list-style: none;
    float: right;
    margin: 0px;
    color: white;
}                                                 Jan Erik Moström
Statiska och dynamiska websidor

• Statiska sidor                 • “Semi-dynamiska”
  • Ändras inte ofta               • Blandning
  • Snabba och resurssnåla
  • Otillräckliga ibland
• Dynamiska
  • Skapas ofta när man tittar
    på sidan
  • Olika krav => annorlunda
    dynamik
                                                      Jan Erik Moström
Klient - server skripts

• Klientsidan
  • JavaScript (har inget med Java att göra)
  • Körs i browsern (ingen browser fungerar exakt likadant)
• Server
  • Ett program under webservern (eller är webservern)
  • Kommunicerar med databaser etc
  • Olika varianter
  • Olika språk
                                                         Jan Erik Moström
Server Side Includes (SSI)

• Direktiv i HTML koden

 <!--#config timefmt="%A %B %d, %Y" -->
 Today is <!--#echo var="DATE_LOCAL" -->



<!--#include virtual="/footer.html" -->


This document last modified <!--#flastmod file="index.html" -->




 <!--#exec cmd="ls" -->
                                                            Jan Erik Moström
Språk för dynamiska sidor

• Shell scripts (sh)   • C++
• Java (JSP)           • ASP
• Perl                 • eller nåt annat käckt
• Python
• Ruby
• PHP
•C


                                                 Jan Erik Moström
Webserver

• Finns flera (IIS, Roxen, etc)
• Vanligast - Apache
  • Standard på Mac och de flesta Unix/Linux
  • Även Windows




                                              Jan Erik Moström
  En första enkel version av dynamiska sidor

#! /usr/bin/perl -w

print <<SIMPLE_EXAMPLE;
Content-type: text/html\n\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>Exempel</title>
    <meta name="generator" content="BBEdit 8.2">
</head>
<body>
<p>
    Ett exempel på hur man skulle kunna göra.
</p>
<hr>
</body>
</html>
SIMPLE_EXAMPLE



                                                                         Jan Erik Moström
CGI script

• Common Gateway Interface
• Ett protocol för hur man ska föra över information från klient
  till ett skript på servern




                                                            Jan Erik Moström
Installera ett CGI skript

• Tre saker
  • Konfigurera Apache rätt
  • Installera CGI-skriptet på rätt ställe
  • Ge skriptet rätt rättigheter




                                             Jan Erik Moström
 #LoadModule ssl_module                    libexec/httpd/libssl.so
 LoadModule perl_module                   libexec/httpd/libperl.so
 #LoadModule php4_module                   libexec/httpd/libphp4.so



           #AddModule mod_ssl.c
           AddModule mod_perl.c
           #AddModule mod_php5.c

 Allow from 127.0.0.1 192.168.0.2

ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/"
ScriptAlias /notes/ "/Library/WebServer/CGI-Executables/showMarkdownWiki.cgi/"




                                                                       Jan Erik Moström
> ls -l perl.cgi
-rwxr--r--   1 jem admin   445 Feb 22 21:49 perl.cgi
> chmod a+rw perl.cgi
-rwxr-xr-x   1 jem admin   445 Feb 22 21:49 perl.cgi*

                                                Jan Erik Moström
Ta hand om data från formulär

• CGI modul
  • Gör jobbet och lägger in informationen i en hash
  • Läs ut informationen från hashen, that’s it!




                                                       Jan Erik Moström
Skapa ett forumlär i HTML




                            Jan Erik Moström
Skapa ett formulär i HTML




                            Jan Erik Moström
<form action="/cgi-bin/perlformsimple.cgi" method="post">
    <table align="center">
        <tr>
            <th align="right">Stad:</th>
            <td>
                <select name="city">
                    <option>Lycksele</option>
                    <option>Skellefteå</option>
                    <option selected>Umeå</option>
                </select>
            </td>
        </tr>
        <tr>
            <th align="right" valign="top">Typ:</th>
            <td>
                <input name="type_info" type="radio" value="Employed"> Anställd<br>
                <input name="type_info" type="radio" value="Student" checked> Student
            </td>
        </tr>
        <tr>
            <th align="right" valign="top">Önskemål:</th>
            <td>
                <input name="money_info" type="checkbox" value="MoreMoney"> Högre lön<br>
                <input name="money_info" type="checkbox" value="MoreFreeTime" checked> Mindre arbetstid
            </td>
        </tr>

       <tr>
           <th align="right">Beskrivning:</th><td><input type="text" name="description"></td>
       </tr>
       <tr>
           <th align="right" valign="top">Kommentar:</th>
           <td><textarea name="comments" rows="10" cols="50">Default text</textarea></td>
       </tr>

        <tr>
            <td colspan="2" align="center"><input type="submit" name="submit" value="Skicka"></td>
        </tr>
    </table>
</form>
                                                                                                Jan Erik Moström
#! /usr/bin/perl -w

use CGI;

my $input = new CGI;

print $input->header();
print <<HTML_HEADER;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>Exempel</title>
    <meta name="generator" content="BBEdit 8.2">
</head>
<body>
<table align="center" border="1">
    <tr><th>Variabel</th><th>Värde</th></tr>
HTML_HEADER

print '<tr><td align="right" valign="top">city</td><td valign="top">' .
    $input->param("city") . "</td></tr>";
print '<tr><td align="right" valign="top">type_info</td><td valign="top">' .
    $input->param("type_info") . "</td></tr>";
print '<tr><td align="right" valign="top">money_info</td><td valign="top">' .
    $input->param("money_info") . "</td></tr>";
print '<tr><td align="right" valign="top">description</td><td valign="top">' .
    $input->param("description") . "</td></tr>";
print '<tr><td align="right" valign="top">comments</td><td valign="top">' .
    $input->param("comments") . "</td></tr>";

print <<END_OF_HTML_FOOTER;
    </table>
</body>
</html>
END_OF_HTML_FOOTER                                                               Jan Erik Moström
Formulär för att ladda upp en fil




                                   Jan Erik Moström
Formulär för att ladda upp filer




                                  Jan Erik Moström
#! /usr/bin/perl -w

use CGI;

my $destionationDirectory = "/tmp";

my $input = new CGI;

my $description = $input->param("description");

my $filename = $input->param("rawdata");
$filename =~ s/.*[\\\/](.*)/$1/;

my $uploadedFile = $input->upload('rawdata');

open(DESTFILE,">$destionationDirectory/XX$filename");

while( <$uploadedFile> ){
    print DESTFILE;
}

                                                   Jan Erik Moström
print $input->header( );

print <<END_OF_HTML_HEADER;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>Exempel</title>
    <meta name="generator" content="BBEdit 8.2">
</head>
<body>
<p>
    Ett exempel på hur man skulle kunna göra.
</p>
END_OF_HTML_HEADER
print '<p>Detta fanns i filen: ' . $filename . '<hr>';

seek($uploadedFile,0,0);

while( <$uploadedFile> ){
    print;
}

print <<END_OF_HTML_FOOTER;
<hr>
</body>
</html>
END_OF_HTML_FOOTER

close($uploadedFile);
                                                                    Jan Erik Moström

								
To top