ovn1_1.php

2.3 Extra uppgift

[ Utskriftsversion av dessa uppgifter ]

 

Sidans tema: include_once, allmänt om kodning

 

Denna övning är en flerstegsprocess där resultatet skall bli en sida där man kan sätta in och ta bort länkar. Jag använder inte en databas, utan kör mot en vanlig textfil. Som lite extra krydda skall sidan ha möjlighet att kontrollera att länkarna är i skick samt - vid behov - tid och storlek för filen som länkats till.

Startpunkten

  1. Skapa en katalog under din site (Linux eller Windows). Katalogen skall heta links. Se till att webservern har skrivrättigheter till denna.
    I linux betyder detta att du efter att ha skapat katalogen med mkdir links så skriver du chmod 777 links
    (Detta är inte en helt god idé - mer om detta senare)
    I Windows ser du till att IUSR_SERVERNAMN har read, write och execute rätt till katalogen

  2. Skapa en fil med namnet o1code.php i denna katalog och sätt in följande i denna fil:
    <?php
        
    # det kommer nog mer hit...
    ?>
    Listning 2.8.1 - samples/o1code.php

    Resultat av listning 2.8.1


  3. Skapa en fil med namnet links.php i denna katalog och sätt in följande HTML-kod i denna fil:
    <?php
        
    include_once( dirname ( __FILE__ ) . "/o1code.php" );
    ?>
    <html>
    <head>
    <title>Mina länkar</title>
    <meta    http-equiv="Content-Type"
            content="text/html; charset=iso-8859-1">
    </head>
    <body bgcolor="#FFFFFF">


    </body>
    </html>
    Listning 2.8.2 - samples/o1.php

    Mina länkar
    Resultat av listning 2.8.2


  4. Skapa en fil med namnet links.txt och sätt den i samma katalog som de övriga filerna (visserligen skall filen kunna hanteras direkt med ett webgränssnitt men vi kommer snabbare igång med en startfil) . Skriv in ett antal rader enligt följande system:

    webadress<tabulator>förklaring<tabulator>betyg<tabulator>titel<enter>

    OBS! Se gärna till att ni sätter in minst en giltig adress, minst en adress där servern finns men inte sidan och minst en där servern inte finns

    Exempel:
    http://www.puv.fi/    En websajt    1    Vasa Yrkeshögskola
    http://www.puv.fi/not_exist.asp     En annan    2    En sida
    http://www.not_exist.fi/test.htm    Funkar?      3     Titel
    Listning 2.8.3 - samples/links_demo.txt
    [Visa i separat fönster]

    OBS! Se till att URL slutar med / om du inte har ett filnamn angivet

ovn1_2.php

2.3.1 Listningen

Sidans tema: file, list, foreach, function

 

OBS! Jag måste skapa nya filer för varje steg. Ni skall använda samma filer som i föregående sida.

Modifiera o1code.php

Öppna o1code.php och sätt in följande

<?php
    
# en funktion som visar innehållet i
    # länklistan
    # parameter: namnet på filen
    
function visaLänkarna ( $filnamn )
    {
        
# öppna filen och sätt allt in i en array
        
$allt = file( $filnamn  );

        
# vi skall returnera en komplett HTML-tabell
        # observera .= (en punkt före =)
        
$result = "<table border=\"1\">";    
        
$result .= "<tr>";
        
$result .= "<td>URL</td>";
        
$result .= "<td>Förklaring</td>";
        
$result .= "<td>Betyg</td>";
        
$result .= "<td>Titel</td>";
        
$result .= "</tr>";

        
# loopa genom arrayen allt
        # raden kommer att vara en rad i filen
        
foreach( $allt as $raden )
        {
            
# plocka ut ut de enskilda fälten
            # explode skapar en array och
            # list skapar enskilda variabler av arrayen
            
list($url, $description, $rating, $title ) = explode ( "\t", $raden );
            
            
# plocka ihop såval tabellen men också "a href"
            
$result .= "<tr><td><a href=\"$url\">$url</a></td>";
            
$result .= "<td>$description</td>";
            
$result .= "<td>$rating</td>";
            
$result .= "<td>$title</td></tr>";
        }

        
# avsluta tabellen
        
$result .= "</table>";

        
# returnera den genererade tabellen
        
return $result;
    }
?>
Listning 2.8.1.1 - samples/o1code2.php

Resultat av listning 2.8.1.1

Modifiera links.php

Sätt sedan in detta i links.php. Observera att det även har ändrats i början av filen

