några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

1 2 3 4 5 6 7 8 9 Din uppgift

2.3.6 Skrivning till filen

Det är förhållandevis enkelt att läsa filer. Hela Internet går ju ut på att läsa filer och visa dessa. Att skriva är dock lite mer komplicerat.

 

Kopiera all kod som fiinns i rutan nedan och sätt in i en ny fil som du kallar filtest.php. Prova detta program genom att surfa till detta program på din hemsideskatalog.

 

<?php     
    $teststräng
= "en liten teststräng";
    
# Öppna en fil för skrivning      
    # skapa den vid behov
    
$filen = fopen ( "testa.txt", "w+" );

     
    
# gick det?
    
if ( $filen )  
    {
        
# lås filen så att andra kan läsa men inte skriva
        
flock( $filen, 1 );
        
# skriv till filen
        
fputs ( $filen, $teststräng );
        
# tag bort låsningen
        
flock( $filen, 3 );  
        
# stäng filen
        
fclose ( $filen );
        echo
"Har skrivit till filen";
    }
    else
    {
        echo
"Det sket sig!";
    }
    
?>
Listning 2.3.6.1 - samples/tt2.php
[Visa i separat fönster]

 

Om detta program fungerar är allt frid och fröjd, men troligtvis får du följande resultat istället (... kommer att ersättas av din hemkatalogs path):


Warning: fopen("testa.txt", "w+") - Permission denied in

...\tt2.php on line 5
Det sket sig!

 

Om du fick ett felmeddelande i stil med ovanstående beror detta på att php-programmet inte har rätt att skriva till denna fil. Gör i så fall följande:

  • Linux som server
    Skapa filen testa.txt i din php katalog. Du kan fast använda valfri editor och skapa en fil med minst ett tecken i.
    Kontakta serven med ett SSH program.
    Om du använder shell (där du skriver kommandon) så skriver du följande:
    cd public_html
    cd php
    chmod 777 testa.txt
    Om du använder SSH's filebrowserfönster kan du högerklicka på filen testa.txt och välja Properties. Se till att dessa är 777

  • Windows som server
    Skapa filen testa.txt i php katalogen
    Högerklicka på filen och välj Properties, Secutity
    Se till att användaren IUSR_datornnamn har modify rättigheter (om din dator heter KALLE finns det således en användare med namnet IUSR_KALLE. Det är detta konto som används för anonyma surfarklienter)

(Bägge operativsystemen kräver således att filen finns för att man skall kunna ändra på dess rättigheter. En bättre idé kan vara att sätta alla filer som skall kunna ändras till en underkatalog, och därefter se till att hela katalogen har modifieringsrättigheter.)

 

Efter att ha gjort ovanstående ändringar i filskyddet för testa.txt kan du prova filtest.php igen. Förhoppningsvis fungerar det nu.

 

Du kan även prova följande ändringar. Prova programmet flera gånger genom att klicka på refresh i din browser. Tag sedan en titt på vad filen testa.txt innehåller.

 

<?php     
    $teststräng
= "en liten teststräng";
    
# Öppna en fil för skrivning      
    # skapa den vid behov
    
    
$filen = fopen ( "testa.txt", "a");

     
    
# gick det?
    
if ( $filen )  
    {
        
# lås filen så att andra kan läsa men inte skriva
        
flock( $filen, 1 );
        
# skriv till filen
        
fputs ( $filen, $teststräng . "\r\n");
        
# tag bort låsningen
        
flock( $filen, 3 );  
        
# stäng filen
        
fclose ( $filen );
        echo
"Har skrivit till filen";
    }
    else
    {
        echo
"Det sket sig!";
    }
    
?>
Listning 2.3.6.2 - samples/tt3.php
[Visa i separat fönster]

Modifiera din gästboksfil

Se till att guestbook.txt har skrivrättigheter satt på samma sätt som du satte skrivrättigheter för filen testa.txt. Vill du veta vad 766 egentligen betyder så ta en titt på sidan filerna_fil.php. Dessutom kan det vara skäl att se hur fopen fungerar på sidan filerna_fil3.php

 

Modifiera din guestbook.php

<html>
      <
head>
        <
title>En g&auml;stbok</title>
      </
head>
    <
body>
    <
form>
        <
table border="1">
        <
tr><td>Namn:</td><td>
            <
input type="text" name="vem">
        </
td></tr>
        <
tr><td>Elpost:</td><td>
            <
input type="text" name="elpost">
        </
td></tr>
        <
tr><td>Ärende:</td><td>
            <
input type="text" name="arende">
        </
td></tr>
        <
tr><td>Text:</td>
        <
td>
            <
textarea name="texten" rows="5" cols="40"></textarea>
        </
td></tr>
        <
tr><td>&nbsp;</td><td>
            <
input type="submit" name="knapp" value="    Skriv    ">
        </
td></tr>
        </
table>
    </
form>
    <?
php
    
function beakta_alla_dumheter( $text )
    {
        
$text = strip_tags( $text );
        
$text = strip_tags( $text );
        
$text = nl2br( $text );
        
$text = str_replace( "\r", "", $text  );
        
$text = str_replace( "\n", "", $text );
        
$text = str_replace( "\\\"", "\"", $text );
        
$text = str_replace( "|", "", $text );
        return
$text;
    }
    if ( isset(
$_REQUEST[ "knapp" ] ) )    
    {
        
$vem = $_REQUEST[ "vem" ];
        
$elpost = $_REQUEST[ "elpost" ];
        
$ärende = $_REQUEST[ "arende" ];
        
$texten = $_REQUEST[ "texten" ];
        
$datum = date("Y.m.d H:i");
        
$vem        = beakta_alla_dumheter( $vem );
        
$ärende     = beakta_alla_dumheter( $ärende );
        
$elpost     = beakta_alla_dumheter( $elpost );
        
$texten     = beakta_alla_dumheter( $texten );
        
$allt = $datum . "|" . $vem . "|" . $elpost . "|" .
                
$ärende . "|" . $texten ;

        
# ändrat lite på echo för att visa tydligare vad som skett
        echo "Du klickade på Skriv och
                följande kommer att sättas i filen<br>";
        echo htmlentities ($allt);

        
        # öppna guestbook.txt för "append" = tillägg
        
$filen = fopen ( "guestbook.txt", "a");  
        
# gick det?
        /* förhindrar skrivning i detta exempel på grund av att det missbrukats
           if ( $filen )   
        {  
            # lås filen så att andra kan läsa men inte skriva
            flock( $filen, 1 );  
            # skriv till filen \n är för att notepad skall
            fputs ( $filen, $allt . "\n");  
            # tag bort låsningen
            flock( $filen, 3 );   
            # stäng filen
            fclose ( $filen );
        }
              */
        

    
}

    
# all PHP kod som tidigare

    # ...
    
?>
    </body>
</html>
Listning 2.3.6.3 - samples/_l3j.php
[Visa i separat fönster]

   UppgifterUppgift 26