<?php
    
# jag måste skapa en ny fil - du skall fortfarende
    # inkludera "/o1code.php"
    # om du bara tar copy/paste varje gång
    # så får du problem (skyll dig själv)
    
include_once( dirname ( __FILE__ ) . "/o1code2.php" );

    
# med den katalogstruktur som er övning har
    # kan du även skriva
    # $länkFilen = "links.txt" ;
    # med min struktur måste jag skriva lite annorunda
    
$länkFilen = dirname ( __FILE__ ) . "/links.txt" ;
?>
<html>
<head>
<title>Mina länkar</title>
<meta    http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">

<?php
    
# använd funktionen i den inkuderade filen
    # och visa dess resutat
    
echo visaLänkarna( $länkFilen );
?>

</body>
</html>
Listning 2.8.1.2 - samples/o1_2.php

Mina länkar
URLFörklaringBetygTitel
Resultat av listning 2.8.1.2

Att fundera på:

Förstår du hur systemet fungerar? Om inte...

Skule det inte vara bra att kunna visa listan sorterad på lite olika sätt? Se nästa sida.

ovn1_3.php

2.3.2 Sortera - steg 1

Sidans tema: $HTTP_SERVER_VARS

Modifiera o1code.php

Öppna o1code.php och ändra den på följande sätt

<?php
    
# en funktion som visar innehållet i
    # länklistan
    # parameter: namnet på filen
    
function visaLänkarna ( $filnamn )
    {
        
# NYTT------------------------------------------
        # I PHP 4.1.0 skulle vi också kunnat skriva
        # $filen = $_SERVER["PHP_SELF"];
        # och inte behövt global raden...
        
global $HTTP_SERVER_VARS;
        
$filen = $HTTP_SERVER_VARS["PHP_SELF"];
        
# SLUT PÅ NYTT-----------------------------------

        # öppna filen och sätt allt in i en array
        
$allt = file( $filnamn  );

        
# vi skall returnera en komplett HTML-tabell
        
$result = "<table border=\"1\">";    
        
        
# ÄNDRADE ---------------------------------------
        
$result .= "<tr>";
        
$result .= "<td><a href=\"$filen?SORT=url\">URL</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=description\">Förklaring</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=rating\">Betyg</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=title\">Titel</a></td>";
        
$result .= "</tr>";
        
# SLUT PÅ ÄNDRADE -------------------------------

        # loopa genom arrayen allt
        # raden kommer att vara en rad i filen
        
foreach( $allt as $raden )
        {
            
# plocka ut ut de enskilda fälten
            # explode skapar en array och
            # list skapar enskilda variabler av arrayen
            
list($url, $description, $rating, $title ) = explode ( "\t", $raden );
            
            
# plocka ihop såval tabellen men också "a href"
            
$result .= "<tr><td><a href=\"$url\">$url</a></td>";
            
$result .= "<td>$description</td>";
            
$result .= "<td>$rating</td>";
            
$result .= "<td>$title</td></tr>";
        }

        
# avsluta tabellen
        
$result .= "</table>";

        
# returnera den genererade tabellen
        
return $result;
    }
?>
Listning 2.8.2.1 - samples/o1code3.php

Resultat av listning 2.8.2.1

Inga ändringar i links.php

<?php
    
# jag måste skapa en ny fil - du skall fortfarende
    # inkludera "/o1code.php"
    # om du bara tar copy/paste varje gång
    # så får du problem (skyll dig själv)
    
include_once( dirname ( __FILE__ ) . "/o1code3.php" );
    
    
# med den katalogstruktur som er övning har
    # kan du även skriva
    # $länkFilen = "links.txt" ;
    # med min struktur måste jag skriva lite annorunda
    
$länkFilen = dirname ( __FILE__ ) . "/links.txt" ;
?>
<html>
<head>
<title>Mina länkar</title>
<meta    http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">

<?php
    
# använd funktionen i den inkuderade filen
    # och visa dess resutat
    
echo visaLänkarna( $länkFilen );
?>

</body>
</html>
Listning 2.8.2.2 - samples/o1_3.php

Mina länkar
URLFörklaringBetygTitel
Resultat av listning 2.8.2.2

Att fundera på:

Observera att när du klickar på länkarna i tabellen kommer ?SORT=x att sättas till arderssen

ovn1_4.php

2.3.3 Sortera - steg 2

Sidans tema: uasort, referens, $HTTP_GET_VARS , strcasecmp

 

Modifiera o1code.php

Öppna o1code.php och ändra den på följande sätt

<?php
    
# NYA ----------------------------------------------
    
    # funktion som sorterar arrayen
    # observera & tecknet som gör att
    # arrayen sänds med referens
    # och modifieras "in-place"
    
function minSortering( &$arrayen )
    {    
        
# Kolla om det fanns en sortering i adressraden
        
global $HTTP_GET_VARS;
        if ( isset (
$HTTP_GET_VARS["SORT"] ) )
        {
            
$sorteringsNyckel = $HTTP_GET_VARS["SORT"];
        }
        else
        {
                
# default sortering är enligt url
                
$sorteringsNyckel = "url" ;
        }
        
# sortera enligt angiven nyckel
        # det vi i praktiken sände via URL var vilken
        # funktion vi skulle använda för sortering
        
uasort( $arrayen, $sorteringsNyckel );
    }

    
# funktion som sorterar enligt url
    
function url( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[0], $rightArray[0] );
    }
    
    
# funktion som sorterar enligt description
    
function description( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[1], $rightArray[1] );
    }
    
    
# funktion som sorterar enligt rating
    
function rating( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[2], $rightArray[2] );
    }

    
# funktion som sorterar enligt title
    
function title( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[3], $rightArray[3] );
    }
    
# SLUT PÅ NYA --------------------------------------

    # en funktion som visar innehållet i
    # länklistan
    # parameter: namnet på filen
    
function visaLänkarna ( $filnamn )
    {
        global
$HTTP_SERVER_VARS;
        
$filen = $HTTP_SERVER_VARS["PHP_SELF"];
        
        
# öppna filen och sätt allt in i en array
        
$allt = file( $filnamn  );
        
        
# NYTT ---------------------------------------------
        
minSortering( $allt );
        
# SLUT PÅ NYTT -------------------------------------
        
        # vi skall returnera en komplett HTML-tabell
        
$result = "<table border=\"1\">";    
        
        
$result .= "<tr>";
        
$result .= "<td><a href=\"$filen?SORT=url\">URL</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=description\">Förklaring</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=rating\">Betyg</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=title\">Titel</a></td>";
        
$result .= "</tr>";

        
# loopa genom arrayen allt
        # raden kommer att vara en rad i filen
        
foreach( $allt as $raden )
        {
            
# plocka ut ut de enskilda fälten
            # explode skapar en array och
            # list skapar enskilda variabler av arrayen
        
list($url, $description, $rating, $title ) = explode ( "\t", $raden );
            
            
# plocka ihop såval tabellen men också "a href"
            
$result .= "<tr><td><a href=\"$url\">$url</a></td>";
            
$result .= "<td>$description</td>";
            
$result .= "<td>$rating</td>";
            
$result .= "<td>$title</td></tr>";
        }

        
# avsluta tabellen
        
$result .= "</table>";

        
# returnera den genererade tabellen
        
return $result;
    }
?>
Listning 2.8.3.1 - samples/o1code4.php

Resultat av listning 2.8.3.1

Du behöver inte göra några ändringar i links.php

<?php
    
# jag måste skapa en ny fil - du skall fortfarende
    # inkludera "/o1code.php"
    # om du bara tar copy/paste varje gång
    # så får du problem (skyll dig själv)
    
include_once( dirname ( __FILE__ ) . "/o1code4.php" );
    
    
# med den katalogstruktur som er övning har
    # kan du även skriva
    # $länkFilen = "links.txt" ;
    # med min struktur måste jag skriva lite annorunda
    
$länkFilen = dirname ( __FILE__ ) . "/links.txt" ;
?>
<html>
<head>
<title>Mina länkar</title>
<meta    http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">

<?php
    
# använd funktionen i den inkuderade filen
    # och visa dess resutat
    
echo visaLänkarna( $länkFilen );
?>

</body>
</html>
Listning 2.8.3.2 - samples/o1_4.php
[Visa i separat fönster]

 

ovn2_1.php

2.3.4 Kontroll

Sidans tema: fopen, file, fsockopen, HTTP protokollet

 

Skulle det inte vara bra om man kunde kolla om sidorna finns kvar och när de ändrats om de finns kvar? OK, lets do it!

Skapa en fil med namet checklinks.php

Sätt den i samma katalog som de övriga och sätt in följande:

<?php
    
function kollaLänkarna ( $filnamn )
    {
        
# öppna filen och sätt allt in i en array
        
$allt = file( $filnamn  );
        
# filen har redan stängts
        
        # öppna upp filen för skrivning
        
$fp = fopen( $filnamn, "w+" );

        
# lås filen så att andra kan läsa men inte skriva
        
flock( $fp, 1 );
        
        
# loopa genom arrayen allt
        
foreach( $allt as $raden )
        {
            list(
$url, $description, $rating, $title ) = explode ( "\t", $raden );
            
            
# plocka ut servernamn respektive filnamn ur url:n
            # sätt dem in i en array där $matches[1] är servern
            # och $matches[2] är sidan (om någon)
            
preg_match( "/http:\/\/([^\/]*)\/(.*)/", $url, $matches );
            
            
# skapa en tom header för reslutatet
            
$headerdata = array();
            
            
# kolla om sidan finns
            # om funktionen returnerar true kommer
            # $headerdata att fyllas med headerns data
            # i annat fall kommer $headerdata["Status"] att
            # innehålla orsaken till felet
            
if ( kontaktaServern( $matches ,$headerdata ) )
            {
                
# skapa en tabseparerad rad
                
$nyrad =  $url . "\t";
                
$nyrad .= $description. "\t";
                
$nyrad .= $rating . "\t";
                
$nyrad .= trim($title) . "\t";
                
$nyrad .= $headerdata["Date"] ."\r\n" ;
            }
            else
            {    
                
# skapa en tabseparerad rad
                
$nyrad = $url . "\t";
                
$nyrad .= $description. "\t";
                
$nyrad .= $rating . "\t";
                
$nyrad .= trim($title) . "\t";
                
$nyrad .= $headerdata["Status"] . "\r\n";
            }
            
# skriv den tabseparerade raden till links.txt
            
fputs( $fp, $nyrad );
        }
        
        
# tag bort fillåsningen
        
flock( $fp, 3 );
        
        
# stäng filen
        
fclose( $fp );
        
    }
    
    
# funktion som kollar om en server är vid liv och om sidan
    # finns
    # första parametern är en array med servernamnen
    # och file (inklusive path)
    # andra är en *referens* till en array som kommer att användas för
    # resultat-rapportering
    
function kontaktaServern( $data , &$resultat )
    {
        
$server = $data[1];
        
# det finns kanske inte alltid ett andra element
        # i arrayen - därav @
        
$file  = "/" . @ $data[2];

        
# prova öppna porten
        
$fp = fsockopen (
                        
$server,    # adressen - ip går också
                        
80,            # port. 80 = HTTP
                        
$errno,        # för eventuella felnummer
                        
$errstr,    # eventuella felmeddelanden
                        
20            # timeout tid innan vi skall ge upp
                        
);

        
# gick det inte att öppna ?
        
if ( !$fp )  
        {
            
# Sätt felmeddelande om inte det gick
            
$resultat["Status"] = "Servern död";
            
# och returnera false
            
return false;
        }  
        else  
        {
            
# skapa ett normalt HTTP GET kommando
            # observera att en den alltid måste sluta
            # med \r\n\r\n (två CRLF)

            
$command = "GET $file ";
            
$command .= "HTTP/1.0\r\n";
            
$command .= "Host: $server\r\n\r\n";
        
            
# sänd detta
            
fputs ( $fp, $command );
                 
            
# läs första raden
            
$row  = fgets ( $fp, 4096 );

            
# ett normalt status medelande innehåller alltid 200
            # alla andra nummer visar på fel - t.ex att sidan inte finns
            # Vanliga meddelandenummer
            #        200 - OK
            #        301 - Moved Permanently
            #        302 - Moved Temporarily
            #        400 - Bad Request
            #        401 - Unauthorized
            #        402 - Forbidden
            #        404 - Not found
            #        500 - Internal server error
            
            
if ( ! ( strpos ( $row, "200" ) > 0 ) )
            {
                
$resultat["Status"] = "Sidan finns inte";
                return
false;
            }

            
# läs vidare tills headern är slut
            
while ( trim( $row ) != "" AND ( !feof( $fp ) ) )
            {
                
$row  = fgets ( $fp, 4096 );

                
# tag bort nedanstående kommentarstecken # om du vill
                # se vad som egentligen händer.
                # echo "$row <br />";

                # Headern från min server innehåller bland annat
                # Server: Microsoft-IIS/5.0
                # Date: Thu, 28 Feb 2002 14:52:40 GMT
                # Connection: Keep-Alive
                # Content-Length: 10168
                # Content-Type: text/html
                
                # observera att det alltid är ett kolon i raden

                
if (strpos ( $row, ":") > 0 )
                {
                    
# plocka ut det före kolon och det efter kolon
                    
list( $header, $content ) = explode ( ":", $row );
                    
                    
# kolla om det var date
                    # konvertera från GMT datum til en dateserial
                    
if ( strcasecmp( trim( $header ), "Date" ) == 0 )
                        
$content = strtotime( $content ) ;
                    
# sätt in detta i resultat arrayen
                    
$resultat[ trim( $header ) ] = trim ( $content );
                }
            }
    
            
# stäng porten
            
fclose ( $fp );
            
            
# kom vi ända hit måste väl allt vara ok
            
return true;
        }
    }
?>
Listning 2.8.4.1 - samples/checklinks.php

Resultat av listning 2.8.4.1

Ändra lite i o1code.php

<?php

    
    
# funktion som sorterar arrayen
    # observera & tecknet som gör att
    # arrayen sänds med referens
    # och modifieras "in-place"
    
function minSortering( &$arrayen )
    {    
        
# Kolla om det fanns en sortering i adressraden
        
global $HTTP_GET_VARS;
        if ( isset (
$HTTP_GET_VARS["SORT"] ) )
        {
            
$sorteringsNyckel = $HTTP_GET_VARS["SORT"];
        }
        else
        {
                
# default sortering är enligt url
                
$sorteringsNyckel = "url" ;
        }
        
# sortera enligt angiven nyckel
        # det vi i praktiken sände via URL var vilken
        # funktion vi skulle använda för sortering
        
uasort( $arrayen, $sorteringsNyckel );
    }

    
# funktion som sorterar enligt url
    
function url( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[0], $rightArray[0] );
    }
    
    
# funktion som sorterar enligt description
    
function description( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[1], $rightArray[1] );
    }
    
    
# funktion som sorterar enligt rating
    
function rating( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[2], $rightArray[2] );
    }

    
# funktion som sorterar enligt title
    
function title( $left, $right )
    {
            
$leftArray = explode ( "\t", $left );
            
$rightArray = explode ( "\t", $right );
            return
strcasecmp( $leftArray[3], $rightArray[3] );
    }


    
# en funktion som visar innehållet i
    # länklistan
    # parameter: namnet på filen
    
function visaLänkarna ( $filnamn )
    {
        global
$HTTP_SERVER_VARS;
        
$filen = $HTTP_SERVER_VARS["PHP_SELF"];
        
        
# öppna filen och sätt allt in i en array
        
$allt = file( $filnamn  );


        
minSortering( $allt );
        
        
# vi skall returnera en komplett HTML-tabell
        
$result = "<table border=\"1\">";    
        
        
$result .= "<tr>";
        
$result .= "<td><a href=\"$filen?SORT=url\">URL</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=description\">Förklaring</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=rating\">Betyg</a></td>";
        
$result .= "<td><a href=\"$filen?SORT=title\">Titel</a></td>";
        
$result .= "</tr>";

        
# loopa genom arrayen allt
        # raden kommer att vara en rad i filen
        
foreach( $allt as $raden )
        {
            
# plocka ut ut de enskilda fälten
            # explode skapar en array och
            # list skapar enskilda variabler av arrayen
            
            # ÄNDRAD ---------------------------------------------
            
list($url, $description, $rating, $title, $status ) = explode ( "\t", $raden );
            
# SLUT PÅ ÄNDRAD -------------------------------------
            
            # NY -------------------------------------------------
            
if ( intval ( $status ) != 0 )
            {
                
$status = "Senast ändrad : " . date("d.m.Y", trim( $status )  );
            }
            
# SLUT PÅ NY ----------------------------------------

            # plocka ihop såval tabellen men också "a href"
            
$result .= "<tr><td><a href=\"$url\">$url</a></td>";
            
$result .= "<td>$description</td>";
            
$result .= "<td>$rating</td>";
            
$result .= "<td>$title</td></tr>";
            
            
# NY -------------------------------------------------
            
$result .= "<tr><td colspan=\"4\">$status</td></tr>";
            
# SLUT PÅ NY ----------------------------------------
        
}

        
# avsluta tabellen
        
$result .= "</table>";

        
# returnera den genererade tabellen
        
return $result;
    }
?>
Listning 2.8.4.2 - samples/o2code1.php

Resultat av listning 2.8.4.2

Ändra lite i links.php

<?php
    
    
# NY -------------------------------------------------
    
include_once( dirname ( __FILE__ ) . "/checklinks.php" );
    
# SLUT PÅ NY -----------------------------------------

    # du skall fortfarande inkludera o1code.php
    
include_once( dirname ( __FILE__ ) . "/o2code1.php" );
    
$länkFilen = dirname ( __FILE__ ) . "/links.txt" ;
?>
<html>
<head>
<title>Mina länkar</title>
<meta    http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">

<?php
    
    
# NY -------------------------------------------------
    
kollaLänkarna ($länkFilen );
    
# SLUT PÅ NY -----------------------------------------

    
echo visaLänkarna( $länkFilen );
    
?>

</body>
</html>
Listning 2.8.4.3 - samples/o2_1.php

Mina länkar
Warning: fopen(/home/vhome/enges.org/www/phpkurs/samples/links.txt) [function.fopen]: failed to create stream: Permission denied in /home/vhome/enges.org/www/phpkurs/samples/checklinks.php on line 9

Warning: flock(): supplied argument is not a valid stream resource in /home/vhome/enges.org/www/phpkurs/samples/checklinks.php on line 12

Warning: flock(): supplied argument is not a valid stream resource in /home/vhome/enges.org/www/phpkurs/samples/checklinks.php on line 55

Warning: fclose(): supplied argument is not a valid stream resource in /home/vhome/enges.org/www/phpkurs/samples/checklinks.php on line 58
URLFörklaringBetygTitel
Resultat av listning 2.8.4.3

 

din2.php

2.3.5 Din uppgift

  1. UPPGIFT 2:
    Content-Length i HTTP headern (se föregående sidas kod) säger hur stor filen är. Se till att detta visas i KB och med 2 decimaler i tabellen. Sök fram info om number_format samt övriga behövliga funktioner.
    OBS! Efter att funktionen kontaktaServern har blivit körd så kommer $headerdata["Content-Length"] att innehålla sidans storlek... (kanske)

    Beräknad tidsåtgång: ca. 0,5h.

  2. UPPGIFT 3:
    Ändra programmet så att det i tabellen visas

    +
    om sidan finns
    - om sidan inte finns
    ? om servern inte svarade

    Se till att detta visas före filens namn i tabellen, och se till att det bara visas en rad per länk.

    Beräknad tidsåtgång: ca. 1h.

  3. UPPGIFT 4:
    Att ge fulla rättigheter åt alla med chmod 777 i Linux, eller fulla rättigheter åt IUSR_SERVERNAMN i Windows är inte så god idé. Ändra programmet så att länkfilen läggs i en annan katalog än php-filerna (t.ex. data).
    Vilka är de mest restriktiva rättigheter du kan ge åt katalogen som innehåller links.txt samt links katalogen där dina PHP-filer finns. Programmet skall fungera, men inte mer...
    Tips. tag en titt på chmod funktionen

    Beräknad tidsåtgång: ca. 1h.

  4. UPPGIFT 5:
    På föregående sida fanns programkod som automatiskt uppdaterade länkfilen när sidan laddades. Ändra om sidan så att du sätter en länk i början av sidan:
    <a href="links.php?REFRESH=true">Kontrollera alla länkar</a>

    Ändra PHP-koden så att kollaLänkarna funktinen endast körs om REFRESH=true fanns i adressraden. Använd isset och $HTTP_GET_VARS...

    Beräknad tidsåtgång: ca. 0,5h.

  5. UPPGIFT 6:
    Skapa en skild PHP sida. Kalla den insertlink.php Denna sida skall innehålla en form med:
    1. En textbox för URL (adress)
    2. En combobox som skall innehålla siffrorna 1 till 5 för betyget på sidan
    3. En textbox för en kort förklaring över vad detta är för slags sida
    4. En Submit knapp

    När du skrivit in något och submittat skall det du skrivit sättas in i slutet av links.txt på samma sätt som de övriga raderna, med tab mellan de enskilda uppgifterna.
    Tips: tag en till på fopen, flock och fputs

    Beräknad tidsåtgång: ca. 1h.

  6. EXTRA UPPGIFT FÖR DEN SOM VILL STILA LITE:
    På sidan strings_reg_ex.php visas kod som öppnar en websida och (bland annat) hämtar titeln från sidan. Du kanske lade märke till att formen i ovanstående uppgift inte hade någon textbox för titel. (Jag hoppas du beaktade detta i koden.)
    Skapa en funktion som får en URL som parameter och som returnerar sidans titel (om någon).
    Använd denna funktion i samband med skrivning till länkfilen, så att titel kommer automatiskt.